我目前正在开发基于自定义标准C库的Android应用程序的iOS端口,该库使用看似EGL,GLES,GLES2,OpenGL,OpenGL ES,OpenGL ES2的内容。 不幸的是,我没有使用上述技术的经验,尤其是与EGL和OpenGL有关的技术。据我所知,EGL是OpenGL ES与底层本机平台窗口系统之间的接口,iOS已将EGL改编为EAGL以支持Cocoa的规则。
我发现的资源主要是讨论EGL和android,但没有特别提及EGL与C和iOS的集成,但很多内容都回到了obj-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...
}
对此的任何见解都会有所帮助 代码示例将是最全面和最受欢迎的。
由于
答案 0 :(得分:2)
我认为简短的回答是&#34;你不能&#34; - EAGL是类似EGL功能的iOS版本,因此您必须移植到iOS上使用EAGL。
网上有很多iOS EAGL + OpenGL ES教程,可以教你如何开始使用EAGL API;它不够简单,无法在这里尝试答案。