我目前正在使用基于自定义标准C库构建的Android应用的iOS端口,该自定义标准C库使用的似乎是EGL,GLES,GLES2,OpenGL,Op​​enGL ES,OpenGL ES2。
不幸的是,我没有使用上述技术的经验,尤其是与EGL和OpenGL有关的技术。我了解EGL是OpenGL ES和基础本机平台窗口系统之间的接口,并且iOS已将EGL改编为EAGL以支持Cocoa的规则。

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

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

  • 以下是我正在处理的一些示例代码,不幸的是,许多EGL引用是未定义的,我试图在这里使用此库(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...
    }
    

    任何对此的见解都会有所帮助。
    代码示例将是最全面的,值得赞赏。

    谢谢

    最佳答案

    我认为简短的答案是“您不能”-EAGL是类似EGL的功能的iOS版本,因此您必须移植到在iOS上使用EAGL。

    网上有很多iOS EAGL + OpenGL ES教程,可以教您如何开始使用EAGL API;这还不够简单,无法在这里尝试答案。

    关于android - 如何将EGL(不是EGAL)与iOS(C&Obj-C)集成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38621546/

    10-13 02:53