EAGLContext, EAGLSharegroups, RenderBuffers, FrameBuffers, о мой! - PullRequest
3 голосов
/ 02 июня 2010

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

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

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

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

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

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

1 Ответ

4 голосов
/ 03 июня 2010

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

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

...