2012-03-10 190 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);