У меня возникла странная проблема, когда вызов 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
(хотя он был несвязан до достижения этого кода).
Чтение большего или меньшего количества пикселей также оказывает большее или меньшее влияние на результаты системы частиц.
Что я здесь делаю неправильно?