【发布时间】:2014-06-03 11:13:04
【问题描述】:
我在 Android 上的某些渲染有问题。我花了两天时间寻找解决方案,但找不到相关的东西。我会感谢任何能给我提示的人。
情况:我有一个活动,其中我使用了两个不同的片段。在第一个片段中,我使用了两个自定义 GLSurfaceViews,每个都有一个自定义渲染器。 gl 表面视图正在显示一些位图。 在第二个片段中,我使用一个自定义 GLSurfaceView 和自定义渲染器。此视图渲染相机帧。注意:片段之间的导航是使用切换按钮完成的(隐藏/显示片段)。第一次,第一个活动是可见的,当按下切换按钮时,第二个片段变得可见)
问题:
用例:
用户进入活动,两个 GLSurfaceView 似乎可以正确渲染位图。当我按下切换按钮以转到第二个片段时,这就是出现问题的地方。 视频在 GLSurfaceView 上渲染但在其右上角不知何故显示了在第一个 Android 片段中渲染的第二张图像。它给我的印象是第一个片段中使用的第二个 SurfaceView 仍然在第二个片段中渲染(在相同的位置)注意:第一个 Android 片段中的两个 opengl 表面视图小于第二个片段中使用的那个。 当我返回到第一个片段时,我看不到在第一个 GLSurfaceView 中呈现的位图,而是看到了相机的最后一帧(已停止)。第二个图像被正确渲染(与相机帧顶部的第二个片段中出现的图像相同)。
如果活动从第二个片段开始,视频帧显示正确,然后当我切换到第一个片段时,问题再次出现。
我调用表面视图的 onPause()、onResume() 方法,并在离开每个片段时释放纹理以及所有缓冲区和程序。 p>
有没有办法在同一个 Activity 中使用多个 GLSurfaceView 和它们自己的渲染而不会出现此类问题?
谢谢提前。如果我不是很清楚,请说出来,我会做一个草图(由于法律问题不能放截图)。
任何提示可能会有所帮助,谢谢你们! :)
编辑:
我通过在片段之间导航时删除/添加 GLSurfaceViews 解决了我的问题。在 onResume 中,我将 GLSurfaceView 添加到其父级 - parent.addView(mSurface),在 onPause 中,我从其父级 - parent.removeView(mSurface) 中删除了 myGLSurfaceView。
但是......我仍然不知道为什么第一种方法不起作用。我的问题已解决,但欢迎有类似问题的其他人解释。
【问题讨论】:
-
以前有多个
GLSurfaceView实例的错误,但它被标记为已修复:code.google.com/p/android/issues/detail?id=2828。 -
是的,我看到了报告。我忘了在问题中提到它。谢谢
标签: android android-fragments rendering opengl-es-2.0 glsurfaceview