iOS OpenGL ES: когда мне следует связать буфер кадров и буфер рендеринга? - PullRequest
1 голос
/ 08 марта 2011

У меня есть некоторый код OpenGL ES, который выглядит следующим образом:

- (void)drawView {
    [EAGLContext setCurrentContext:context];

    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
    glViewport(0, 0, backingWidth, backingHeight);

    [game drawFrame];

    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
    [context presentRenderbuffer:GL_RENDERBUFFER_OES];

    [self checkGLError:NO];
}

У меня такой вопрос: когда мне следует звонить glBindFramebufferOES и glBindRenderbufferOES? Честно говоря, я не помню, почему я написал код в приведенном выше примере таким образом (это было несколько месяцев назад), и я начинаю возвращаться к OpenGL ES на iOS, и я пытаюсь понять, как работают фреймбуферы и рендербуферы.

Должен ли я вызывать эти функции каждый кадр? Или я должен вызывать их только один раз, прежде чем начнут рисоваться какие-либо кадры?

Редактировать : мне вообще нужно звонить glViewport для каждого кадра? Я настроил свой видовой экран в отдельной функции задолго до того, как draw когда-либо будет вызван - имеет ли смысл непрерывно вызывать glViewPort каждый кадр?

1 Ответ

2 голосов
/ 08 марта 2011

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

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

Аналогично, вам нужно будет использовать glBindFramebufferOES() только один раз при настройке, если вы не собираетесьпереключить FBO, которые вы отображаете, или перестроить текущий FBO из-за изменения размера представления.

В моем примере приложения я обнаружил, что glBindRenderbufferOES() необходимо использовать перед -presentRenderbuffer: в каждом кадреили ничего не отображается.Возможно, я просто что-то настраиваю в неподходящее время.

Я обойду NDA, сказав, что вы, возможно, захотите заглянуть в Xcode 4, где может быть или не быть новый инструмент в инструментах, которыеможет помочь указать на эти избыточные вызовы OpenGL ES.Гипотетически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...