[Cogl] [PATCH 5/6] framebuffer: Support the GL_RED texture workaround when querying bits
Neil Roberts
neil at linux.intel.com
Fri Dec 14 03:43:31 PST 2012
When a component-alpha texture is made using a GL3 context a GL_RED
texture is actually used and a swizzle is set up to hide it. However
if a framebuffer is then bound to that texture then when the bits are
queried this workaround will leak out of the API. To fix this it now
detects the situation and reports the number of red bits as the number
of alpha bits.
---
cogl/driver/gl/cogl-framebuffer-gl.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/cogl/driver/gl/cogl-framebuffer-gl.c b/cogl/driver/gl/cogl-framebuffer-gl.c
index 7e4aaca..41c6b1a 100644
--- a/cogl/driver/gl/cogl-framebuffer-gl.c
+++ b/cogl/driver/gl/cogl-framebuffer-gl.c
@@ -947,6 +947,16 @@ _cogl_framebuffer_init_bits (CoglFramebuffer *framebuffer)
GE( ctx, glGetIntegerv (GL_STENCIL_BITS, &framebuffer->bits.stencil) );
}
+ /* If we don't have alpha textures then the alpha bits are actually
+ * stored in the red component */
+ if ((ctx->private_feature_flags &
+ COGL_PRIVATE_FEATURE_ALPHA_TEXTURES) == 0 &&
+ framebuffer->type == COGL_FRAMEBUFFER_TYPE_OFFSCREEN &&
+ framebuffer->format == COGL_PIXEL_FORMAT_A_8)
+ {
+ framebuffer->bits.alpha = framebuffer->bits.red;
+ framebuffer->bits.red = 0;
+ }
COGL_NOTE (OFFSCREEN,
"RGBA/D/S Bits for framebuffer[%p, %s]: %d, %d, %d, %d, %d, %d",
--
1.7.11.3.g3c3efa5
More information about the Cogl
mailing list