[gtk+/wip/gl-texture] glarea: Always use textures



commit a066674e8b79249cbdd46809a4c2d21dc2de544b
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jan 17 09:17:08 2018 -0500

    glarea: Always use textures
    
    Drop code that was only necessary for drawing
    to a frame buffer. With gsk, we always want to
    get the result as a texture.
    
    With this commit, the has-alpha property no longer
    has any effect.

 gtk/gtkglarea.c |   57 +++++-------------------------------------------------
 1 files changed, 6 insertions(+), 51 deletions(-)
---
diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c
index a1397ff..5a0b350 100644
--- a/gtk/gtkglarea.c
+++ b/gtk/gtkglarea.c
@@ -152,7 +152,6 @@ typedef struct {
   int required_gl_version;
 
   guint frame_buffer;
-  guint render_buffer;
   guint texture;
   guint depth_stencil_buffer;
 
@@ -379,38 +378,13 @@ gtk_gl_area_ensure_buffers (GtkGLArea *area)
 
   glGenFramebuffersEXT (1, &priv->frame_buffer);
 
-  if (priv->has_alpha)
+  if (priv->texture == 0)
     {
-      /* For alpha we use textures as that is required for blending to work */
-      if (priv->texture == 0)
-        {
-          glGenTextures (1, &priv->texture);
-          priv->gdk_texture = gdk_texture_new_for_gl (priv->context,
-                                                      priv->texture,
-                                                      gtk_widget_get_width (widget),
-                                                      gtk_widget_get_height (widget));
-        }
-
-      /* Delete old render buffer if any */
-      if (priv->render_buffer != 0)
-        {
-          glDeleteRenderbuffersEXT(1, &priv->render_buffer);
-          priv->render_buffer = 0;
-        }
-    }
-  else
-    {
-    /* 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);
-
-      /* Delete old texture if any */
-      if (priv->texture != 0)
-        {
-          g_clear_object (&priv->gdk_texture);
-          glDeleteTextures(1, &priv->texture);
-          priv->texture = 0;
-        }
+      glGenTextures (1, &priv->texture);
+      priv->gdk_texture = gdk_texture_new_for_gl (priv->context,
+                                                  priv->texture,
+                                                  gtk_widget_get_width (widget),
+                                                  gtk_widget_get_height (widget));
     }
 
   if ((priv->has_depth_buffer || priv->has_stencil_buffer))
@@ -459,12 +433,6 @@ gtk_gl_area_allocate_buffers (GtkGLArea *area)
         glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
     }
 
-  if (priv->render_buffer)
-    {
-      glBindRenderbuffer (GL_RENDERBUFFER, priv->render_buffer);
-      glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB8, width, height);
-    }
-
   if (priv->has_depth_buffer || priv->has_stencil_buffer)
     {
       glBindRenderbuffer (GL_RENDERBUFFER, priv->depth_stencil_buffer);
@@ -513,9 +481,6 @@ gtk_gl_area_attach_buffers (GtkGLArea *area)
   if (priv->texture)
     glFramebufferTexture2D (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
                             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);
 
   if (priv->depth_stencil_buffer)
     {
@@ -538,12 +503,6 @@ gtk_gl_area_delete_buffers (GtkGLArea *area)
 
   priv->have_buffers = FALSE;
 
-  if (priv->render_buffer != 0)
-    {
-      glDeleteRenderbuffersEXT (1, &priv->render_buffer);
-      priv->render_buffer = 0;
-    }
-
   if (priv->texture != 0)
     {
       g_clear_object (&priv->gdk_texture);
@@ -938,8 +897,6 @@ gtk_gl_area_init (GtkGLArea *area)
   priv->auto_render = TRUE;
   priv->needs_render = TRUE;
   priv->required_gl_version = 0;
-
-  priv->has_alpha = 1;
 }
 
 /**
@@ -1149,8 +1106,6 @@ gtk_gl_area_set_has_alpha (GtkGLArea *area,
 
   has_alpha = !!has_alpha;
 
-  has_alpha = 1;
-
   if (priv->has_alpha != has_alpha)
     {
       priv->has_alpha = has_alpha;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]