最近我遇到了一个问题,即我的 OpenGL 程序无法在一台使用了 2 年、配备 nVidia Quadro 140 卡的联想笔记本电脑上正确渲染纹理。它运行 OpenGL 2.1.2 和 GLSL 1.20,但是当我打开 mip-mapping 时,整个屏幕都是黑色的,没有任何警告或错误。
这是我的纹理过滤器代码:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
经过 40 分钟的摆弄,我发现 mip-mapping 是问题所在。关闭它修复它:
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
我得到了很多别名,但至少程序是可见的并且运行良好。
最后,两个问题:
- 除了检查 OpenGL 版本之外,检查机器上是否可以使用 mip-mapping 的最佳或标准方法是什么?
- 如果 mip-mapping 不可用,避免混叠的最佳解决方法是什么?
编辑:
这是我真正想要的问题:
您如何以编程方式检查平台上是否可用 mip-mapping?