gpt4 book ai didi

android - TextureView 与 GLSurfaceView 或如何将 GLSurfaceView 与 EGL14 一起使用

转载 作者:IT老高 更新时间:2023-10-28 22:16:24 30 4
gpt4 key购买 nike

我对 EGL 感到困惑。

我的 GLSurfaceView 创建了一个 EGLContext。现在我创建一个共享上下文。现在我需要使用 EGLExtension。

我必须使用的方法被称为(>=API18):

EGLExt.eglPresentationTimeANDROID(android.opengl.EGLDisplay display, android.opengl.EGLSurface surface, long time);

问题是,GLSurfaceView 只创建 javax.microedition.khronos.egl.EGLContext s。

这告诉我,不要使用 GLSurfaceView。所以我尝试了 TextureView,它有点相似,不同的是你必须处理你自己的 EGL 东西。这对这个目的有好处。

但是:TextureView 比较慢,至少看起来是这样的,所以我用 Method Profiler 记录了一些图表:

这里是带有自己的 EGL 处理的 TextureView: enter image description here顶部的 Thread 是一个时钟,用于唤醒中间的 Thread,渲染到 TextureView 上。之后将调用主线程,用于重绘 TextureView。

...这里是带有自己的 EGL 处理的 GLSurfaceView这次时钟在中间,它调用顶部的 Thread 将我的图像渲染到帧缓冲区中,我将其直接交给 SurfaceView (RENDERMODE_WHEN_DIRTY) 并调用 requestRender 请求 View 进行渲染。 enter image description here

正如您已经看到的那样,使用 GLSurfaceView 看起来比使用 TextureView 更干净。

在这两个示例中,我没有在屏幕上显示任何其他内容,它们使用相同的着色器渲染完全相同的网格。

我的问题:有没有办法将 GLSurfaceView 与 EGL14 上下文一起使用?

我是不是做错了什么?

最佳答案

您可能想要做的是使用简单的 SurfaceView .

这是简短的版本:

  • SurfaceView 有两个部分,SurfaceView 中的一些假东西。 Surface 直接传递给表面合成器 (SurfaceFlinger),因此当您使用 OpenGL 在其上绘制时,开销相对较小。这使得它很快,但它也使它不能很好地与 View 层次结构一起使用,因为 Surface 位于一个层上,而基于 View 的 UI 位于另一个层上。
  • TextureView 也有两个部分,但您绘制的部分存在于幕后(这就是 SurfaceTexture 的用武之地)。帧完成后,您绘制的内容会被粘贴到 View 层上。 GPU 可以快速做到这一点,但“一些工作”总是比“没有工作”慢。
  • GLSurfaceView 是一个带有包装类的 SurfaceView,可以为您完成所有 EGL 设置和线程间消息传递。

编辑:长版可用here .

如果你可以自己进行 GL/EGL 设置和线程管理——如果你现在在 TextureView 上运行,你显然可以——那么你可能应该使用普通的 SurfaceView .

说了这么多,应该可以使您的原始代码与 GLSurfaceView 一起工作。我希望您想在与 GLSurfaceView 共享的 EGL 上下文上调用 eglPresentationTimeANDROID(),而不是从 GLSurfaceView 本身内部调用,所以它不会GLSurfaceView 在内部使用 EGL10 无关紧要。共享上下文重要的是上下文客户端版本(例如 GLES2 与 GLES3),而不是用于配置上下文的 EGL 接口(interface)版本。

您可以在 Grafika 中查看所有这些工作的示例.特别是:

  • “显示 + 捕获相机”使用 GLSurfaceView、相机和视频编码器。请注意,EGL 上下文是共享的。该示例令人费解且有些痛苦,主要是因为它故意尝试使用 GLSurfaceView 和共享的 EGL 上下文。 (更新:请注意 this issue 关于共享上下文的竞争条件。)
  • “播放视频(TextureView)”和“TextureView 中的基本 GL”展示了 TextureView 的实际应用。
  • “Record GL app with FBO”使用普通的SurfaceView

关于android - TextureView 与 GLSurfaceView 或如何将 GLSurfaceView 与 EGL14 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305651/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com