我一直在使用SFML創建上下文和OpenGL 3.0的3D應用程序。出於某種原因,當我嘗試使用OpenGL 3.0創建上下文時,它似乎將圖像縮小了一些,並且兩個圖像之間有一個黑色條,並且由於某種原因,屏幕似乎被清除爲綠色而不是紅色。如果我將上下文更改爲2.1,它通常會繪製。最初我使用現代OpenGL代碼時遇到了這個問題,但我提供了一個使用固定功能管道的示例,以便使問題更清楚。爲什麼使用Opengl 3.0上下文的SFML繪製兩次?
#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渲染字符串:梅薩DRI英特爾(R)IvyBridge的移動 OpenGL的版本字符串:3.0梅薩9.0.2 OpenGL着色語言版本字符串:1.30
從lspci的: 內核驅動程序使用:I915
我認爲這可能是一個驅動程序問題,但我已經成功運行使用GLUT的OpenGL 3.0程序,並且沒有棄用的功能,所以它一定是在創建一個有效的OpenGL 3.0上下文並工作。
我很困惑,爲什麼會發生這種情況。
嘗試在繪圖函數上面粘貼一個window.setActive()。 –
什麼都不做 – matjoeman
它是否與英特爾的Windows驅動程序一起使用? – genpfault