2012-03-10 9 views
1

私は、OpenGL 3.3のコンテキスト/ウィンドウ作成のためにfreeglutからSFMLに切り替えました。私はfreeglutを使用してOpenGL:Renderbuffer、デプスバッファ

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は実際に深度バッファを割り当てずにデフォルトのフレームバッファに接続するようです。

どうすれば実際にこれを行うのですか?私はあなたがglGenRenderbuffersglBindRenderbuffer、次にglRenderbufferStorageglFramebufferRenderbufferのような何かをしなければならないと思っています。ドキュメントはちょっと混乱しています。 glRenderbufferStorageにはinternalformatというパラメータがあり、24ビットのデプスバッファが必要なことを示す方法はわかりません。また、私は本当にどのようにデフォルトのフレームバッファにアクセスする(または、ダブルバッファリングがあるので、2つのデフォルトのフレームバッファがありますか?

答えて

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); 
関連する問題