2015-12-21 27 views
1

我已經獲得了一個只能在GPU中訪問的3D紋理,我正試圖在幀開始時清除它。我已經嘗試使用計算機着色器將每個元素都設置爲零,但對於64x64x64紋理,這需要將近3ms,並且我想使用比這更大的東西。如何使用金屬清除GPU紋理?

如果我可以做一些類似於顏色附件的清除有效操作,那將是非常好的,但我不認爲在這種情況下這是可能的。

什麼是清除紋理的最快方法?

+0

什麼是您的計算着色器是什麼樣子?據推測,你正在創建最大的線程組大小(通常爲512或1024),並啓動足夠的線程組來完全填充GPU? – Fooberman

回答

2

做到這一點,最簡單的方法是使用renderPassDesciptor的loadActions,像這樣:

MTLRenderPassDescriptor *rpdesc = [MTLRenderPassDescriptor renderPassDescriptor]; 
rpdesc.colorAttachments[0].clearColor = MTLClearColorMake(0,0,0,0); 
rpdesc.colorAttachments[0].loadAction = MTLLoadActionClear;