Время рисования OpenGL - PullRequest
       2

Время рисования OpenGL

2 голосов
/ 10 сентября 2011

Когда OpenGL на самом деле рисует то, чему я его учу? это при вызове конкретной функции рисования или при замене буфера?
Я хочу знать это, чтобы увидеть, могу ли я сделать что-то вроде этого:

SomeTimer Timer;

Timer.Start();
glDrawArrays(...);
long time = Timer.Stop();

Чтобы увидеть, какое рисование занимает больше всего времени, и оптимизировать на его основе.
Если это имеет значение: я рисую только в 2d, без трафарета / глубины или других буферных тестов.

1 Ответ

2 голосов
/ 10 сентября 2011

Этот код не будет работать. Команды OpenGL по определению предполагаются асинхронными по поведению. Команды GL должны полностью записывать или читать любые параметры до их завершения. Но вне этого все ставки сняты.

Время любого отдельного вызова glDraw* покажет вам только, сколько времени потребуется для выполнения этого вызова функции. В нем ничего не говорится о том, сколько времени занимает рендеринг.

A доступно более подробное обсуждение этой темы .

Положительным моментом является то, что вы можете время рендеринга, но вы должны сделать это способом OpenGL. ARB_timer_query позволяет вам сделать именно это: время, которое требуется командам OpenGL для завершения , а не просто для передачи OpenGL. Это расширение является основным в OpenGL 3.3, и оно довольно широко доступно для различных уровней оборудования. Практически любой графический процессор, который все еще поддерживается его владельцем, реализует это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...