在WebGL應用程序中,我必須畫出一堆四邊形(越好越好,但1000應該是合理的上邊界)。每個四元組都有一些屬性,如顏色,位置,大小,可能還有一些材質屬性。每四個浮點數爲10浮點數。着色器會用這些做一些花哨的東西,但這裏沒有關係。每個頂點可以描述爲(位置+大小×(±1,±1,0))。現在我想知道如何最好地渲染所有這些四邊形。基本上有三種選項,我看到:渲染獨立的四邊形,每個四邊形使用一個繪製調用還是一個調用所有這些調用?
使用工作服的所有參數,然後調用
gl.drawArrays
一次爲每個四,與只包含對角相對座標,形式即向量的數組緩衝區(±1,±1)。這意味着一個由四個頂點構成兩個三角形的三角形帶。使用單一
gl.drawArrays
呼籲所有四邊形在一起。由於屬性是每個頂點而不是每個三角形,這意味着要複製所有頂點的所有參數。此外,由於我不能通過所有頂點有一個單一的三角形條,所以我必須重複頂點,所以我基本上每個四邊形有6個頂點,並且可能使用不同的三角形而不是三角形條。這意味着每個四元組大約有6×(10 + 2)= 72個浮點數,這裏有很多冗餘。類2,但使用
gl.drawElements
,以避免重複形成每個四邊形的兩個三角形頂點。所以我最終得到4×(10 + 2)= 48個浮點數作爲屬性和6個索引索引。
我不確定採取哪種方法。他們中沒有一個感覺完全足夠。在1中,我得到的印象是每次調用只繪製四個頂點的陣列可能會浪費性能。我不確定使用這種方法繪製的幾個四邊形是否可以並行渲染。 2.和3.我擔心大量的數據冗餘,以及保存陣列所需的緩衝區大小。 3.稍微減少數據量,但可能由於間接性而導致額外的開銷。
我知道,在性能方面最終的答案是執行基準。但我想知道這裏是否有一些確定的最佳實踐,它不僅考慮我的一臺開發機器的性能,而且考慮了各種硬件,驅動程序和瀏覽器的性能,並且還考慮了其他方面,如內存的可伸縮性要求。這就是我問這個問題的原因,而我仍在努力實現適合現實生活比較的實現。