Я хотел отобразить текст в своем приложении OpenGL и уже использовал SFML для окна & создание контекста. Я не хотел добавлять другую библиотеку и пытался использовать рендеринг текста, предоставляемый SFML (2.0).
Текст, который отображается, состоит из белых прямоугольников (прямоугольники соответствуют высоте символа, который они должны приблизительно отображать).
Все остальное отображается правильно после того, как я добавил несколько методов, чтобы сохранить состояния OpenGL такими же, какими они были до использования текста SFML. Без этих методов ничего не визуализируется, но используется правильный цвет очистки буфера цвета.
Я использую GLSL для текстурирования и освещения (могу предоставить источник&скриншоты при необходимости).
Код, который я использую:
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
//rotations for looking around & moving the camera
glRotatef(camera.rotation[0], 1.0f, 0.0f, 0.0f);
glRotatef(camera.rotation[1], 0.0f, 1.0f, 0.0f);
glRotatef(camera.rotation[2], 0.0f, 0.0f, 1.0f);
glTranslatef( -5.0f+camera.translation[0],
camera.translation[1], -7.5f+camera.translation[2]);
//set OpenGL light attributes
passPosition(GL_LIGHT0, spotLight);
passSpotDirection(GL_LIGHT0, spotLight);
passPosition(GL_LIGHT1, greenLight);
passPosition(GL_LIGHT2, redLight);
passPosition(GL_LIGHT3, blueLight);
glUseProgram( shaderProg.getId() );
renderMap();
glUseProgram(0);
window.pushGLStates();//supposed to prevent OpenGL & SFML conflicts
window.draw(testText);
window.popGLStates();
err = glGetError();//doesn't report any errors
if(err != GL_NO_ERROR)
{
std::cout << "ERROR: " << err << std::endl;
}
window.display();
Текстовый экземпляр создается так:
sf::Font fontVera;
std::cout << fontVera.loadFromFile("./res/Vera.ttf") << std::endl;
//the font is existing, output for debugging purposes(and shows no error)
sf::Text testText("hasdfas", fontVera, 32);
testText.setPosition(10,10);
Я использую 3,3 контекста профиля совместимости, 3,3 GLSL и 2,0 SFML (скомпилировано из исходного кода).
Я переключил мой рендеринг шрифтов на ftgl, так как я не нашел способа исправить ошибку рендеринга из SFML.
Я сомневаюсь, что я вернусь назад, потому что конфликты состояния SFML-OpenGL, кажется, довольно широко распространены:
StackOverflow: SFML OpenGL чертежный текст
SFML-Forums: сумасшедшая ошибка с использованием освещения OpenGL и RenderWindow
Других решений пока нет …