You're creating an RGB texture, so the texture doesn't even have an alpha channel. Check the third parameter to glTexImage; you're telling OpenGL that you only want three color components, the R, the G and the B channels, and to throw away the alpha channel. Pass GL_RGBA instead to make it an RGBA texture.
But on another note; don't create the texture all the time you draw like that. Create it once when you start the program, and then just save the texture ID and bind it every frame instead.
Oh my god...you, my good, sir, are brilliant! It works!!
It's so beautiful!
You have also saved me *another* great deal of trouble and time, because I knew the way I was adding graphics was lagging immensely, but didn't know why.
I cannot thank you enough Brother Bob!
I guess I should have read the parameters more carefully when implementing the functions.
found this through google since I had the same problem. Here's the stand-alone solution for those who are still looking for it.
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
GLuint SDLOAT::Graphics::surfaceToTexture(SDL_Surface* surface)
{
GLuint texture; // This is a handle to our texture object
GLenum texture_format;
GLint nOfColors;
if (surface)
{
// Check that the image's width is a power of 2
if ( (surface->w & (surface->w - 1)) != 0 )
{
printf("warning: image width is not a power of 2\n");
}
// Also check if the height is a power of 2
if ( (surface->h & (surface->h - 1)) != 0 )
{
printf("warning: image height is not a power of 2\n");
}
// get the number of channels in the SDL surface
nOfColors = surface->format->BytesPerPixel;
if (nOfColors == 4) // contains an alpha channel
{
printf("Alpha: yes");
if (surface->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else
texture_format = GL_BGRA;
}
else if (nOfColors == 3) // no alpha channel
{
printf("Alpha: no");
if (surface->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else
texture_format = GL_BGR;
}
else
{
printf("warning: the image is not truecolor.. this will probably break\n");
// this error should not go unhandled
}