Switch to GL_ARB_framebuffer_object
GTK+ 3.0 was currently using GL_EXT_framebuffer_object, which is deprecated as the ARB version has been merged into OpenGL 3.0 as well as OpenGL ES 2.0, and provides laxer requirements.
This commit is contained in:
34
gdk/gdkgl.c
34
gdk/gdkgl.c
@ -370,7 +370,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
paint_data = gdk_gl_context_get_paint_data (paint_context);
|
||||
|
||||
if (paint_data->tmp_framebuffer == 0)
|
||||
glGenFramebuffersEXT (1, &paint_data->tmp_framebuffer);
|
||||
glGenFramebuffers (1, &paint_data->tmp_framebuffer);
|
||||
|
||||
if (source_type == GL_RENDERBUFFER)
|
||||
{
|
||||
@ -423,10 +423,10 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
/* Create a framebuffer with the source renderbuffer and
|
||||
make it the current target for reads */
|
||||
framebuffer = paint_data->tmp_framebuffer;
|
||||
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, framebuffer);
|
||||
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
GL_RENDERBUFFER_EXT, source);
|
||||
glBindFramebufferEXT (GL_DRAW_FRAMEBUFFER_EXT, 0);
|
||||
glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
|
||||
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
||||
GL_RENDERBUFFER, source);
|
||||
glBindFramebuffer (GL_DRAW_FRAMEBUFFER, 0);
|
||||
|
||||
/* Translate to impl coords */
|
||||
cairo_region_translate (clip_region, dx, dy);
|
||||
@ -481,11 +481,11 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
{
|
||||
int clipped_src_x = x + (dest.x - dx * window_scale);
|
||||
int clipped_src_y = y + (height - dest.height - (dest.y - dy * window_scale));
|
||||
glBlitFramebufferEXT(clipped_src_x, clipped_src_y,
|
||||
(clipped_src_x + dest.width), (clipped_src_y + dest.height),
|
||||
dest.x, FLIP_Y(dest.y + dest.height),
|
||||
dest.x + dest.width, FLIP_Y(dest.y),
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
glBlitFramebuffer (clipped_src_x, clipped_src_y,
|
||||
(clipped_src_x + dest.width), (clipped_src_y + dest.height),
|
||||
dest.x, FLIP_Y(dest.y + dest.height),
|
||||
dest.x + dest.width, FLIP_Y(dest.y),
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
if (impl_window->current_paint.flushed_region)
|
||||
{
|
||||
cairo_rectangle_int_t flushed_rect;
|
||||
@ -505,7 +505,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
|
||||
glDisable (GL_SCISSOR_TEST);
|
||||
|
||||
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
|
||||
glBindFramebuffer (GL_FRAMEBUFFER, 0);
|
||||
|
||||
#undef FLIP_Y
|
||||
|
||||
@ -671,19 +671,19 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
cairo_surface_set_device_scale (image, buffer_scale, buffer_scale);
|
||||
|
||||
framebuffer = paint_data->tmp_framebuffer;
|
||||
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, framebuffer);
|
||||
glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
|
||||
|
||||
if (source_type == GL_RENDERBUFFER)
|
||||
{
|
||||
/* Create a framebuffer with the source renderbuffer and
|
||||
make it the current target for reads */
|
||||
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
GL_RENDERBUFFER_EXT, source);
|
||||
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
||||
GL_RENDERBUFFER, source);
|
||||
}
|
||||
else
|
||||
{
|
||||
glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
GL_TEXTURE_2D, source, 0);
|
||||
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
||||
GL_TEXTURE_2D, source, 0);
|
||||
}
|
||||
|
||||
glPixelStorei (GL_PACK_ALIGNMENT, 4);
|
||||
@ -699,7 +699,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
|
||||
glPixelStorei (GL_PACK_ROW_LENGTH, 0);
|
||||
|
||||
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
|
||||
glBindFramebuffer (GL_FRAMEBUFFER, 0);
|
||||
|
||||
cairo_surface_mark_dirty (image);
|
||||
|
||||
|
||||
@ -391,7 +391,7 @@ gtk_gl_area_ensure_buffers (GtkGLArea *area)
|
||||
|
||||
priv->have_buffers = TRUE;
|
||||
|
||||
glGenFramebuffersEXT (1, &priv->frame_buffer);
|
||||
glGenFramebuffers (1, &priv->frame_buffer);
|
||||
|
||||
if (priv->has_alpha)
|
||||
{
|
||||
@ -402,7 +402,7 @@ gtk_gl_area_ensure_buffers (GtkGLArea *area)
|
||||
/* Delete old render buffer if any */
|
||||
if (priv->render_buffer != 0)
|
||||
{
|
||||
glDeleteRenderbuffersEXT(1, &priv->render_buffer);
|
||||
glDeleteRenderbuffers (1, &priv->render_buffer);
|
||||
priv->render_buffer = 0;
|
||||
}
|
||||
}
|
||||
@ -410,7 +410,7 @@ gtk_gl_area_ensure_buffers (GtkGLArea *area)
|
||||
{
|
||||
/* For non-alpha we use render buffers so we can blit instead of texture the result */
|
||||
if (priv->render_buffer == 0)
|
||||
glGenRenderbuffersEXT (1, &priv->render_buffer);
|
||||
glGenRenderbuffers (1, &priv->render_buffer);
|
||||
|
||||
/* Delete old texture if any */
|
||||
if (priv->texture != 0)
|
||||
@ -423,12 +423,12 @@ gtk_gl_area_ensure_buffers (GtkGLArea *area)
|
||||
if ((priv->has_depth_buffer || priv->has_stencil_buffer))
|
||||
{
|
||||
if (priv->depth_stencil_buffer == 0)
|
||||
glGenRenderbuffersEXT (1, &priv->depth_stencil_buffer);
|
||||
glGenRenderbuffers (1, &priv->depth_stencil_buffer);
|
||||
}
|
||||
else if (priv->depth_stencil_buffer != 0)
|
||||
{
|
||||
/* Delete old depth/stencil buffer */
|
||||
glDeleteRenderbuffersEXT (1, &priv->depth_stencil_buffer);
|
||||
glDeleteRenderbuffers (1, &priv->depth_stencil_buffer);
|
||||
priv->depth_stencil_buffer = 0;
|
||||
}
|
||||
|
||||
@ -515,23 +515,23 @@ gtk_gl_area_attach_buffers (GtkGLArea *area)
|
||||
else if (priv->needs_resize)
|
||||
gtk_gl_area_allocate_buffers (area);
|
||||
|
||||
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, priv->frame_buffer);
|
||||
glBindFramebuffer (GL_FRAMEBUFFER, priv->frame_buffer);
|
||||
|
||||
if (priv->texture)
|
||||
glFramebufferTexture2D (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
||||
GL_TEXTURE_2D, priv->texture, 0);
|
||||
else if (priv->render_buffer)
|
||||
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
GL_RENDERBUFFER_EXT, priv->render_buffer);
|
||||
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
||||
GL_RENDERBUFFER, priv->render_buffer);
|
||||
|
||||
if (priv->depth_stencil_buffer)
|
||||
{
|
||||
if (priv->has_depth_buffer)
|
||||
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
|
||||
GL_RENDERBUFFER_EXT, priv->depth_stencil_buffer);
|
||||
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
|
||||
GL_RENDERBUFFER, priv->depth_stencil_buffer);
|
||||
if (priv->has_stencil_buffer)
|
||||
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT,
|
||||
GL_RENDERBUFFER_EXT, priv->depth_stencil_buffer);
|
||||
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
|
||||
GL_RENDERBUFFER, priv->depth_stencil_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
@ -547,7 +547,7 @@ gtk_gl_area_delete_buffers (GtkGLArea *area)
|
||||
|
||||
if (priv->render_buffer != 0)
|
||||
{
|
||||
glDeleteRenderbuffersEXT (1, &priv->render_buffer);
|
||||
glDeleteRenderbuffers (1, &priv->render_buffer);
|
||||
priv->render_buffer = 0;
|
||||
}
|
||||
|
||||
@ -559,14 +559,14 @@ gtk_gl_area_delete_buffers (GtkGLArea *area)
|
||||
|
||||
if (priv->depth_stencil_buffer != 0)
|
||||
{
|
||||
glDeleteRenderbuffersEXT (1, &priv->depth_stencil_buffer);
|
||||
glDeleteRenderbuffers (1, &priv->depth_stencil_buffer);
|
||||
priv->depth_stencil_buffer = 0;
|
||||
}
|
||||
|
||||
if (priv->frame_buffer != 0)
|
||||
{
|
||||
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
|
||||
glDeleteFramebuffersEXT (1, &priv->frame_buffer);
|
||||
glBindFramebuffer (GL_FRAMEBUFFER, 0);
|
||||
glDeleteFramebuffers (1, &priv->frame_buffer);
|
||||
priv->frame_buffer = 0;
|
||||
}
|
||||
}
|
||||
@ -707,8 +707,8 @@ gtk_gl_area_draw (GtkWidget *widget,
|
||||
w = gtk_widget_get_allocated_width (widget) * scale;
|
||||
h = gtk_widget_get_allocated_height (widget) * scale;
|
||||
|
||||
status = glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT);
|
||||
if (status == GL_FRAMEBUFFER_COMPLETE_EXT)
|
||||
status = glCheckFramebufferStatus (GL_FRAMEBUFFER);
|
||||
if (status == GL_FRAMEBUFFER_COMPLETE)
|
||||
{
|
||||
if (priv->needs_render || priv->auto_render)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user