我正在製作一個2D遊戲,涉及在屏幕上繪製大量重疊四邊形。什麼並不重要。當點有相同的深度時,opengl深度緩衝區變慢
如果我繪製每個四元組的z值從0開始,並設置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值編碼到着色器中。 (第三個參數是z值,最終在着色器中不變地設置爲gl_position。)
奇怪的是,第二種方法(其中我每次將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,每次都會更快。爲什麼不是?
什麼值你清除深度緩衝區? – 2013-02-19 04:07:38
不,但小於1(這是深度緩衝區被清除的內容)。所以這個想法是每個像素只寫入一次。我可以使用GL_LEQUAL,它仍然有可怕的表現(與GL_LESS相同)。我的目標是試圖讓深度緩衝區只讓每個像素被繪製一次,以減少填充率要求。 – Ellipsis 2013-02-19 04:08:14
深度緩衝區清除爲默認值(我從不改變它)。所以我相信它會清楚地表明1.0。 – Ellipsis 2013-02-19 04:33:45