【发布时间】:2014-01-21 14:16:34
【问题描述】:
我有一个适用于 iOS 和 Android 的 OpenGL ES 应用程序。大多数代码是很久以前由另一个人编写的,现在我必须维护它。 OpenGL 的使用看起来相当简单(游戏是 2D 并且以简单的方式仅使用纹理精灵)。但我发现 iOS 和 Android 的图形代码实现有两个主要区别:
1) iOS 代码包含此代码:
glGenFramebuffersOES(1, &m_defaultFramebuffer);
glGenRenderbuffersOES(1, &m_colorRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, m_defaultFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, m_colorRenderbuffer);
而安卓的则不然。
2) 当 Android 应用程序进入后台时,所有 OpenGL 纹理都将被销毁 (glDeleteTextures),并且使用 eglTerminate 关闭 EGL。当应用从睡眠状态返回时,EGL 会重新初始化并重新创建纹理。
iOS 代码不做这些事情。它只是通过调用[m_displayLink setPaused:YES];来暂停渲染循环
iOS 和 Android 的其他 OpenGL 相关代码相同。
在两个平台上一切正常,但我想全面了解正在发生的事情。谁能解释一下这两个差异背后的原因?
【问题讨论】:
-
这两套代码都使用ES 1.0吗?
-
是的,我可以看到:#if defined PLATF_IOS #include
#elif defined PLATF_ANDROID #include #endif