texturas openGL ES de PNGs com transparência estão sendo renderizadas com artefatos estranhos e me deixando louca!

Eu estou começando a trabalhar no meu primeiro aplicativo para iPhone OpenGL, mas eu acertei um problema inicial.

Eu tenho uma textura MUITO SIMPLES que eu quero usar como um sprite em um jogo 2D, mas ele renderiza com pixels coloridos 'aleatoriamente' na parte superior.

http://i40.tinypic.com/2s7c9ro.png <- Screenshot aqui

Eu meio que tenho a sensação de que isso é culpa do Photoshop, então se alguém tiver alguma coisa sobre isso, por favor me avise.

Se não é photoshop então tem que ser o meu código ... Então aqui está o código em questão ...

- (void)loadTexture {

CGImageRef textureImage = [UIImage imageNamed:@"zombie0.png"].CGImage;

if (textureImage == nil) {
    NSLog(@"Failed to load texture image");
    return;
}

NSInteger texWidth = CGImageGetWidth(textureImage);
NSInteger texHeight = CGImageGetHeight(textureImage);

GLubyte *textureData = (GLubyte *)malloc(texWidth * texHeight * 4);

CGContextRef textureContext = CGBitmapContextCreate(textureData, texWidth, texHeight, 8, texWidth * 4, CGImageGetColorSpace(textureImage), kCGImageAlphaPremultipliedLast);

CGContextDrawImage(textureContext, CGRectMake(0.0, 0.0, (float)texWidth, (float)texHeight), textureImage);

CGContextRelease(textureContext);

glGenTextures(1, &textures[0]);

glBindTexture(GL_TEXTURE_2D, textures[0]);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

free(textureData);

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

glEnable(GL_TEXTURE_2D);

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

}

Essa função de mesclagem gerou os melhores resultados.

Por favor, deixe-me saber o que você acha que está errado.

Muito obrigado, esse problema tem me deixado maluco.

questionAnswers(3)

yourAnswerToTheQuestion