我想將一個非常大的內存塊的內容傳輸到一個足夠大的GPU緩衝區,然後立即改變CPU上內存的內容。事情是這樣的僞代碼:glBufferSubData何時返回?
glBindBuffer(/*very_large_buffer*/);
glBufferSubData(/*very_large_memory_chunk*/);
memset(/*zeros*/, /*very_large_memory_chunk*/);
在這段代碼,什麼glBufferSubData
實際上做?它是否在返回之前將very_large_memory_chunk傳輸到某個位置,或者只是爲了稍後執行而安排傳輸操作?因此,如果我立即開始改變CPU緩衝區,是否有可能部分改變內存將被傳輸,在GPU的very_large_buffer中產生垃圾?
請注意,我沒有詢問渲染調用。我知道如果緩衝區用於渲染,傳輸操作將等待渲染完成,反之亦然。我想知道OpenGL在CPU到GPU傳輸操作中的行爲是否相似。