0
從gpu獲取數據似乎是一個非常緩慢的任務,如果你想讀取它與你的應用程序同步。一種可能是在像素緩衝區對象的幫助下異步讀取。不幸的是,我無法看到這是如何完成的。使用像素緩衝區對象異步讀取數據gpu
首先我創建了一個像素緩衝區對象:
glGenBuffers(1, &pbo);
glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo);
glBufferData(GL_PIXEL_PACK_BUFFER, pbo_size, 0, GL_DYNAMIC_READ);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
然後我想從一個幀緩衝對象讀取像素:
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo);
glReadPixels(0, 0, w, h, GL_RGBA, GL_FLOAT, 0);
GLfloat *ptr = glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, pbo_size, GL_MAP_READ_BIT);
memcpy(pixels, ptr, pbo_size);
glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
這是怎麼回事異步? glReadPixels或glMapBufferRange會阻止應用程序,直到gpu「準備就緒」?
是否有可能確定讀取是否完成? – testman
@testman:[GL_ARB_sync](https://www.opengl.org/registry/specs/ARB/sync.txt) – derhass
謝謝,所以我可以使用glClientWaitSync或glWaitSync指令。我的應用程序客戶端或服務器是GL嗎?我將使用什麼作爲同步參數? – testman