J'ai un problème étrange où appeler glReadPixels semble changer les données des pixels lus. Je lis deux textures RGBA sur un framebuffer, qui sont utilisées pour encoder la position et la vitesse des particules. Pendant le débogage, j'utilise glReadPixels pour sortir les données de certains des pixels, et j'ai remarqué que mon système de particules se comportait différemment quand je les lisais.glReadPixels changer les données du tampon?
Le code incriminé est la suivante:
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);
Je lis de la fbo
framebuffer, qui était auparavant lié et rendu comme un GL_DRAW_FRAMEBUFFER
(si elle était non liée avant d'atteindre ce code).
La lecture d'un nombre de pixels plus grand ou plus petit a également un impact plus ou moins important sur les résultats du système de particules.
Qu'est-ce que je fais mal ici?