[英]Best way to save data of many instances
我有一個粒子系統,為此我渲染(例如1個粒子效果)帶有紋理的100個四邊形。 如果我添加多個粒子效果,則它會滯后,因為每個粒子都有其自己的垂直度(2f矢量),位置(3f vec)等...(矢量來自LwJGL)
結果,每個實例意味着5或6種數據類型。 現在我的問題是:
有沒有一種方法可以使它變得更好,以便不是每個實例都有5個新向量? (而且,我知道創建粒子系統還有許多其他更好的方法,但是我選擇的這種方法很簡單,我可以練習“性能提升”。)
好的,因此,我將參考此代碼 ,您可能會從中受到啟發。
我還假設您至少具有GL 3.3配置文件。
從理論上講,要充其量進行優化,您應該在GPU上移動Map<ParticleTexture, List<Particle>> particles
(使用紋理圖集),並且每幀僅上載變化的數據,例如camera
。 但這一步很難做到,所以我建議您通過在gpu上一次移動一件事來逐步修改當前算法。
一些觀察:
prepare()
和finishRendering()
,啟用第i個VertexAttribArray是vao的一部分,如果您綁定/取消綁定vao,就足夠了。 可以刪除glEnableVertexAttribArray
和glDisableVertexAttribArray
loader.updateVbo()
非常昂貴 ,它在每次render
時都創建一個FloatBuffer
並在復制數據之前清除緩沖區。 您應該只分配一次float []
或FloatBuffer
,重用它,然后簡單地調用glBufferSubData
,避免使用glBufferData
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.