Android12 opengles3.0 glTexImage2D 0x502错误

Android12 opengles3.0 glTexImage2D 0x502 error

我有5张贴图,比如diffuse specular normal roughness ao,roughness和ao都是8bit jpg。 我在调用 glTexImage2D 后加载 rouggness/ao 纹理时得到 glError 0x502,但其他三个纹理没问题。 而这个问题刚好发生在 android 12,android 11/10/9/8 是没有错误的。我该如何解决这个问题?

代码:

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);

根据 https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml,GL_RED 不是 internalFormat 可接受的值(glTexImage2D 中的参数 3)。

我认为你需要 internalFormat=GL_R8format=GL_RED。或者您可以对两者都使用 GL_LUMINANCE