[SDL] Re: SDL Surfaces and OpenGL
Richard Schreyer
rws_list at girr.org
Sat Jul 16 16:55:46 PDT 2005
If you can set up an SDL_Surface to use 24 bit pixels (ie, no alpha
data), you can change the glTexImage2D Image format argument from
GL_RGBA to GL_RGB.
Richard Schreyer
On Jul 15, 2005, at 2:12 AM, Chris E. wrote:
> Stephen Sweeney wrote:
>
>> Hi Kids :)
>>
>> Hope you're all having a lush summer! :)
>>
>> Right... um... I'm making SDL Surfaces and turning them in to OpenGL
>> textures... but all my SDL Surfaces has alpha set on them. So when
>> I'm
>> drawing on my created surfaces they are always see through... I
>> wish them to
>> be solid. My code for creating the surface is the usual example
>> stuff (see
>> all code below).
>>
>> Any help..?
>>
>> Steve
>>
>> SDL_Surface *Graphics::createSurface(int width, int height)
>> {
>> SDL_Surface *surface;
>> Uint32 rmask, gmask, bmask, amask;
>>
>> /* SDL interprets each pixel as a 32-bit number, so our masks
>> must depend
>> on the endianness (byte order) of the machine */
>> #if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
>> rmask = 0xff000000;
>> gmask = 0x00ff0000;
>> bmask = 0x0000ff00;
>> amask = 0x000000ff;
>> #else
>> rmask = 0x000000ff;
>> gmask = 0x0000ff00;
>> bmask = 0x00ff0000;
>> amask = 0xff000000;
>> #endif
>>
>> surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height,
>> 32, rmask,
>> gmask, bmask, amask);
>>
>
> Because you are passing a mask for alpha, SDL is thinking that you
> want to use it.
> To get rid of the alpha, pass 0 to SDL_CreateRGBSurface in place of
> amask.
> You can also get rid of the declaration of amask, and the lines
> that assign it a value.
>
> I'm not sure how OpenGL would handle that - it might still
> interpret the "missing" bits
> as alpha, and use transparency. A safer solution, given that
> possibility, since OpenGL
> might well require the alpha channel to be there, would be to make
> sure that you set
> the alpha value to opaque (255 I think) for every pixel (not just
> the surface alpha
> value), as the transparency might just be because of the bits
> defaulting to 0, which is
> completely transparent.
>
> Chris E.
> _______________________________________________
> SDL mailing list
> SDL at libsdl.org
> http://www.libsdl.org/mailman/listinfo/sdl
>
More information about the SDL
mailing list