Chargement de la PNG avec stb_image pour OpenGL texture donne mal les couleurs

Je suis en utilisant stb_image de chargement d'un PNG 32 bits fichier (RGBA) et je suis entrain de créer une texture OpenGL.

Il fonctionne très bien, pour les 24-bit fichiers PNG (sans canal alpha), mais lorsque j'utilise un 32-bit fichier PNG, quelque chose va mal.

C'est ce que la texture doit ressembler à:

Chargement de la PNG avec stb_image pour OpenGL texture donne mal les couleurs

Et c'est à quoi il ressemble une fois rendu avec OpenGL (les parties noires sont destinés à être transparent, et quand je activer le mélange):

Chargement de la PNG avec stb_image pour OpenGL texture donne mal les couleurs

C'est comment j'ai charger la texture:

int w;
int h;
int comp;
unsigned char* image = stbi_load(filename.c_str(), &w, &h, &comp, STBI_rgb);

if(image == nullptr)
    throw(std::string("Failed to load texture"));

glGenTextures(1, &m_texture);

glBindTexture(GL_TEXTURE_2D, m_texture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

if(comp == 3)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
else if(comp == 4)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);

glBindTexture(GL_TEXTURE_2D, 0);

stbi_image_free(image);

Et ce sont les paramètres de fenêtre (à l'aide de SDL)

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);

Ce qui se passe?

OriginalL'auteur developerbmw | 2014-04-18