【发布时间】:2023-03-29 02:15:02
【问题描述】:
我正在尝试使用 OpenGL 4.1 着色器语言绘制纹理。
它在 Windows 上工作得非常好,所以我很肯定着色器或坐标没有问题。
但是,在 Mac 上,纹理已损坏,如图片所示:
如果你注意到 - 有两个小纹理看起来不错。它们的独特之处在于一个是 16 像素,第二个是 32 像素宽(2 的幂)。因此,它必须是配置或像素存储中的某些东西。不可能不支持不是 2 的幂的纹理,因为它们位于旧版 openGL 上下文(不是 GLSL)上。这是我的纹理生成示例:
unsigned char* pixels = convertedImage->m_pixelbufs.at(0);
GLuint imageDepth = convertedImage->GetBitsPerPixel() == 24 ? GL_RGB : GL_RGBA;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, convertedImage->GetWidth(), convertedImage->GetHeight(), 0, imageDepth, GL_UNSIGNED_BYTE, pixels);
glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, 0);
我尝试使用其他 glPixelStorei 参数,但纹理总是损坏。有什么线索吗?
【问题讨论】: