Проблема буфера глубины OpenGL
-
25-09-2019 - |
Вопрос
Для моих последних нескольких проектов я использовал некоторые из утилитных файлов, которые я обнаружил, что смотрел на несколько демонстраций здесь.
А именно файл под названием opengl.h - в основном используется для управления шейдерами, как GLEW и другой файл GL_FONT.
GL_FONT - это класс, который они используют для визуализации шрифтов на экране с помощью объектов буфера вершины.
Однако, когда я использую это, чтобы сделать Framerate в моей игре, он делает все, кроме SkyBox правильно. По какой-то причине SkyBox оказывается белым, как видно здесь, если я не визую шрифт, похоже, это.
Вот некоторые части класса GL_FONT, которые я считаю наиболее важными:
void GLFont::begin()
{
HWND hWnd = GetForegroundWindow();
RECT rcClient;
GetClientRect(hWnd, &rcClient);
int w = rcClient.right - rcClient.left;
int h = rcClient.bottom - rcClient.top;
glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_fontTexture);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0f, w, h, 0.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
drawTextBegin();
}
У меня есть три метки glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);
к glpushattrib (gl_current_bit | gl_lighting_bit | gl_texture_bit); И фоновая текстура возвращается, но шрифт не отображается.
void GLFont::end()
{
drawTextEnd();
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib();
}
Этот является изображением буфера глубины, когда шрифт отображается и это это то, что выглядит, когда это не так.
Может ли кто-нибудь пролить свет на эту проблему, пожалуйста?
Любая помощь приветствуется!
Спасибо.
Решение
Выглядит как begin()
Не хватает А. glPushMatrix()
после glMatrixMode(GL_MODELVIEW)
. Отказ Это может привести к тому, что сцена отображается неправильно, когда также отображается какой-то текст.
Не glGetError()
отчет A. GL_STACK_UNDERFLOW
ошибка?