我一直致力于使用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;
窗口正常绘制。
以下是正在发生的事情的截图。
第二张图片有点混乱,因为我的电脑滞后了。它不应该有橙色调。
我的设置是:
Ubuntu 12.10 英特尔i7-3630QM 英特尔高清显卡4000
来自glxinfo: OpenGL渲染器字符串:Mesa DRI Intel(R)Ivybridge Mobile OpenGL版本字符串:3.0 Mesa 9.0.2 OpenGL着色语言版本字符串:1.30
来自lspci: 正在使用的内核驱动程序:i915
我认为这可能是一个驱动程序问题,但我已经成功运行使用GLUT的OpenGL 3.0程序,并且没有弃用的功能,因此它必须创建一个有效的OpenGL 3.0上下文并正常工作。
我很困惑为什么会这样。
答案 0 :(得分:0)
SFML使用兼容性上下文,因为在内部它仍然有一些旧式的opengl。您可以使用glBegin和glEnd之类的原因是因为兼容性上下文。我没有你的问题的答案,但一年前有人问过。如果您有解决方案,请发布。