X-Git-Url: https://git.lukelau.me/?p=clouds.git;a=blobdiff_plain;f=clouds.cpp;h=b8ea3f0071cb0f0e5ce34bdfd48e44b17151edbd;hp=ff6e59d8faca801d28a5638897a28e115ffb0b37;hb=HEAD;hpb=60211392a44ab8b080cfc88035379e92a2fe6f39 diff --git a/clouds.cpp b/clouds.cpp index ff6e59d..b8ea3f0 100644 --- a/clouds.cpp +++ b/clouds.cpp @@ -167,16 +167,14 @@ 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 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); vec4 pixel = vec4(src[0], src[1], src[2], src[3]) / vec4(255.f); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); @@ -272,9 +270,7 @@ 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(screenPos.x, screenPos.y, 64, 64, GL_RGBA, GL_UNSIGNED_BYTE, NULL); int nextPbo = (pboIdx + 1) % numPbos; if (i >= numPbos - 1) { @@ -549,7 +545,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);