[SDL] Transparency problems with certain textures

Mason Wheeler masonwheeler at yahoo.com
Thu Mar 7 14:10:24 PST 2013


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.libsdl.org/pipermail/sdl-libsdl.org/attachments/20130307/807c733c/attachment-0008.htm>


More information about the SDL mailing list