【发布时间】:2016-04-11 01:39:36
【问题描述】:
我遇到了一个奇怪的问题,调用 glReadPixels 似乎正在更改正在读取的像素的数据。我正在读取帧缓冲区上的两个 RGBA 纹理,它们用于对粒子的位置和速度进行编码。
在调试时,我使用 glReadPixels 输出一些像素的数据,我注意到我的粒子系统在读取它们时表现不同。
有问题的代码是这样的:
glBindFramebuffer( GL_READ_FRAMEBUFFER, fbo);
glReadBuffer( GL_COLOR_ATTACHMENT0 );
GLfloat *pixels = new GLfloat[ width * height * 4];
glReadPixels( 0, 0, width, height , GL_RGBA, GL_FLOAT, pixels);
std::cout << "Position: " << pixels[0] << " " << pixels[1] << " " << pixels[2] << " " << pixels[3] << std::endl;
glReadBuffer( GL_COLOR_ATTACHMENT1 );
glReadPixels( 0, 0, width, height, GL_RGBA, GL_FLOAT, pixels);
std::cout << "Velocity: " << pixels[0] << " " << pixels[1] << " " << pixels[2] << " " << pixels[3] << std::endl;
delete pixels;
glBindFramebuffer( GL_READ_FRAMEBUFFER, 0 );
我正在读取 fbo 帧缓冲区,该缓冲区之前已绑定并呈现为 GL_DRAW_FRAMEBUFFER(尽管在到达此代码之前未绑定)。
读取更多或更少数量的像素也会对粒子系统的结果产生或大或小的影响。
我在这里做错了什么?
【问题讨论】: