Аппаратный ускоритель OpenGL, спящий после периода бездействия - PullRequest
1 голос
/ 20 октября 2010

Я работаю над программным обеспечением 2D CAD на базе Opengl, которое требует интенсивного использования аппаратного ускорителя OpenGL (время от времени проталкивая 250 миллионов вершин в секунду).Вот моя проблема ... всякий раз, когда область просмотра находится в состоянии стагнации в течение более 10 секунд, ускоритель OpenGL (в данном случае Geforce 9800 GT) переходит в неактивный режим.Когда видовой экран визуализируется снова после неактивного периода, я получаю 1/4 нормальной частоты кадров, и это будет продолжаться в течение 3-4 секунд, прежде чем 3D-ускоритель проснется и начнет работать на полной скорости.

Вопрос:

  1. Как мне предотвратить это?
  2. Есть ли способ Opengl предотвратить переход GPus в неактивный режим?

Спасибо за ваши ответы.

Гари

1 Ответ

0 голосов
/ 26 октября 2010

Есть несколько способов, которыми вы можете держать GPU занятым, но самый надежный способ гарантировать, что он что-то делает, а не просто откладывать ваши команды, это на самом деле что-то нарисовать.glClear () и каждая команда glDraw * составляют фактические команды рисования.Добавьте glFinish () в конце отрисовки, чтобы гарантировать выполнение потока команд gl.

Предположительно, вы не хотите видеть этот чертеж, поэтому создайте новый объект кадрового буфера, создайте небольшую текстуру RGBA (скажем, 256 на стороне), затем прикрепите текстуру к точке присоединения цвета 0.

Если вы хотите, чтобы графический процессор был занят, рисуйте в этот внеэкранный буфер.

Это все при условии, чтовы не можете, например, просто изменить параметры загрузки или настройки панели управления, чтобы модулировать поведение управления питанием на карте.Здесь каждая ОС имеет свою семантику.

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