【问题标题】:Android12 opengles3.0 glTexImage2D 0x502 errorAndroid12 opengles3.0 glTexImage2D 0x502 错误
【发布时间】:2021-12-09 07:05:42
【问题描述】:

我有5个纹理,比如漫反射镜面法线粗糙度ao,粗糙度和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);

【问题讨论】:

    标签: android opengl-es android-12


    【解决方案1】:

    根据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。

    【讨论】:

    • 是的,使用 internalFormat=GL_R8 就可以了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多