PDA

View Full Version : glCopyTexImage2D and transparent clear color.



devdept
09-21-2008, 02:45 PM
Hi All,


Is it possible that using the following pixel format on a generic software OpenGL implementation, if I read the framebuffer using glCopyTexImage2D() I don't read alpha bits?

I clear the color buffer using:

glClearColor(0, 0, 0, 0);

I read the framebuffer using:

glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, textureSize, textureSize, 0);

Here is the choosen pixel format:


+----+-----+----------+--------+------+------------------+----+----+----+---------------+
| ID | Type| Flags | Buffer | pType| Color |Dept|Alph|Sten| Accum |
+----+-----+----------+--------+------+------------------+----+----+----+---------------+
| 7 | GEN | 00000465 | DOUBLE | RGBA | 32 ( 8- 8- 8- 8) | 32 | 8 | 64 | (16-16-16-16) |

Thanks,

Alberto

devdept
09-22-2008, 05:28 AM
I have also checked just before the glCopyTexImage2D call the availabilty of alpha bits using:

gl.GetIntegerfv(GL_ALPHA_BITS)

and returns 8.

I think we should be able to get transparency here, don't you?


Thanks,

Alberto

V-man
09-22-2008, 08:18 AM
"generic software OpenGL implementation"

Did you create your original texture with GL_RGBA8 internal format?
Or perhaps it only accepts a number like 4.

If that doesn't work, use mesa3d.org as your generic software rasterizer.

devdept
09-22-2008, 08:39 AM
glBindTexture(GL_TEXTURE_2D, sharpTextureName);
glTexImage2D(GL_TEXTURE_2D, 0, gl.RGBA8, textureSize, textureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, null);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, textureSize, textureSize, 0);

I don't understand why if the pixel format supports 32 8-8-8-8 I should try GL_RGBA4, by the way I'll try.


Thanks,

Alberto

devdept
09-22-2008, 08:46 AM
Nothing to do: I am working on windows and don't like the idea to add a different OpenGL implementation.

Considering that if I use a green background (instead of a transparent one) I get a perfect texture, is there a way to swap the Green component with the Alpha one in a texture?

One more thought: is it possible that the original texture color is black and reading a 0,0,0,0 color don't affect the texture color?!?

Thanks,

Alberto

V-man
09-22-2008, 09:10 AM
No, what I means is, instead of GL_RGBA8, use 4. 1, 2, 3, 4 are the GL 1.0 texture internal formats and perhaps that's what the MS implementation wants. It is pretty old since MS wrote it in 1995.

glTexImage2D(GL_TEXTURE_2D, 0, 4, textureSize, textureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, null);

if that doesn't work, I can't help you further.

devdept
09-22-2008, 01:35 PM
No, nothing. I can't believe it, from 1995 nobody spot this bug: glCopyTexImage2D can't read alpha bits on Windows.

Any workaround?


Thanks,

Alberto

ZbuffeR
09-22-2008, 02:10 PM
Microsoft never updated their implementation. Mesa did.
Nothing to add.

devdept
09-22-2008, 02:17 PM
Thanks ZbuffeR,

Now I know it is not possible, so I can stop trying.

Thanks again,

Alberto