From a90c53f20626319668a89b731879685a8beb07f3 Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Tue, 14 Apr 2020 15:52:24 +0100 Subject: [PATCH] Make PBO speedier --- clouds.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/clouds.cpp b/clouds.cpp index ff6e59d..5787181 100644 --- a/clouds.cpp +++ b/clouds.cpp @@ -167,7 +167,7 @@ mat4 faceView(mat4 m) { const int shadeWidth = 256, shadeHeight = 256; #ifdef PBO -const int numPbos = 64; +const int numPbos = 512; GLuint pboBufs[numPbos]; GLuint pboOffsets[numPbos]; // offsets into GL_PIXEL_PACK_BUFFER that // mapPixelRead should read from @@ -176,8 +176,10 @@ GLbyte sink[shadeWidth * shadeHeight * 4]; void inline mapPixelRead(int pboBuf, int metaball) { glBindBuffer(GL_PIXEL_PACK_BUFFER, pboBufs[pboBuf]); GLubyte *src = - (GLubyte *)glMapBufferRange(GL_PIXEL_PACK_BUFFER, pboOffsets[pboBuf], + (GLubyte *)glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, 4 * sizeof(GLubyte), GL_MAP_READ_BIT); + /* (GLubyte *)glMapBufferRange(GL_PIXEL_PACK_BUFFER, pboOffsets[pboBuf], */ + /* 4 * sizeof(GLubyte), GL_MAP_READ_BIT); */ vec4 pixel = vec4(src[0], src[1], src[2], src[3]) / vec4(255.f); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); @@ -272,9 +274,10 @@ void shadeClouds() { /* glReadPixels(screenPos.x, screenPos.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, */ /* NULL); */ - glReadPixels(0, 0, shadeWidth, shadeHeight, GL_RGBA, GL_UNSIGNED_BYTE, - NULL); - pboOffsets[pboIdx] = screenPos.x * 4 + screenPos.y * shadeWidth * 4; + /* glReadPixels(0, 0, shadeWidth, shadeHeight, GL_RGBA, GL_UNSIGNED_BYTE, */ + /* NULL); */ + glReadPixels(screenPos.x, screenPos.y, 64, 64, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + /* pboOffsets[pboIdx] = screenPos.x * 4 + screenPos.y * shadeWidth * 4; */ int nextPbo = (pboIdx + 1) % numPbos; if (i >= numPbos - 1) { @@ -549,7 +552,7 @@ int main(int argc, char **argv) { glGenBuffers(numPbos, pboBufs); for (int i = 0; i < numPbos; i++) { glBindBuffer(GL_PIXEL_PACK_BUFFER, pboBufs[i]); - glBufferData(GL_PIXEL_PACK_BUFFER, shadeWidth * shadeHeight * 4, NULL, + glBufferData(GL_PIXEL_PACK_BUFFER, 64 * 64 * 4, NULL, GL_DYNAMIC_READ); } glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); -- 2.30.2