2016-07-27 60 views
2

我目前正在构建一个基于自定义标准C库的Android应用的iOS端口,该库使用了似乎是EGL, GLES,GLES2,OpenGL,Op​​enGL ES,OpenGL ES2。 不幸的是,我没有使用上述技术的经验,特别是涉及到EGL和OpenGL。我明白EGL是OpenGL ES和底层本地平台窗口系统之间的接口,iOS也已将EGL调整为EAGL以支持Cocoa的规则。如何将EGL(不是EGAL)与iOS(C&Obj-C)集成

我发现的资源主要是讨论EGL和android,但并没有提及EGL与C和iOS的集成,但很多都回到了obj-C和EAGL。

  1. 如何在iOS(obj-C)平台上的C语言中支持EGL? EGL甚至是OpenGL所必需的吗?
  2. 哪里可以从哪个来源检索EGL库?我已经读过不同的厂商提供不同的版本(不幸的是,由于未知的原因,android版本有#include,但在项目文件中找不到实际的源文件)
  3. 如果在iOS平台上不能支持EGL作为C级集成,我如何才能使EAGL适合我的用例?

下面的示例代码一些作品是我工作过,可惜很多东瀛引用的是不确定的,我试图在这里使用这个库(https://github.com/davidandreoletti/libegl),以填补国内空白,但显然有还有很多引用仍未定义,例如eglChooseConfig,eglGetDisplay,eglinitialize。

//GraphicsDisplay.h 
#include <EGL/egl.h> 
#include <GLES/gl.h> 
#include <GLES2/gl2.h> 
#include <OpenGLES/ES2/gl.h> 
#include <GLES2/gl2ext.h> 

... 

static EGLDisplay eglDisplay 
static EGLSurface eglSurface 
static EGLContext eglContext 
//GraphicsDisplay.c 
#include "GraphicsDisplay.h" 

STATUS_CODE getScreenSize(UNIT16 *width, UNIT16 *height) { 
    EGLint displayWidth; 
    EGLint displayHeight; 

    //check if there's a screen 
    if(eglDisplay == EGL_NO_DISPLAY && eglSurface == EGL_NO_SURFACE) { 
    return OK; 
    } 

    if(eglQuerySurface(eglDisplay, eglSurface, EGL_WIDTH, displayWidth) == EGL_FALSE) { 
    return FAIL; 
    } 

    *width = (UNIT16)displayWidth; 

    if(eglQuerySurface(eglDisplay, eglSurface, EGL_HEIGHT, displayHeight) == EGL_FALSE) { 
    return FAIL; 
    } 

    *height = (UNIT16)displayHeight; 

    return OK; 
} 

STATUS_CODE EGLInitialize() { 
    EGLint format; 
    EGLint numconfigs; 
    EGLConfig config; 

    EGLint attribs[] = { EGL_BLUE_SIZE, 4, EGL_GREEN_SIZE, 4, EGL_RED_SIZE, 4, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NONE }; 
    EGLint attribList[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; 

    eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 
    eglInitialize(eglDisplay, 0, 0); 

    eglChooseConfig(eglDisplay, attribs, &config, 1 &numConfigs); 
    eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &format); 

    ... etc... 
} 

任何见解,这将有助于。代码示例将是最全面和最受赞赏的。

感谢

回答

2

我认为简单的答案是“你不能” - EAGL是东瀛样功能的IOS版本,所以你必须移植到iOS上使用EAGL。

网上有很多iOS EAGL + OpenGL ES教程,可以教您如何开始使用EAGL API;这不足以保证在这里作出答案的尝试。

+1

我同意。我会补充说,GLKView教程可能是寻找的东西。这大致类似于Android的GLSurfaceView,因为它为您提供大部分安装锅炉板,并满足绝大多数用例的需求。 – Columbo