Недавно я столкнулся с проблемой, когда моя программа OpenGL неправильно отображала текстуры на 2-летнем ноутбуке Lenovo с картой 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);
Я получаю много псевдонимов, но, по крайней мере, программа видна и работает нормально.
Наконец, два вопроса:
- Какой лучший или стандартный способ проверить, доступно ли mip-mapping на компьютере, кроме проверки версий OpenGL?
- Если mip-mapping недоступен, как лучше обойтись без псевдонимов?
Edit:
Вот вопрос, который мне действительно нужен:
Как программно проверить, доступно ли mip-mapping на платформе?