mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-02-11 20:00:37 +01:00
[gl] Do not use unchecked GL v1.5 features
The span renderer uses ARB_vertex_buffer_object which was included into the core as part of OpenGL 1.5. We failed to check for the required version during initialisation, and to my surprise the i915 can only support OpenGL 1.4 as it lacks ARB_occlusion_query. So just use the ARB extension instead which is present on i915.
This commit is contained in:
parent
6c28c7a1e2
commit
eed17527f6
1 changed files with 13 additions and 11 deletions
|
|
@ -118,16 +118,18 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
|
|||
CAIRO_REFERENCE_COUNT_INIT (&ctx->ref_count, 1);
|
||||
CAIRO_MUTEX_INIT (ctx->mutex);
|
||||
|
||||
if (glewInit () != GLEW_OK) {
|
||||
if (glewInit () != GLEW_OK)
|
||||
return _cairo_error (CAIRO_STATUS_INVALID_FORMAT); /* XXX */
|
||||
}
|
||||
|
||||
if (! GLEW_EXT_framebuffer_object ||
|
||||
if (! GLEW_ARB_vertex_buffer_object ||
|
||||
! GLEW_EXT_framebuffer_object ||
|
||||
! GLEW_ARB_texture_env_combine ||
|
||||
! GLEW_ARB_texture_non_power_of_two)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Required GL extensions not available:\n");
|
||||
if (! GLEW_ARB_vertex_buffer_object)
|
||||
fprintf (stderr, " GL_ARB_vertex_buffer_object\n");
|
||||
if (! GLEW_EXT_framebuffer_object)
|
||||
fprintf (stderr, " GL_EXT_framebuffer_object\n");
|
||||
if (! GLEW_ARB_texture_env_combine)
|
||||
|
|
@ -1547,7 +1549,7 @@ _cairo_gl_span_renderer_flush (cairo_gl_surface_span_renderer_t *renderer)
|
|||
if (renderer->vbo_offset == 0)
|
||||
return;
|
||||
|
||||
glUnmapBuffer (GL_ARRAY_BUFFER_ARB);
|
||||
glUnmapBufferARB (GL_ARRAY_BUFFER_ARB);
|
||||
glDrawArrays (GL_LINES, 0, renderer->vbo_offset / renderer->vertex_size);
|
||||
renderer->vbo_offset = 0;
|
||||
}
|
||||
|
|
@ -1560,8 +1562,8 @@ _cairo_gl_span_renderer_get_vbo (cairo_gl_surface_span_renderer_t *renderer,
|
|||
|
||||
if (renderer->vbo == 0) {
|
||||
renderer->vbo_size = 16384;
|
||||
glGenBuffers (1, &renderer->vbo);
|
||||
glBindBuffer (GL_ARRAY_BUFFER_ARB, renderer->vbo);
|
||||
glGenBuffersARB (1, &renderer->vbo);
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, renderer->vbo);
|
||||
|
||||
if (renderer->setup.src.type == OPERAND_TEXTURE)
|
||||
renderer->vertex_size = 4 * sizeof (float) + sizeof (uint32_t);
|
||||
|
|
@ -1591,10 +1593,10 @@ _cairo_gl_span_renderer_get_vbo (cairo_gl_surface_span_renderer_t *renderer,
|
|||
|
||||
if (renderer->vbo_offset == 0) {
|
||||
/* We'll only be using these vertices once. */
|
||||
glBufferData (GL_ARRAY_BUFFER_ARB, renderer->vbo_size, NULL,
|
||||
glBufferDataARB (GL_ARRAY_BUFFER_ARB, renderer->vbo_size, NULL,
|
||||
GL_STREAM_DRAW_ARB);
|
||||
renderer->vbo_base = glMapBuffer (GL_ARRAY_BUFFER_ARB,
|
||||
GL_WRITE_ONLY_ARB);
|
||||
renderer->vbo_base = glMapBufferARB (GL_ARRAY_BUFFER_ARB,
|
||||
GL_WRITE_ONLY_ARB);
|
||||
}
|
||||
|
||||
offset = renderer->vbo_offset;
|
||||
|
|
@ -1721,8 +1723,8 @@ _cairo_gl_surface_span_renderer_finish (void *abstract_renderer)
|
|||
|
||||
_cairo_gl_span_renderer_flush (renderer);
|
||||
|
||||
glBindBuffer (GL_ARRAY_BUFFER_ARB, 0);
|
||||
glDeleteBuffers (1, &renderer->vbo);
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, 0);
|
||||
glDeleteBuffersARB (1, &renderer->vbo);
|
||||
glDisableClientState (GL_VERTEX_ARRAY);
|
||||
glDisableClientState (GL_COLOR_ARRAY);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue