Voglio utilizzare due PBO per leggere pixel in modo alternativo. Ho pensato che il modo PBO sarebbe molto più veloce, perché glReadPixels ritorna immediatamente quando si usa PBO e si può sovrapporre un sacco di tempo.glinceadPixels asincroni con PBO
Stranamente non sembra esserci molto beneficio. Considerando un certo codice come:
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;
Il risultato è
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
Il modo in PBO è un po 'più veloce, ma non una soddisfacente immediato ritorno
La mia domanda è:.
- Qual è il fattore che influisce sulle prestazioni di glReadPixels? A volte, il costo di esso raggiunge 10 ms, ma 1,3 ms qui.
Perché immediato-ritorno costa fino a 1,2 ms? È troppo grande o solo normale?
=========================================== ================================
Secondo confronto con una demo, ho trovato due fattori:
- GL_BGRA è meglio di GL_RGBA, 1.3ms => 1,0 ms (senza PBO), 1.2ms => 0.9ms (con PBO)
- glutInitDisplayMode (GLUT_RGB | GLUT_ALPHA) piuttosto che GLUT_RGBA, 0.9ms => 0.01ms .Questa è la prestazione che voglio. Nel mio sistema, GLUT_RGBA = GLUT_RGB = 0. GLUT_ALPHA = 8
poi un altro due domande:
- Perché GL_BGRA è meglio di GL_RGBA? È il caso di una piattaforma specifica o di tutte le piattaforme?
- Perché GLUT_ALPHA è così importante da influire enormemente sulle prestazioni del PBO?
ooo appena testato questo me stesso sul mio sistema GLUT_RGBA 330 fps GLUT_RGB | 630fps GLUT_ALPHA che è un aumento di un fattore 2 era sfuggito che GLUT_ALPHA era importante. – ColacX