[Cogl] [PATCH] Use the GL_DEPTH24_STENCIL8 internal format for packed buffers

Damien Lespiau damien.lespiau at gmail.com
Fri May 25 07:07:27 PDT 2012


From: Damien Lespiau <damien.lespiau at intel.com>

GL_DEPTH_STENCIL is not a valid internal format according to
EXT_packed_depth_stencil. Let's use the the GL_DEPTH24_STENCIL8 internal
format defined by the extension (internal format also used by the OES
code path).

I've noticed this when trying to create a texture with this format as
internal format and it did not pass the GL_PROXY_TEXTURE_2D test.
glRenderBufferStorage() uses internal formats as well, so changing it to
GL_DEPTH24_STENCIL8 seemed like the natural thing to do.
---
 cogl/cogl-framebuffer-private.h |    7 +++----
 cogl/cogl-framebuffer.c         |   12 ++++--------
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/cogl/cogl-framebuffer-private.h b/cogl/cogl-framebuffer-private.h
index 9922a1a..ccc9c22 100644
--- a/cogl/cogl-framebuffer-private.h
+++ b/cogl/cogl-framebuffer-private.h
@@ -167,10 +167,9 @@ struct _CoglFramebuffer
 };
 
 typedef enum {
-  COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH_STENCIL    = 1L<<0,
-  COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH24_STENCIL8 = 1L<<1,
-  COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH            = 1L<<2,
-  COGL_OFFSCREEN_ALLOCATE_FLAG_STENCIL          = 1L<<3
+  COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH24_STENCIL8 = 1L<<0,
+  COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH            = 1L<<1,
+  COGL_OFFSCREEN_ALLOCATE_FLAG_STENCIL          = 1L<<2
 } CoglOffscreenAllocateFlags;
 
 typedef struct _CoglGLFramebuffer
diff --git a/cogl/cogl-framebuffer.c b/cogl/cogl-framebuffer.c
index ec4acf6..13b3e24 100644
--- a/cogl/cogl-framebuffer.c
+++ b/cogl/cogl-framebuffer.c
@@ -830,22 +830,18 @@ try_creating_renderbuffers (CoglContext *ctx,
   GList *renderbuffers = NULL;
   GLuint gl_depth_stencil_handle;
 
-  if (flags & (COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH_STENCIL |
-               COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH24_STENCIL8))
+  if (flags & COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH24_STENCIL8)
     {
-      GLenum format = ((flags & COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH_STENCIL) ?
-                       GL_DEPTH_STENCIL : GL_DEPTH24_STENCIL8);
-
       /* Create a renderbuffer for depth and stenciling */
       GE (ctx, glGenRenderbuffers (1, &gl_depth_stencil_handle));
       GE (ctx, glBindRenderbuffer (GL_RENDERBUFFER, gl_depth_stencil_handle));
       if (n_samples)
         GE (ctx, glRenderbufferStorageMultisampleIMG (GL_RENDERBUFFER,
                                                       n_samples,
-                                                      format,
+                                                      GL_DEPTH24_STENCIL8,
                                                       width, height));
       else
-        GE (ctx, glRenderbufferStorage (GL_RENDERBUFFER, format,
+        GE (ctx, glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
                                         width, height));
       GE (ctx, glBindRenderbuffer (GL_RENDERBUFFER, 0));
       GE (ctx, glFramebufferRenderbuffer (GL_FRAMEBUFFER,
@@ -1079,7 +1075,7 @@ _cogl_offscreen_allocate (CoglOffscreen *offscreen,
                          offscreen->texture_level_width,
                          offscreen->texture_level_height,
                          &fb->config,
-                         flags = COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH_STENCIL,
+                         flags = COGL_OFFSCREEN_ALLOCATE_FLAG_DEPTH24_STENCIL8,
                          gl_framebuffer)) ||
 
       ((ctx->private_feature_flags &
-- 
1.7.7.5



More information about the Cogl mailing list