2
如果我在計算着色器中生成0-12個三角形,有沒有辦法將它們流式傳輸到一個緩衝區,然後將其用於渲染屏幕?來自計算着色器的動態輸出
我目前的策略是:
- 創建的尺寸
threads * 12
的float3
一個緩衝器,因此可以存儲三角形的最大可能的數目; - 使用取決於網格中線程位置的索引寫入緩衝區,因此沒有競爭條件。
如果我想從這個渲染雖然,我將需要跳過空內存。這聽起來很難看,但目前可能沒有其他辦法。我知道CUDA幾何着色器可以具有可變長度輸出,但我不知道iOS上的遊戲是否可以在GPU上生成可變長度的數據。
更新1:
只要我寫的問題,我想過使用第二緩衝區會指出有多少個三角形可用於每個塊的可能性。頂點着色器然後將處理該塊的所有三角形的所有頂點。
雖然這不會解決未使用的內存問題,並且由於線程數很多,浪費的內存總量也會相當大。
這正是我想到的:原子增加計數器以保留緩衝區的特定區域,然後寫入緩衝區。在傳遞結束時,使用原子int大小複製緩衝區來渲染緩衝區並刪除工作緩衝區。 – aledalgrande