2012-03-10 244 views
1

我已經從freeglut切換到用於OpenGL 3.3上下文/窗口創建的SFML。現在,當我使用freeglut與OpenGL:渲染緩衝區,深度緩衝區

unsigned int displayMode = GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH | GLUT_STENCIL; 
glutInitDisplayMode (displayMode); 

初始化顯示模式,我可以簡單地然後鍵入

glEnable(GL_DEPTH_TEST); 
glDepthMask(GL_TRUE); 
glDepthFunc(GL_LEQUAL); 
glDepthRange(0.0f, 1.0f); 

,然後深度測試將被啓用。但是,在SFML中,它稍微複雜一些。我不會進入SFML代碼,但基本上SFML會爲您創建一個上下文/窗口。您可以指定深度位和模板位的數量,但似乎SFML實際上並未分配深度緩衝區並將其附加到默認幀緩衝區。

那麼我該怎麼做呢?我猜你必須做一些事情,如glGenRenderbuffers,然後glBindRenderbuffer然後glRenderbufferStorage然後glFramebufferRenderbuffer。該文件有點令人困惑。 glRenderbufferStorage需要internalformat參數,我不確定如何表明我想要24位深度緩衝區。另外,我並不確定如何訪問默認幀緩衝區(或者是否有兩個默認幀緩衝區,因爲有雙緩衝區?)。

回答

2

當您創建窗口時,您可以指定允許您定義深度/模板緩衝區格式的上下文設置。類似這樣的:

sf::Window window(sf::VideoMode(1024, 768, 32), "SFML Window", sf::Style::Default, sf::ContextSettings(24, 8, 0, 3, 3)); 

以上將指定具有8位模板的24位深度緩衝區。我假設你在這裏使用SFML 2.0。不知道它是否仍處於測試階段,或者是最終版本。

0

在SFML深度可以啓用ContextSettings

//Configuring SFML window 
sf::ContextSettings window_settings; 
window_settings.depthBits   = 24; // Request a 24-bit depth buffer 
window_settings.stencilBits  = 8; // Request a 8 bits stencil buffer 
window_settings.antialiasingLevel = 2; // Request 2 levels of antialiasing 

// Opening SFML window 
sf::Window window(sf::VideoMode(800, 600), "Title", sf::Style::Resize | sf::Style::Close, window_settings); 
glewExperimental = GL_TRUE; 

// Initializing glew and openGL 
glewInit(); 
glViewport(0, 0, 800, 600); 

// Enabling Depth 
glEnable(GL_DEPTH_TEST);