我有適用於iOS和Android的OpenGL ES應用程序。大部分代碼是由另一個人在幾年前寫的,現在我必須維護它。 OpenGL的使用看起來相當簡單(遊戲是2D的,只用簡單的方式使用紋理小精靈)。但我看到的圖形代碼實現iOS和Android兩大不同點:適用於iOS和Android的OpenGL ES差異
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);
和Android的一個沒有。
2)當Android應用程序進入後臺時,所有OpenGL紋理都被破壞(glDeleteTextures
),並且使用eglTerminate
關閉EGL。當應用程序從睡眠中返回時,EGL將重新初始化並重新創建紋理。
iOS代碼不會做這些事情。它只是通過調用[m_displayLink setPaused:YES];
來暫停渲染循環其他與OpenGL相關的代碼與iOS和Android相同。
在這兩個平臺上一切正常,但我想充分理解發生了什麼。有人可以解釋我背後的這兩個差異的基本原理嗎?
這兩套使用ES 1.0的代碼? – NigelK
是我可以看到: 的#if定義PLATF_IOS 的#include #elif指令定義PLATF_ANDROID 的#include #ENDIF –
Nick