2015-10-01 2 views
0

создать 8 текстур через:OpenGL ES текстур все черные

GLuint textures[8]; 
glGenTextures(8, textures); 
for (int i=0; i<num; i++) { 
    NSString *fileName = [NSString stringWithFormat:@"image0%d", i + 1]; 

    CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage; 
    if (!spriteImage) { 
     NSLog(@"Failed to load image %@", fileName); 
     exit(1); 
    } 

    size_t kwidth = CGImageGetWidth(spriteImage); 
    size_t kheight = CGImageGetHeight(spriteImage); 

    GLubyte * spriteData = (GLubyte *) calloc(kwidth*kheight*4, sizeof(GLubyte)); 

    glBindTexture(GL_TEXTURE_2D, textures[i]); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kwidth, kheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

    glGenerateMipmap(GL_TEXTURE_2D); 
} 

Но получить все черные текстуры:

enter image description here

Как я могу решить это?

ответ

2
GLubyte * spriteData = (GLubyte *) calloc(kwidth*kheight*4, sizeof(GLubyte)); 

Создает массив ГЛУБИАТ, заполненный нулями. Поскольку вы никогда не изменяете spriteData в любом месте, текстуры заполняются нулями, которые являются черными.

+0

Спасибо, я так глуп, что я удалить 'CGContextRef spriteContext = CGBitmapContextCreate (spriteData, kwidth, kheight, 8, kwidth * 4, CGImageGetColorSpace (spriteImage), kCGImageAlphaPremultipliedLast); CGContextDrawImage (spriteContext, CGRectMake (0, 0, kwidth, kheight), spriteImage); CGContextRelease (spriteContext); '. – Allen

Смежные вопросы