Подтвердить что ты не робот

Зачем использовать несколько контекстов OpenGL

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

Мой вопрос: зачем мне использовать несколько контекстов GL? Я читал в спецификации расширения ARB_framebuffer_object, что вызовы MakeCurrent могут быть дорогими, и в случае присутствия расширения ARB_framebuffer_object я могу выполнить рендеринг в общем буфере без использования MakeCurrent.

По-видимому, единственной причиной использования множественного контекста GL является избежание установки состояния контекста (хранилища пикселей, передачи, размера точки, полигонального шаблона...) или наличия доступной конфигурации нескольких буферов визуализации (один контекст с накоплением, другой без). Как мне решить, когда лучше использовать альтернативный контекст вместо установки состояния контекста?

4b9b3361

Ответ 1

Обычно я обычно использую дополнительные контексты только тогда, когда мне это абсолютно необходимо, например, рендеринг в несколько окон графического интерфейса. Для всего остального я использую объекты framebuffer или изменения состояния.

Однако рекомендации по производительности, подобные этому, не относятся ко всем случаям. Если вы сомневаетесь, вы должны измерить свое приложение на своем собственном оборудовании. gDEBugger может помочь, там доступна пробная версия.

Ответ 2

IIRC, объекты, такие как текстуры и объекты буфера, могут быть разделены между контекстами, поэтому технически вы могли бы создать второй контекст во втором потоке и загружать текстуры асинхронно там, не беспокоясь, выполняет ли первый поток рендеринг.

Ответ 3

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

Ответ 4

В программах GUI вы можете иметь несколько представлений opengl, где некоторые из них работают в том же потоке, что и GUI, а другие - в своем потоке. Более того, вы можете запускать opengl в выключенном режиме. По крайней мере, один контекст на поток.

Не уверен, имеет ли смысл иметь больше контекстов для потока.