[cogl] framebuffer: Support the GL_RED texture workaround when querying bits
- From: Neil Roberts <nroberts src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl] framebuffer: Support the GL_RED texture workaround when querying bits
- Date: Wed, 16 Jan 2013 16:44:45 +0000 (UTC)
commit 425cfb2675912a2cbcaaaeed7c2196d563948222
Author: Neil Roberts <neil linux intel com>
Date: Thu Dec 13 15:55:05 2012 +0000
framebuffer: Support the GL_RED texture workaround when querying bits
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.
Reviewed-by: Robert Bragg <robert linux intel com>
cogl/driver/gl/cogl-framebuffer-gl.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
---
diff --git a/cogl/driver/gl/cogl-framebuffer-gl.c b/cogl/driver/gl/cogl-framebuffer-gl.c
index 2be8b96..d8a015d 100644
--- a/cogl/driver/gl/cogl-framebuffer-gl.c
+++ b/cogl/driver/gl/cogl-framebuffer-gl.c
@@ -948,6 +948,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",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]