saschaheylik

Member
  • Content count

    1
  • Joined

  • Last visited

Community Reputation

100 Neutral

About saschaheylik

  • Rank
    Newbie
  1. SDL openGL PNG transparency?

    Hi, found this through google since I had the same problem. Here's the stand-alone solution for those who are still looking for it. [code]#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 } //Needed for 2d textures glEnable(GL_TEXTURE_2D); //Needed for transparency glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glGenTextures( 1, &texture ); glBindTexture( GL_TEXTURE_2D, texture ); // Set the texture's stretching properties glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); // Edit the texture object's image data using the information SDL_Surface gives us glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, surface->w, surface->h, 0, texture_format, GL_UNSIGNED_BYTE, surface->pixels ); } else { printf("SDL could not load image: %s\n", SDL_GetError()); } if ( surface ) { SDL_FreeSurface( surface ); } return texture; }[/code]