2012-03-10 5 views
1

저는 OpenGL 3.3 컨텍스트/윈도우 생성을 위해 freeglut에서 SFML로 전환했습니다. 내가 freeglut를 사용하고OpenGL : Renderbuffer, depth buffer

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과 같은 것을해야한다고 생각합니다. 설명서가 약간 혼란 스럽습니다. glRenderbufferStorageinternalformat 매개 변수를 사용하며 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);