[Gambas-user] gb3: gb.opengl will not render alpha channel of 2D texture
kevinfishburne at ...1887...
Sun Jul 31 09:42:44 CEST 2011
On 07/30/2011 05:44 PM, Benoît Minisini wrote:
>> Le Samedi 30 Juillet 2011 00:19:41, Kevin Fishburne a écrit :
>>> I've been researching this for hours and nothing I try works. The image
>>> used for the texture has an alpha channel, but it is displayed as black
>>> instead of transparent. I'm starting to think that the line:
>>> isn't passing the presence of an alpha channel to OpenGL, but that's
>>> just a guess. Normally you specify the image format there, but those
>>> parameters aren't supported yet in the gb3 implementation.
>>> The project is attached. You can move the little wizard around with the
>>> ASDW keys and rotate with the QE keys. Any help appreciated...I'm going
>>> crazy and am calling it quits for the night
>> This is what i do in the sdl component to get alpha blending:
>> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
>> So it should be in gambas3 code:
>> Gl.BlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA)
> If, in GltextureMapping.c:238:
> glTexImage2D(GL_TEXTURE_2D, VARGOPT(Level, 0), 3, image->width,
> image->height, VARGOPT(Border, 0), format, GL_UNSIGNED_BYTE,
> I replace the "3" by "4", as it is in line 225, I get the transparency.
> According to the documentation, this number is the number of color components
> in the texture, which should be 4 for RGBA.
> I suggest that this number should be 3 if the image format is RGB or BGR, and
> 4 if the image format is RGBA, RGBX, BGRA, tec.
> Another point. I opened the file GLUtextureImage.c (searching for
> GL.TexImage2D), and I noticed that GLUBUILD1DMIPMAPS use IMAGE_get to read its
> image argument (which does error checking), but not GLUBUILD2DMIPMAPS, which
> should lead to possible segfaults...
Interesting observations Benoît. I did get a segfault using
Glu.Build2DMipmaps(), though I corrected it by moving the call. Was a
strange error among many, which I'm still trying to correct. Mostly I
think it's my faulty logic.
Tomek, who is having some trouble mailing the mailing list lately,
helped me get the alpha channel working correctly. I don't understand
the logic, but enabling the gb.opengl.glu component and adding the line
"Glu.Build2DMipmaps(t1)" to the end of the texture setup code enabled
the alpha channel. The final code looks like this:
‘ Set up texture.
Gl.TexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR)
Gl.TexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR)
Gl.TexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_CLAMP)
Gl.TexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_CLAMP)
No idea why the segfault occurred, but am glad I could work around it.
I attached my revised example project. I hope it can be included with
the others in the OpenGL example compilation you mentioned. I added the
appropriate comments at the beginning of the project, and further
commented important lines throughout so it would be easy to understand.
Enabling the alpha channel on a simple OpenGL 2D "blit" is a common
requirement of many games.
e-mail: sales at ...1887...
phone: (770) 853-6271
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 15525 bytes
Desc: not available
More information about the User