5

glEnable で何かを設定したり、有効にするものに func を指定したりして、フレーム バッファ オブジェクトを切り替えると、フレーム バッファ オブジェクトごとに設定が保持されますか、それとも設定する必要がありますか? 実際には、これはうまくいきますか?

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT); 
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
for int i=0; i<N; i++{
     glBindFramebuffer(GL_FRAMEBUFFER, fbos[i]);
     rendering something to the fbos here
}

それとも書かなきゃいけないの?

for int i=0; i<N; i++{
     glBindFramebuffer(GL_FRAMEBUFFER, fbos[i]);
     glEnable(GL_CULL_FACE);
     glCullFace(GL_FRONT); 
     glEnable(GL_DEPTH_TEST);
     glDepthMask(GL_TRUE);
     rendering something to the fbos here
}

編集: glUseProgram はどうですか? それは保管されていますか?

4

1 に答える 1

10

いいえ、GL_CULL_FACE およびその他のラスタ化状態は、フレームバッファ オブジェクトごとに保存されません。実際、状態を設定する必要があるのは 1 回だけです。

この事実を確認するには、OpenGL 仕様の 23 章 (状態テーブル) にある状態の仕様を読むことができます。テーブルは、各フレーム バッファ オブジェクトの状態を定義します。

于 2013-07-20T10:49:20.333 に答える