Я запускаю стандартный код OpenGL, который XCode создает для проекта OpenGL для iOS. Это устанавливает простой ViewController и использует GLKit для выполнения остальной работы.
Все функции обновления/отрисовки приложения реализованы на C++. Это кроссплатформенный.
Идет активное создание фреймбуфера. Фаза отрисовки выполняет рендеринг в несколько буферов кадров, а затем пытается вернуть его к буферу кадров по умолчанию.
glBindFramebuffer(GL_FRAMEBUFFER, 0);
Это генерирует GL_INVALID_ENUM. Только на iOS.
Я совершенно озадачен, почему. Код отлично работает на всех основных платформах, кроме iOS. Я хочу обвинить GLKit. Любые примеры установки iOS OpenGL, которые не используют GLKit?
ОБНОВИТЬ
Следующий фрагмент кода позволяет мне увидеть фреймбуфер по умолчанию, который использует GLKit. Почему-то получается "2". Конечно же, если я использую "2" во всех своих вызовах glBindFrameBuffer, это работает. Это очень расстраивает.
[view bindDrawable ];
GLint defaultFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO);
LOGI("DEFAULT FBO: %d", defaultFBO);
Какая причина может заставить GLKit не генерировать свой внутренний фреймбуфер в 0? Это семантика, которую используют все другие реализации OpenGL, 0 — это FBO по умолчанию.