[SDL] Transparency problems with certain textures

Scott Percival moralrecordings at gmail.com
Thu Mar 7 14:31:17 PST 2013


I would have a go at running it through apitrace -
http://apitrace.github.com . This way you get a full dump of just the
OpenGL calls made by the application, and you can do things like
replay it back, or check the internal GL state at any point of
execution (to ensure that some unrelated function doesn't clobber the
GL state you just painstakingly set up). Almost any obscure OpenGL
problem can be solved by staring at the apitrace dump for long enough.

On 8 March 2013 06:10, Mason Wheeler <masonwheeler at yahoo.com> wrote:
> I've got a window with an OpenGL renderer, and a routine that goes like
> this:
>
> Use SDL_Image to load an image to a surface.
> Create a texture from the surface.
> Render the texture to the window.
> Render a rectangle of color with a partially transparent alpha value over
> the top of the texture.
>
> When the image I'm loading is an 8-bit image, this works fine.  But when
> it's a 32-bit image, the alpha doesn't work; instead of a translucent
> rectangle drawn over the image, I get a solid rectangle.
>
> I talked with Sam about this off-list, and he said that this looks really
> straightforward and there's no good reason why it should be behaving this
> way, and to ask you guys on here.  So, does anyone have any reason why it
> should work this way?  Here's the routine to draw the overlay; it gets
> called after the image is rendered, which is a simple call to
> SDL_RenderCopy.
>
> procedure DrawShadedImage(const size: TPoint);
> var
>    dst: TRect;
> begin
>    glEnable(GL_ALPHA_TEST);
>    glEnable(GL_BLEND);
>    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
>
>    SDL_SetRenderDrawColor(imgDisplay.Renderer, 255, 64, 64, 130);
> //translucent light red
>    dst := rect(0, 0, size.x, size.y);
>    SDL_RenderFillRect(imgDisplay.Renderer, @dst);
>
>    SDL_SetRenderDrawColor(imgDisplay.renderer, 255, 255, 255, 255)
> end;
>
> Sam and I suspect that the problem is in the image loading or converting
> code somewhere, that when given a 32-bit image it ends up creating a texture
> that doesn't like alpha blending somehow, but neither of us knows the
> graphics code well enough to be sure.
>
> Any ideas?
>
> Mason
>
>
> _______________________________________________
> SDL mailing list
> SDL at lists.libsdl.org
> http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
>



More information about the SDL mailing list