• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

android - 如何将 EGL(不是 EGAL)与 iOS(C 和 Obj-C)集成

[复制链接]
菜鸟教程小白 发表于 2022-12-12 21:27:57 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我目前正在开发基于自定义标准 C 库构建的 Android 应用的 iOS 端口,该库使用 EGL、GLES、GLES2、OpenGL、OpenGL ES、OpenGL ES2。 不幸的是,我没有使用上述技术的经验,尤其是与 EGL 和 OpenGL 有关的技术。我知道 EGL 是 OpenGL ES 和底层原生平台窗口系统之间的接口(interface),iOS 已经将 EGL 适配到 EAGL 中以支持 Cocoa 的规则。

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

  1. 如何在 iOS (obj-C) 平台上支持 C 语言中的 EGL? OpenGL 甚至需要 EGL 吗?
  2. 我可以从哪里/哪个来源检索 EGL 库?我读过不同的供应商提供不同的版本(不幸的是,由于未知原因,android版本有#include但在项目文件中没有找到实际的源文件)
  3. 如果在 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...
}

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

谢谢



Best Answer-推荐答案


我认为简短的回答是“你不能” - 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap