ios opengles sample texture error (use stb_image)而android ok

ios opengles sample texture error (use stb_image)while android is ok

我用stb_image加载贴图,比如

stbi_set_flip_vertically_on_load(true);
GLuint textureID;
glGenTextures(1, &textureID);
int width, height, nrComponents;
unsigned char *data = stbi_load(path, &width, &height, &nrComponents, 0);

GLenum format;
if (nrComponents == 1) {
    format = GL_RED;
} else if (nrComponents == 3) {
    format = GL_RGB;
} else {
    format = GL_RGBA;
}

glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

相同的代码在android中没问题,而在ios中渲染结果出现问题:

如果设置 stbi_set_flip_vertically_on_load(假):

可能是深度误差,深度剔除

问题是 GLKView 没有设置深度缓冲区,只需添加一行代码:view.drawableDepthFormat = GLKViewDrawableDepthFormat24;