gpt4 book ai didi

android - 使用 OpenGL ES 2.0 在 Android 上呈现问题

转载 作者:行者123 更新时间:2023-11-30 02:51:49 27 4
gpt4 key购买 nike

我在 Android 上遇到一些渲染问题。我花了两天时间寻找解决方案,但找不到相关的东西。如果有人能给我提示,我将不胜感激。

情况:我在一个 Activity 中使用了两个不同的 fragment 。在第一个 fragment 中,我使用了两个自定义 GLSurfaceView,每个都有一个自定义渲染器。 gl 表面 View 显示一些位图。 在第二个 fragment 中,我使用一个自定义 GLSurfaceView 和一个自定义渲染器。此 View 渲染相机帧。注意: fragment 之间的导航是使用切换按钮(隐藏/显示 fragment )完成的。第一次,第一个activity可见,按下切换按钮时第二个fragment可见)

问题:

用例:

用户进入 Activity ,两个 GLSurfaceView 似乎正确呈现位图。当我按下切换按钮以转到第二个 fragment 时,这就是出现问题的地方。 视频在 GLSurfaceView 上呈现但在其右上角以某种方式显示在第一个 Android fragment 中呈现的第二个图像。它给我的印象是第一个 fragment 中使用的第二个 SurfaceView 仍在第二个 fragment 中呈现(在相同位置)注意:第一个 Android fragment 中的两个 opengl 表面 View 小于第二个 fragment 中使用的。 当我返回到第一个 fragment 时,我看不到在第一个 GLSurfaceView 中呈现的位图,而是看到了相机的最后一帧(已停止)。第二张图片渲染正确(与出现在相机框架顶部的第二个 fragment 中的图片相同)。

如果 Activity 从第二个 fragment 开始,视频帧会正确显示,然后当我切换到第一个 fragment 时,问题再次出现。

我调用表面 View 的 onPause()、onResume() 方法,并在离开每个 fragment 时释放纹理以及所有缓冲区和程序。 p>

有没有办法在同一个 Activity 中使用多个 GLSurfaceView 和它们自己的渲染器而不会出现此类问题?

提前

谢谢。如果我不是很清楚请说出来,我会做一个草图(由于法律问题不能放截图)。

任何提示都可以帮助,谢谢你们! :)

编辑:

我通过在 fragment 之间导航时删除/添加 GLSurfaceViews 解决了我的问题。在 onResume 中,我将 GLSurfaceView 添加到其父级 -- parent.addView(mSurface),在 onPause 中,我从其父级 -- parent.removeView(mSurface) 中删除了 myGLSurfaceView。

但是...我仍然不知道为什么第一种方法不起作用。我的问题已解决,但欢迎其他有类似问题的人提供解释。

最佳答案

Android 不容易支持在同一个应用程序中同时使用多个 GLSurfaceView。这是因为 GLSurfaceView 的每个实例都会产生自己的执行线程和 EGL 上下文,Android 上几乎不支持从多个线程或上下文调用 OpenGL ES。这样做可能是可行的,但您必须在每次调用 OpenGL ES 之前检查 EGL 上下文。这article解释得更详细。

关于android - 使用 OpenGL ES 2.0 在 Android 上呈现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24013712/

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