Quiero utilizar dos PBO para leer píxeles de forma alternativa. Pensé que el modo PBO será mucho más rápido, porque glReadPixels regresa inmediatamente cuando se usa PBO, y se puede superponer un montón de tiempo.glReadPixels asíncronas con PBO
Extrañamente parece que no hay mucho beneficio. Teniendo en cuenta un cierto código como:
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0);
Timer t; t.start();
glReadPixels(0,0,1024,1024,GL_RGBA, GL_UNSIGNED_BYTE, buf);
t.stop(); std::cout << t.getElapsedTimeInMilliSec() << " ";
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo);
t.start();
glReadPixels(0,0,1024,1024,GL_RGBA, GL_UNSIGNED_BYTE, 0);
t.stop(); std::cout << t.getElapsedTimeInMilliSec() << std::endl;
El resultado es
1.301 1.185
1.294 1.19
1.28 1.191
1.341 1.254
1.327 1.201
1.304 1.19
1.352 1.235
La forma PBO es un poco más rápido, pero no una satisfactoria inmediata de retención
Mi pregunta es:.
- ¿Cuál es el factor que afecta el rendimiento de glReadPixels? A veces, el costo alcanza 10 ms, pero 1,3 ms aquí.
¿Por qué de devolución inmediata cuesta tanto como 1.2ms? ¿Es demasiado grande o simplemente normal?
=========================================== ================================
de acuerdo con la comparación con una demo, me encontré con dos factores:
- GL_BGRA es mejor que GL_RGBA, 1.3ms => 1,0 ms (sin PBO), 1.2ms => 0,9 ms (con PBO)
- glutInitDisplayMode (GLUT_RGB | GLUT_ALPHA) en lugar de GLUT_RGBA, 0,9 ms => 0.01ms . Esa es la actuación que quiero. En mi sistema, GLUT_RGBA = GLUT_RGB = 0. GLUT_ALPHA = 8
luego otros dos preguntas:
- ¿Por qué es mejor que GL_BGRA GL_RGBA? ¿Es el caso solo para una plataforma específica o para todas las plataformas?
- ¿Por qué GLUT_ALPHA es tan importante que afecta enormemente el rendimiento de PBO?
ooo simplemente probado esto mismo en mi sistema GLUT_RGBA 330 fps GLUT_RGB | 630fps GLUT_ALPHA Eso es un aumento por un factor 2 que se había perdido GLUT_ALPHA era importante. – ColacX