X-Git-Url: https://git.lukelau.me/?a=blobdiff_plain;f=clouds.cpp;h=b8ea3f0071cb0f0e5ce34bdfd48e44b17151edbd;hb=fb589ed247f5441995b750bb5145239acab3ef09;hp=f0f3a957576d17da6fdf5b60c521174e060eaeec;hpb=efac65ad1c51cdd7e8ecd37ebb9570ac14efeeeb;p=clouds.git diff --git a/clouds.cpp b/clouds.cpp index f0f3a95..b8ea3f0 100644 --- a/clouds.cpp +++ b/clouds.cpp @@ -63,7 +63,8 @@ void precalculateBillboardTextures() { float r = distance(vec2(i, j), vec2(16, 16)) / 16; float density = (float)d / NQ; data[i + j * 32] = - 1 - fmin(1, (3 * density * (metaballField(r) / normalizationFactor))); + 1 - + fmin(1, (3 * density * (metaballField(r) / normalizationFactor))); } } @@ -166,14 +167,15 @@ mat4 faceView(mat4 m) { const int shadeWidth = 256, shadeHeight = 256; #ifdef PBO -const int numPbos = 64; +const int numPbos = 512; GLuint pboBufs[numPbos]; 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, 0, 4 * sizeof(GLubyte), - GL_MAP_READ_BIT); + GLubyte *src = + (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); @@ -263,11 +265,12 @@ void shadeClouds() { #else glBindBuffer(GL_PIXEL_PACK_BUFFER, pboBufs[pboIdx]); - glReadPixels(screenPos.x, screenPos.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, - NULL); - // TODO: use this - /* glReadPixels(0, 0, shadeWidth, shadeHeight, GL_RGBA, GL_UNSIGNED_BYTE, */ + // It would be nice if this worked. But it doesn't + // macOS driver does this synchronously + /* glReadPixels(screenPos.x, screenPos.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, + */ /* NULL); */ + glReadPixels(screenPos.x, screenPos.y, 64, 64, GL_RGBA, GL_UNSIGNED_BYTE, NULL); int nextPbo = (pboIdx + 1) % numPbos; if (i >= numPbos - 1) { @@ -542,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);