[英]IOS Metal Stencil Buffer project crashes when Metal Validation Enabled
[英]Update the index buffer each frame when rending using Metal in iOS
我有非常動態的數據,每幀都會改變。 數據本身比較小所以我用
[commandEncoder setVertexBytes:_vertices.buffer() length:_vertices.size() * sizeof(float) atIndex:0];
設置頂點數據。
但是,在使用以下方法繪制時,我還需要設置索引數據:
[commandEncoder drawIndexedPrimitives: ...];
如何更新所提供的MTLBuffer
用於索引數據drawIndexedPrimitives
方法? 我需要能夠有效地更新索引緩沖區。
本文包含使用多個緩沖區在 CPU 和 GPU 之間同步數據而不強制它們以鎖步方式工作的深入解釋。 你應該仔細閱讀它。 我將總結下面的方法。
NSArray<id<MTLBuffer>>
)。 這是您的重用池; 我將在下面將其稱為indexBufferPool
。bufferSemaphore
。bufferIndex
。dispatch_semaphore_wait(bufferSemaphore, DISPATCH_TIME_FOREVER)
等待信號量。memcpy
或其他一些復制技術,將索引數據復制到bufferPool[bufferIndex]
的內容中。bufferPool[bufferIndex]
作為索引緩沖區繪制基元。bufferIndex = (bufferIndex + 1) % ResourceCount
增加bufferIndex
,其中ResourceCount
是重用池中的緩沖區數。dispatch_semaphore_signal(bufferSemaphore)
。 這讓任何對 draw 方法的掛起調用都知道在當前緩沖區索引處寫入緩沖區是安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.