ios - 在没有完整 mip 链的情况下启用 mipmapping

标签 ios opengl-es mipmaps

以下是我的创建纹理函数:

- (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

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

最佳答案

查看屏幕截图中的纹理描述符编号 391341552。在一个进程中不太可能有这么多纹理。 问题似乎不在于设置,而在于绘制前的纹理绑定(bind)。

通常,在您成功设置纹理和顶点数组后,您可以按如下方式绘制它们:

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

也许你在 glBindTexture 中传递了一些指针?

关于ios - 在没有完整 mip 链的情况下启用 mipmapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800099/

相关文章:

ios - 从 OpenGL 绘图创建 png UIImage

iphone - 信息属性列表所需的设备能力

ios - MKOverlay 更新闪烁

ios - 将一系列对象从一个数组添加到另一个数组

opengl-es - 优化基于 OpenGL 的动画/可缩放 2D UI 渲染的策略

android - 使用 mipmap 会产生垃圾纹理

ios - UITableView 中的 UIPanGestureRecognizer 在 iOS8 上不起作用

ios - 我可以使用 View 变换/OpenGL 将平面图像转换为与 Oculus Rift 兼容的双图像吗?

android - 在没有 SurfaceView 的 Android 上获取 GPU 信息