OpenGL在iOS和Android上的差异
我有一个OpenGL ES应用程序,可以在iOS和Android上运行。大部分代码是很久以前由另一个人编写的,现在我必须维护它。OpenGL的使用似乎相当简单(游戏是2D的,只以简单的方式使用纹理精灵)。但我看到了iOS和Android在图形代码实现方面的两个主要区别: 1) iOS代码包含以下代码:OpenGL在iOS和Android上的差异,android,ios,opengl-es,Android,Ios,Opengl Es,我有一个OpenGL ES应用程序,可以在iOS和Android上运行。大部分代码是很久以前由另一个人编写的,现在我必须维护它。OpenGL的使用似乎相当简单(游戏是2D的,只以简单的方式使用纹理精灵)。但我看到了iOS和Android在图形代码实现方面的两个主要区别: 1) iOS代码包含以下代码: glGenFramebuffersOES(1, &m_defaultFramebuffer); glGenRenderbuffersOES(1, &m_colorR
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
),EGL将使用eglTerminate
关闭。当应用程序从睡眠状态返回时,EGL被重新初始化,纹理被重新创建
iOS代码不做这些事情。它只是通过调用[m_displayLink setPaused:YES]暂停渲染循环代码>
其他OpenGL相关代码与iOS和Android相同
这两个平台上的一切都很好,但我想全面了解正在发生的事情。有人能给我解释一下这两种差异背后的原因吗
这只是API中的一个区别。在iOS上,您可以创建自己的帧缓冲区,以便在应用程序启动时渲染。在Android上,帧缓冲区是在GLSurfaceView中自动创建的,因此应用程序不需要创建自己的帧缓冲区
(二)
在iOS上,当你的应用程序进入后台时,OpenGL上下文将被保留,这意味着当你将其返回前台时,所有的纹理和缓冲区都仍然存在。
旧版本的Android只有一个OpenGL上下文,所以只要你的应用程序进入后台,它就会被销毁(这样其他应用程序就可以使用它)。
更高版本的Android确实可以通过调用setPreserveEGLContextOnPause来选择更像iOS的操作。然而,为了实现这一点,Android版本必须是3.x或更高版本(API 11),并且设备也必须支持它。
如果不使用或不支持,应用程序必须在后台和前台之间删除并重新创建所有OpenGL资源,这就是你的应用程序所要做的。这两套代码都使用ES 1.0吗?是的,正如我所看到的:#如果定义了PLATF#IOS#包含#如果定义了PLATF#ANDROID#包含#如果这是一个很好的答案(还有一个问题)对于那些试图在IOS和Android之间移植OpenGL应用程序的人来说。