- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
虽然有很多关于在 Android 上使用 OpenGL ES 的示例,但在 EGL 的初始化/终止方面,所有这些示例似乎都不正确(即使是带有 Android SDK/NDK 的示例)。问题的根源在于 Android 应用程序模型,这使得 EGL 的正确使用很奇怪。
EGL 根据操作系统的进程 初始化的真正问题,而所有 Android 示例甚至 GLSurfaceView(实际上大多数示例只是使用它)涉及每个 Component(Activity 或 WallpaperService)的 EGL 初始化/终止。这是完全错误的,因为所有组件都在同一个进程中运行!如果应用程序只包含一个组件,则没有问题,但如果应用程序中有多个组件并且每个组件都使用 OpenGL ES,这就是一个问题。
请考虑当两个使用 OpenGL ES 的应用程序组件同时运行并且其中一个已完成的情况。完成此类组件后将调用 eglTerminate()(查看 GLSurfaceView 源代码以了解我在说什么)这将终止整个 进程的 EGL !从这一刻开始,来自另一个已经运行的组件的任何 EGL 调用都将失败!
我已经检查了大量示例,所有示例都在每个组件的基础上初始化和终止 EGL(实际上,我没有见过做与 GLSurfaceView 不同的事情,其中大部分只是 GLSurfaceView 内部)。
现在我很感兴趣的是找到一种“正确的”方法来在 Android 上使用 EGL(关于初始化/终止)。
“正确”的方式应该提供:
请注意,当没有使用 EGL/OpenGL ES 的 Activity 实体时,(2) 对于最小化应用程序对系统资源的使用至关重要。
有什么想法吗?还是我忽略了 Android 上的 EGL?
还有一个有趣的相关问题:
由于每个线程只允许有一个 Activity 的渲染上下文,因此同一时间只有一个组件可以正常使用来自主线程的 OpenGL ES。在主线程中同时运行多个使用 OpenGL ES 的组件会导致问题,因为最后一个调用 eglMakeCurrent() 的组件将隐式地用他自己的上下文“替换”所有其他组件的上下文(这实际上将完全破坏组件逻辑)。
据透露(感谢 Romain Guy)Android 实际上有一个针对 EGL 初始化/终止问题的内部解决方法文档)eglInitialize() 和 eglTerminate() 中的“引用计数”。
最佳答案
eglTerminate() 和 eglInitialize() 是引用计数的,因此每个“组件”都可以调用它们。特别是在 Android 3.0 上,在同一个应用程序中有多个 OpenGL 上下文是很常见的,EGL 也没有任何问题。
关于android - 如何在 Android 上正确初始化和终止 EGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6365366/
我已经编译了 SDL 2.0 源代码。 首先,我在控制台上推荐了 'cmake ../-G "MinGW Makefiles"。 其次,我赞扬了“制造”。但发生错误。 fatal error: EGL
我正在用 opengl 和 java/android 做一些工作。我在 C++ 中有一些代码,并且正在使用 JNI 在两者之间进行交互。我得到结果: D/App ( 2966): eglGet
我正在尝试通过指定 eglfs 平台在没有 X Server 的情况下运行 hellogl_es2 Qt 示例: ./hellogl_es2 -platform eglfs EGL Error : C
版本情况如下 CUDA版本:10.2 tensorrt版本:8.0.1.6 JetPack版本:32.6.1 deepstream版本:6.0 官网的系统版本适配图如下: 通过对比发现:我的版本是没有
我想实现一个生成图像的opengl应用程序,并通过网页查看图像。 该应用程序旨在运行在没有显示器、没有 x 窗口但具有 gpu 的 linux 服务器上。 我知道 egl 可以使用 pixmap 或
考虑到上下文句柄从 main() 传递给线程的函数,是否允许从 main() 创建 egl 上下文并从另一个线程渲染? 最佳答案 是的,肯定是。 首先,您需要在一个线程中创建一个上下文: EGL
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
我正在尝试在 Ubuntu Trusty 系统上使用 g++ 4.9.1 链接一个非常简单的 GLES2 和 EGL 程序。我正在使用台面库。 我收到 EGL 函数的链接器错误: test.cpp:(
EGL 看起来是有史以来记录最差的 Khronos 项目,我确实找不到关于这个项目的任何具体信息,但它看起来很有希望,最后有一个标准化的 GLUT/FreeGlut 替代方案。 我的观点是,假设我想要
我有一个包含两个 Activity 的 Android 项目。一个是我的主要 Activity ,使用从 native 代码更新的 GLSurfaceView。另一个是 PurchaseActivit
setPreserveEGLContextOnPause Android 函数的文档说明如下: “...如果设置为 true,那么当 GLSurfaceView 暂停时,EGL 上下文可能会被保留..
对于那些处理过 EGL(精英游戏阶梯)锦标赛和阶梯脚本的人...我在弄清楚如何为我制作的自定义模组添加新的组权限时遇到了问题。我创建了一种新型的“一般规则”模组,我想存储权限,如下所示: case "
我在少数设备上遇到以下崩溃,代码在少数设备上运行良好。我不明白是哪部分代码造成了这次崩溃。几天前它工作正常,突然间我看到了这次崩溃。谁能告诉我是什么导致了这次崩溃。请帮助我 堆栈轨迹如下: java.
看起来 EGL 将成为将“GUI 窗口”连接到图形服务器的下一个最流行的标准,我的问题是:有一个 GUI 框架,可能是在 C++ 中,它能够在EGL 的顶部? 出于不同的原因,我将 GTK、QT、Wx
目前我转换 eglGetError() 结果的函数如下所示: std::string eglErrorString(EGLint error) { switch(error) {
我在 Cloudbees 上设置了一个 Jenkins Job,我可以在那里成功地 checkout 和编译我的 Android 项目。现在我想在 android 模拟器中运行一些 JUnit 测试并
在 OpenGL ES 中,我可以使用扩展名为 GL_EXT_sRGB 的 OpenGL ES 3.0 或 OpenGL ES 2.0 创建 sRGB 渲染缓冲区。我创建了一个内部格式为 GL_SRG
任何人都可以向我解释什么是 EGL 以及它的作用吗? 我如何在 Linux 上将 EGL 与 OpenGL-ES 结合使用? EGL 是硬件和操作系统之间的一层吗? 最佳答案 EGL是独立于窗口系统的
此代码在没有抗锯齿 (samples=0) 时呈现彩色三角形。但是,当我打开抗锯齿 (samples=1...32) 时,它无法呈现任何内容。如何使其与抗锯齿一起使用?也许我无法直接从多重采样 fbo
我正在尝试对我正在解决的问题进行服务器端渲染。 EGL 提供了一种无需窗口系统即可定义 OpenGL 上下文的方法。我已经能够在笔记本电脑上使用 EGL 成功地离屏渲染,但是当我尝试在 digital
我是一名优秀的程序员,十分优秀!