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);
/* 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) {
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);