EAGLContext, EAGLSharegroups, RenderBuffers, FrameBuffers, о мой!

Я пытаюсь обернуть голову вокруг объектной модели OpenGL на iPhone OS. Я в настоящее время рендеринг в несколько разных UIViews (построить на CAEAGLayerс) на экране. В настоящее время у меня есть каждый из них, как использование отдельных EAGLContextкаждый из которых имеет цветной буфер визуализации и кадровый буфер.

Я отрисовываю похожие вещи в них, и я хотел бы разделить текстуры между этими экземплярами, чтобы сэкономить память.

Мое текущее понимание состоит в том, что я мог бы использовать ту же самую установку (некоторое количество контекстов, каждый с FBO/RBO), но если я вызову более поздние, используя EAGLShareGroup из первого, тогда я могу просто использовать имена текстур (GLuints) из первого в более поздних. Это точно?

Если это так, я полагаю, что последующий вопрос: в чем выгода от того, что это будет "группа акций"? Могу ли я просто использовать один и тот же контекст и присоединить к этому контексту несколько FBO / RBO? Я думаю, что я борюсь со слоем абстракции группы акций, который, кажется, разделяет "объекты" (текстуры и другие именованные объекты), но не "состояние" (матрицы, включенные / отключенные состояния), которые принадлежат контексту.

Какой лучший способ думать об этом?

Спасибо за любое просвещение!

1 ответ

Решение

Это верно - когда два EAGLContextы созданы с тем же EAGLSharegroupони имеют одинаковое представление буферных объектов, текстур, буферов рендеринга и кадровых буферов. Если ваши контексты используют OpenGL ES 2.0, они также будут использовать шейдеры и программные объекты.

Одним из наиболее распространенных вариантов использования нескольких контекстов, использующих одну и ту же группу ресурсов, будет возможность асинхронной загрузки ресурсов из другого потока во время рендеринга. Это не похоже на то, что вы делаете здесь, и не похоже, что наличие постоянного состояния контекста является проблемой для вас, так что вам лучше придерживаться одного EAGLContext и просто спрятать ссылку на него где-нибудь, где все объекты, которые могут понадобиться, смогут его увидеть. Вы сможете изменить, какие представления вы отображаете, просто связав соответствующий кадровый буфер и цветовой буфер визуализации.

Другие вопросы по тегам