我想從Android的OpenGL ES 2.0中將對象類的點光源數組傳遞給頂點着色器。如何在OpenGL ES 2.0中將浮點數組傳遞給Shader?
點光源存儲爲float[]
陣列,着色器理想情況下將浮點數讀取爲vec4[]
陣列。
通過調用glUniform4fv(...floatArray, 0)
可以將float []傳遞給頂點着色器,並在頂點着色器中聲明爲uniform vec4 u_PointLights[990]
,但這非常緩慢。
我試圖讓花車進入GPU內存;首先想到的是VBO,但綁定數據並將其傳遞給着色器後,我只能讀取一個vec4而不是數組(即不能聲明attribute vec4[] a_PointLights
)。
將第二個vec4[]
加入着色器的最佳方法是什麼?
感謝,
理查德
它的什麼部分非常慢,轉移到着色器統一或只是實際渲染?如果循環和if語句很複雜(在着色器中分支是SLOW),那麼在着色器中可能會有一些放緩 如果統一緩衝區對象可能更適合傳輸大型數組,那麼我認爲它不應該是發送陣列到制服太慢。 – WearyWanderer
我不認爲ES 2上可以使用統一的緩衝區對象,不幸的是,雖然它們是用ES 3到達的。但是第二個關於着色器本身的查詢:您如何處理數據?在着色器中理想地避免條件和隨機訪問;攻擊一個像傳統的命令式程序通常不會帶來好的結果。 – Tommy
另外,你多久打一次'glUniform4fv'?每幀一次? – Tommy