2015-09-26 41 views
0

以下是我的create texture功能:纹理映射没有一个完整的MIP链启用

- (GLuint)setupTexture:(NSString *)fileName { 

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

    // 2 
    size_t kWidth = CGImageGetWidth(spriteImage); 
    size_t kHeight = CGImageGetHeight(spriteImage); 

    // 3 
    GLubyte * spriteData = (GLubyte *) calloc(kWidth*kHeight*4, sizeof(GLubyte)); 

    // 4 
    GLuint texName; 
    glGenTextures(1, &texName); 
    glBindTexture(GL_TEXTURE_2D, texName); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA, (int)kWidth, (int)kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData); 
    glGenerateMipmap(GL_TEXTURE_2D); 

    //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL_APPLE, 0); 
    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); 

    glBindTexture(GL_TEXTURE_2D, 0); 

    return texName; 
} 

我使用的XCode GPU捕获,并找到这样的错误:

enter image description here

我m新的OpenGL,我该如何解决这个问题?非常感谢!

回答

2

查看屏幕截图中的纹理描述符编号391341552.在单个进程中很少有这么多纹理。 看起来问题并不在于设置,而是在绘制之前进行纹理绑定。

通常情况下,你成功地建立了您的材质贴图和顶点数组后,在绘制如下:

glUseProgram(programDescriptor); 
glBindVertexArray(vertexArrayDescriptor); 
glUniform(...); 
glBindTexture(GL_TEXTURE_2D, textureDescriptor); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, verticesQuantity); 

也许你在glBindTexture通过一些指针?