C++ 文本呈现错误,每个字符都是白色矩形

C++ 文本呈现错误,每个字符都是白色矩形,c++,opengl,glsl,sfml,text-rendering,C++,Opengl,Glsl,Sfml,Text Rendering,我想在OpenGL应用程序中显示一些文本,并且已经在使用SFML创建窗口和上下文。我不想添加另一个库,尝试使用SFML(2.0)提供的文本呈现 呈现的文本由白色矩形组成(矩形与它们应该大致显示的字符高度相匹配) 在我添加了一些方法以保持OpenGL状态与使用SFML文本之前相同之后,其他所有内容都正确呈现。如果没有这些方法,将不会渲染任何内容,但会使用正确的颜色缓冲区清除颜色 我使用GLSL进行纹理和照明(如果需要,可以提供源代码和屏幕截图) 我使用的代码是: glClear( GL_COLOR

我想在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();
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glLoadIdentity();
//用于环视和移动相机的旋转
glRotatef(摄像机旋转[0],1.0f,0.0f,0.0f);
glRotatef(摄像机旋转[1],0.0f,1.0f,0.0f);
glRotatef(摄像机旋转[2],0.0f,0.0f,1.0f);
GLTRANSTALEF(-5.0f+摄像机.平移[0],
camera.translation[1],-7.5f+camera.translation[2];
//设置OpenGL灯光属性
护照位置(GL_LIGHT0,聚光灯);
通过聚光灯方向(GL_LIGHT0,聚光灯);
通行证位置(GL_灯1,绿灯);
护照位置(GL_灯2,红灯);
通行证位置(GL_LIGHT3,蓝光);
glUseProgram(shaderProg.getId());
renderMap();
glUseProgram(0);
window.pushGLStates()//应该防止OpenGL和SFML冲突
window.draw(testText);
window.popGLStates();
err=glGetError()//不报告任何错误
如果(错误!=总帐无错误)
{

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

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


“我正在使用3.3兼容配置文件上下文,3.3 GLSL”你也在使用ARB_shader_对象,这是你永远不应该做的。不能保证你可以用它获得GLSL 3.30。你应该使用核心着色器功能,而不是扩展。我不知道这是否是你的问题,但这从来都不是一个好主意。我已经替换了ARB函数,但问题仍然存在。字体是否包含字符您试图渲染的角色?字体加载成功吗?两个问题都是(至少没有显示错误)。
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);