繁体   English   中英

glReadPixels更改缓冲区数据?

[英]glReadPixels changing the buffer data?

我遇到一个奇怪的问题,调用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 (尽管在到达此代码之前未绑定)。

读取更多或更少数量的像素也会对粒子系统的结果产生较大或较小的影响。

我在这里做错了什么?

原来的问题是不直接与发布代码。 那只是一个症状。

这与我如何计算帧之间的经过时间有关。 由于我是读取像素计算循环中的经过时间,因此在计算第一帧时我会得到较大的初始时间值,因为读取像素很昂贵。 获得初始大价值对我的结果有很大影响。 这也很有意义,为什么读取大量像素会使事情变得更糟(因为花费的时间更长)。

计算代码中此点之前的经过时间即可解决该问题。 通过不读取第一帧上的像素值,可以类似地避免该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM