Можно ли совместно использовать объект кадрового буфера opengl между контекстами / потоками? - PullRequest
14 голосов
/ 08 декабря 2010

Я хочу визуализировать мою сцену в одном потоке, а затем скопировать результат в окно, принадлежащее другому потоку. Чтобы избежать чтения кадрового буфера обратно в память процессора, я хотел бы использовать объект кадрового буфера. До сих пор я не смог заставить это работать (белая текстура), что заставляет меня поверить, что это не поддерживается opengl.

  1. Можно ли совместно использовать объекты кадрового буфера между различными контекстами?
  2. Можно ли совместно использовать объект framebuffer между различными потоками, учитывая, что объект связан только одним потоком одновременно?

Если кто-то может указать мне, где это описано в документации, это будет бонусом.

1 Ответ

9 голосов
/ 08 декабря 2010

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

Что касается потоков: это должно быть возможно, но, как правило, рекомендуется не выполнять команды GL из нескольких потоков (поскольку синхронизировать их очень сложно). Обычно вы копируете содержимое в объект pixel-buffer и отображаете его из потока GL, а затем используете отображенный указатель из другого потока.

...