[英]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.