我正在尝试使用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参数,但纹理始终被破坏。有任何线索吗?
答案 0 :(得分:0)
问题出在另一个地方。在将PNG文件实际提取到内存中并采取相应措施之前,有一段旧代码检查扩展名 GL_ARB_texture_non_power_of_two 。在Windows上,尽管它已移至核心答案这一事实是- TRUE ,所以行为符合预期。在Mac上,由于它开始变得笨拙,答案是- FALSE ,所以行为是错误的。