[cogl/wip/cogl-1.14: 172/177] framebuffer: Support the GL_RED texture workaround when querying bits
- From: Robert Bragg <rbragg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl/wip/cogl-1.14: 172/177] framebuffer: Support the GL_RED texture workaround when querying bits
- Date: Mon, 21 Jan 2013 15:59:23 +0000 (UTC)
commit a08d10ee773da4db20e24b152f2edb93e475abdb
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>
(cherry picked from commit 425cfb2675912a2cbcaaaeed7c2196d563948222)
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 4cecf67..b6f58ba 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]