Qt & OpenGL: как рендерить как можно чаще? - PullRequest
2 голосов
/ 14 марта 2012

Я портирую через приложение OpenGL из проекта win32 в проект Qt.

В проекте win32 у меня просто был основной цикл, который продолжал выполнять следующий кадр, как только предыдущий был закончен.

В руководствах, которые я нахожу о Qt и OpenGL, они используют таймеры для управления обновлением сцены.Тем не менее, я хотел бы делать как можно больше кадров - как это сделать?

Ответы [ 4 ]

5 голосов
/ 14 марта 2012

Тем не менее, я хотел бы отображать как можно больше кадров - как это сделать?

Не с Qt. Qt получает полный контроль над циклом событий, таким образом, не предоставляя вам никаких средств для непосредственного выполнения операций в режиме ожидания. Стандартный способ выполнения незанятых операций в Qt - это использование QTime с таймаутом 0.

Другой возможностью было использование второго потока только для операций OpenGL. Однако для надежной работы вы должны создать выделенный контекст OpenGL для этого одного потока.

Qt просто не подходит для тех программ, в которых основная задача основного цикла - рендеринг изображений, а ввод и управление событиями - вторичны.

2 голосов
/ 14 марта 2012

Попробуйте позвонить update() в конце вашего обработчика краски.

Это поставит в очередь еще одно событие перекраски.

1 голос
/ 14 марта 2012

Тем не менее, я хотел бы отображать как можно больше кадров - как это сделать?

Использовать QTimer с нулевым интервалом .

1 голос
/ 14 марта 2012

Внутренние принципы Qt и OpenGL не в рендеринге как можно скорее, а в рендеринге всякий раз, когда мы хотим (огромная разница).

Вы должны запросить максимальную частоту кадров системы (ищите образцы в OpenGL, извините, я не помню, где я это видел). Как только вы это сделаете, просто создайте таймер на основе этой максимальной частоты кадров, и вы получите то, что хотите.

...