我一直在使用SFML创建上下文和OpenGL 3.0编写3D应用程序。但是,当我尝试使用OpenGL 3.0创建上下文时,它似乎会将图像略微压缩并翻倍,中间有黑色条纹,并且屏幕看起来被绿色清除而不是红色。如果我将上下文改为2.1,它就可以正常绘制。最初我遇到了这个问题是使用现代OpenGL代码,但我提供了一个使用固定功能管线的示例,以使问题更明显。
#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>
int main()
{
// create the window
sf::ContextSettings settings;
settings.depthBits = 24;
settings.stencilBits = 8;
settings.antialiasingLevel = 4;
settings.majorVersion = 3;
settings.minorVersion = 0;
sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, settings);
// load resources, initialize the OpenGL states, ...
glClearColor(1.0, 0.0, 0.0, 1.0);
// run the main loop
bool running = true;
while (running)
{
// handle events
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
// end the program
running = false;
}
}
// clear the buffers
glClear(GL_COLOR_BUFFER_BIT);
// draw...
glBegin(GL_TRIANGLES);
glVertex3f( 0.0, 1.0, 0.0);
glVertex3f(-1.0,-1.0, 0.0);
glVertex3f( 1.0,-1.0, 0.0);
glEnd();
// end the current frame (internally swaps the front and back buffers)
window.display();
}
return 0;
}
如果我改变这两行代码:
settings.majorVersion = 3;
settings.minorVersion = 0;
对于这些:
settings.majorVersion = 2;
settings.minorVersion = 1;
窗口正常绘制。
以下是正在发生的情况的屏幕截图。
![OpenGL 2.1 截图](https://i.imgur.com/MR6Tjik.png)
![OpenGL 3.0 截图](https://i.imgur.com/NYtLQr9.png)
我的设置是: Ubuntu 12.10 Intel i7-3630QM Intel HD Graphics 4000
从glxinfo中获取: OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile OpenGL version string: 3.0 Mesa 9.0.2 OpenGL shading language version string: 1.30
从lspci中获取: Kernel driver in use: i915
我认为这可能是驱动程序问题,但我已经成功运行了使用GLUT和没有过时功能的OpenGL 3.0程序,所以它必须已经创建了有效的OpenGL 3.0上下文并且正常工作。
我非常困惑为什么会出现这种情况。