2

マトリックスの状態を保存/復元するには、標準のプッシュ/ポップ操作を使用することを知っています。glLineWidth() や glColor4ub() を使用する場合など、状態を保存/復元するための適切な規則を見つけることができませんでした。

何かを描画したいときはいつでも線幅または色を適切に設定する限り、実際には必要ではないようですが、独自の描画関数のどこにいるかの例を見ることができます。線幅を変更する別の描画関数を呼び出します知らず知らずのうちに描き続けていくと、思い通りにならないことがあります。

何をするかわからない関数を呼び出した後に線幅をリセットできることを修正するには、それは洗練されていないように思えます。

私自身のコードでは、すべての描画関数の最初でこれを行っています:

GLfloat savedLineWidth = 1.0f;
glGetFloatv(GL_LINE_WIDTH, &savedLineWidth);
glLineWidth(lineWidth);

そして、次のように描画関数の最後に状態を復元します。

glLineWidth(savedLineWidth);

私が内部を知らないすべての描画機能が素晴らしく、それ自体で状態を復元すると仮定しない限り、それは本当に私には役に立ちません。

その仮定をする必要がありますか?または、何か不足していますか?

4

1 に答える 1

2

これがプレーンな OpenGL (ES バリアントではない) の場合、次のように属性をプッシュできます。

glPushAttrib(GL_LINE_WIDTH);
glLineWidth(2.0f);
... etc ...
glPopAttrib();

残念ながら、OpenGL ES ではこれは利用できません。取得と設定のアプローチは、取得できるものとほぼ同じです。

これは非常に時間のかかるプロセスであるため、get を実行する回数を減らすようにしてください。送信とは異なり、取得はバッファリングされません。

多分あなたのアプローチは心配しないことであるべきです. 線幅を設定したいときはいつでも設定してください。線幅はあまり影響しないはずです。

厳しいコール。これらの他の描画機能が何であるかによって異なります。コードはありますか?多分あなたは見ることができますか?

于 2010-08-19T04:28:11.640 に答える