Nie, oni (głównie) nie. Większość funkcji GL jest buforowana, gdy są używane i faktycznie wykonywane później. Oznacza to, że nie można myśleć o procesorze i GPU jako dwóch procesorach pracujących razem w tym samym czasie. Zwykle CPU wykonuje garść funkcji GL, które są buforowane i, gdy tylko zostaną dostarczone do GPU, to one je wykonują. Oznacza to, że nie można wiarygodnie kontrolować, ile czasu zajęło wykonanie określonej funkcji GL przez porównanie czasu przed i po jego wykonaniu.
Jeśli chcesz to zrobić, musisz najpierw uruchomić glFinish(), tak aby faktycznie czekał on na wszystkie wcześniej buforowane wywołania GL, a następnie możesz zacząć liczyć, wykonać połączenia, które chcesz porównać, Ponownie wywołaj glFinish, aby upewnić się, że te wywołania również zostały wykonane, a następnie zakończ test porównawczy.
Z drugiej strony, powiedziałem "głównie". Dzieje się tak dlatego, że funkcje odczytu będą rzeczywiście POTRZEBNE, aby zsynchronizować się z procesorem GPU, aby pokazać rzeczywiste wyniki, a więc w tym przypadku Zaczekaj i zatrzymaj główny wątek.
edytuj: Wydaje mi się, że samo wyjaśnienie odpowiada na pytanie zadane przez Ciebie jako drugie, ale na wszelki wypadek: fakt, że wszystkie połączenia są buforowane, umożliwia wykonanie losowania jako pierwszego, a następnie zmianę ustawienia później dla kolejnych połączeń
Tak, generalnie będą one blokować funkcje, nie jestem pewien, jak nie zrobiłem tego wcześniej, ale zakładam, że byłby uruchamiany w pętli i aktualizowany tylko wtedy, gdy jest to potrzebne, aby utrzymać szybkość odtwarzania. – PsyKzz
@MattPsyK: Funkcje OpenGL, które nie wprowadzają punktu synchronizacji, nie są blokowane. – datenwolf
Moje złe, założenia zostały dokonane. – PsyKzz