繁体   English   中英

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

[英]Render problems on Android using OpenGL ES 2.0

我在Android上进行某些渲染时遇到问题。 我花了两天时间找到解决方案,但找不到相关的东西。 我将感谢任何能给我提示的人。

情况:我有一个活动 ,其中使用了两个不同的片段 在第一个片段中,我使用了两个自定义的GLSurfaceViews ,每个都有一个自定义的Renderer。 gl表面视图正在显示一些位图。 在第二个片段中,我使用一个自定义的GLSurfaceView和一个自定义的渲染器。 此视图渲染相机框架。 注意:片段之间的导航是使用切换按钮完成的(隐藏/显示片段)。 第一次,第一个活动是可见的,当按下切换按钮时,第二个片段变为可见)

问题:

用例:

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

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

我调用表面视图的onPause()和onResume()方法 ,并在离开每个片段时释放纹理以及所有缓冲区和程序。

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

预先谢谢你 如果我不太清楚,请这样说,然后我做一个草图(由于法律问题,无法放置屏幕截图)。

任何提示都可能会有所帮助,谢谢大家! :)

编辑:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM