常に glPushAttrib(GL_ALL_ATTRIB_BITS) を使用してもよいのでしょうか?
それとも、パフォーマンスの問題があるため、必要なビットのみをプッシュする方がよいでしょうか?
2 に答える
(他のユーザーが指摘したように-一般的には非推奨の機能を避ける方が良いですが、この回答の残りの部分では、何らかの理由でそれに固執する必要があると想定しています)
パフォーマンスの違い (ある場合) は、GPU、ドライバーの実装、プログラム内のプッシュ/ポップの数、およびおそらく他の要因に依存するため、これに対する簡単な答えはありません。テストが必要になりますが、構成と現在のコードに違いがないという理由だけで、他の構成やコードが成長したときに大きく異なる可能性があることを覚えておいてください。個人的には、パフォーマンスが心配な場合は、実際に保存する必要があるビットのみをプッシュすることをお勧めします。
編集: GPU PerfStudio を使用して呼び出しの CPU 時間をチェックし、13.4 ドライバーを搭載した Radeon 5870 で簡単なテストを行いました。GL_ALL_ATTRIB_BITS のプッシュには約 30 ~ 40 マイクロ秒かかるようです (ポップにはほぼ同じ)、他のビットは 1 ~ 8 の間で変化します。したがって、違いがあり、他の呼び出しと比較して、30-40 us はかなりの時間です。私のプログラムでは、glClear といくつかの glDrawArrays のみがこれよりも多くかかりました。