OpenGL: быстрый рендеринг вне экрана - PullRequest
5 голосов
/ 18 октября 2008

Мне нужно визуализировать довольно много (десятки тысяч) изображений вне экрана, используя OpenGL.
Я работаю под Windows и использую QT в качестве основы. решение может быть только для окон, это не имеет значения.

Из того, что я нашел с помощью Google, есть несколько вариантов сделать это Эта статья , которая выглядит довольно устаревшей, предлагает несколько способов, из которых:

  • Специфично для Windows - используйте CreateDIBSection и каким-то образом привяжите к нему текстуру.
  • Используйте расширение pbuffers, которое, как мне кажется, поддерживается на моей карте.

Этот поток (Сообщение 6) предлагает конкретный способ QT сделать это с использованием QGLWidget::renderPixmap

Мой вопрос - какой из них будет самым быстрым? pbuffers, кажется, самая безопасная ставка, потому что она гарантированно будет выполняться на оборудовании, но разве метод CreateDIB также проходит через оборудование? Как насчет метода QT? Кажется, с этим возникает проблема создания контекста. конечно, я не хотел бы создавать новый контекст для каждого изображения, которое я создаю.
У кого-нибудь есть хороший опыт с этим?


РЕДАКТИРОВАТЬ : Ответ на комментарий -
У меня есть постоянная сцена, которая не меняется вообще, и я рендеринг ее с разных точек зрения. На данный момент изображения возвращаются пользователю и будут обрабатываться процессором. Возможно, в будущем они будут обрабатываться на GPU.

1 Ответ

9 голосов
/ 18 октября 2008

Используйте FBO . Он быстрый, портативный и гораздо приятнее в использовании, чем pbuffers.

РЕДАКТИРОВАТЬ: Для лучшей производительности, альтернативный рендеринг между двумя разными FBO:

  1. Визуализация до A
  2. Визуализация до B
  3. Прочитать обратно из A и обработать его
  4. Визуализация до A
  5. Чтение из B
  6. Перейти к 2

Таким образом, вы можете считывать обратно одно FBO и затем обрабатывать его, пока графический процессор выполняет параллельное отображение другого.

...