EAGLContext, EAGLSharegroups, RenderBuffers, FrameBuffers, о мой!
Я пытаюсь обернуть голову вокруг объектной модели OpenGL на iPhone OS. Я в настоящее время рендеринг в несколько разных UIView
s (построить на CAEAGLayer
с) на экране. В настоящее время у меня есть каждый из них, как использование отдельных EAGLContext
каждый из которых имеет цветной буфер визуализации и кадровый буфер.
Я отрисовываю похожие вещи в них, и я хотел бы разделить текстуры между этими экземплярами, чтобы сэкономить память.
Мое текущее понимание состоит в том, что я мог бы использовать ту же самую установку (некоторое количество контекстов, каждый с FBO/RBO), но если я вызову более поздние, используя EAGLShareGroup
из первого, тогда я могу просто использовать имена текстур (GLuints) из первого в более поздних. Это точно?
Если это так, я полагаю, что последующий вопрос: в чем выгода от того, что это будет "группа акций"? Могу ли я просто использовать один и тот же контекст и присоединить к этому контексту несколько FBO / RBO? Я думаю, что я борюсь со слоем абстракции группы акций, который, кажется, разделяет "объекты" (текстуры и другие именованные объекты), но не "состояние" (матрицы, включенные / отключенные состояния), которые принадлежат контексту.
Какой лучший способ думать об этом?
Спасибо за любое просвещение!
1 ответ
Это верно - когда два EAGLContext
ы созданы с тем же EAGLSharegroup
они имеют одинаковое представление буферных объектов, текстур, буферов рендеринга и кадровых буферов. Если ваши контексты используют OpenGL ES 2.0, они также будут использовать шейдеры и программные объекты.
Одним из наиболее распространенных вариантов использования нескольких контекстов, использующих одну и ту же группу ресурсов, будет возможность асинхронной загрузки ресурсов из другого потока во время рендеринга. Это не похоже на то, что вы делаете здесь, и не похоже, что наличие постоянного состояния контекста является проблемой для вас, так что вам лучше придерживаться одного EAGLContext
и просто спрятать ссылку на него где-нибудь, где все объекты, которые могут понадобиться, смогут его увидеть. Вы сможете изменить, какие представления вы отображаете, просто связав соответствующий кадровый буфер и цветовой буфер визуализации.