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_R8
和 format
=GL_RED
。或者您可以对两者都使用 GL_LUMINANCE
。
我有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_R8
和 format
=GL_RED
。或者您可以对两者都使用 GL_LUMINANCE
。