重なり合うクワッドを画面に大量に描画する2Dゲームを作成しています。何が本当に重要ではないものの前に行くのか。
0以上のz値で各クワッドを描画し、glDepthFunc(GL_LESS)を設定すると、期待どおりに非常に優れた速度ブーストが得られます。これは、他のクワッドの背後に完全に隠されているか、部分的に隠されているクワッドを描画する必要がないようにするためです。したがって、次のようなものを使用して四角形を描画します。
float small = (float(1)/1000000);
for (int iii = 0; iii < 100000; iii++) {
freeSpace = bullets[iii]->draw(opengl, freeSpace, iii*small);
}
ただし、実際の深さにはz値を使用しないので、次のように実行できるはずです。
for (int iii = 0; iii < 100000; iii++) {
freeSpace = bullets[iii]->draw(opengl, freeSpace, 0.0f);
}
または、0.0fのz値をシェーダーにコーディングするだけです。(3番目の引数はz値であり、シェーダーのgl_positionに変更されずに設定されます。)
奇妙なことに、2番目の方法(毎回z値を0.0fに設定する)では、前者のフレームレートのほぼ半分未満になってしまいます。
どうしてこれなの?どちらもglDepthFunc(GL_LESS)と
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 100000*(2*3));
全く同じで。毎回zを0.0fに設定するともっと速くなると思います。なぜそうではないのですか?