文本被渲染错误,每个字符都是一个白色矩形

时间:2012-09-28 16:59:59

标签: c++ opengl glsl sfml text-rendering

我想在我的OpenGL应用程序中显示一些文本,并且已经使用SFML for window&上下文创建。我不想添加另一个库并尝试使用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(从源代码编译)。

1 个答案:

答案 0 :(得分:0)

我已将字体渲染切换为ftgl,因为我没有找到任何方法来修复SFML中的渲染错误。

我怀疑我会切换回来,因为SFML-OpenGL状态冲突似乎相当普遍:

StackOverflow: SFML OpenGL Drawing Text

SFML-Forums: Crazy bug using OpenGL lighting and RenderWindow

SFML-Forums: glCullFace makes SFML blind