2016-04-15 83 views
1

我将SurfaceView添加到FrameLayout以显示视频,然后将同一个SurfaceView添加到另一个FrameLayout以显示相同的视频继续,但不显示任何错误,如下所示: enter image description hereaddView(SurfaceView)第二次不会显示

here is bad,it`s used to update video picture to the SurfaceTexture used OpenGLES

+0

如果你把错误信息的问题,作为文本这将是容易得多,而比如一个图像。堆栈跟踪显示来自com.af56.qfvr.sdk.vrlib,org.rajawali3d.renderer和com.google.vrtoolkit.cardboard调用的代码的'updateTexImage()'失败,显然是从GLSurfaceView'onDrawFrame() '方法。它看起来像SurfaceTexture期望的EGLContext不是最新的。你确定SurfaceTexture应该从GLSurfaceView渲染器线程更新吗? – fadden

回答

0

你不应该使用多面意见,也提到here

一般而言,如果可能的话,您将需要为两个视图创建单个openGL上下文,这可能是一个解决方案。

如果你不能避免多个上下文,那么你在单线程上有一个相当大的问题。只有一个上下文可以设置为每个线程的当前时间,因此对于每个操作,您都需要将正确的上下文设置为当前。因此,在每次绘制调用的开始时,必须设置上下文。看起来很简单,但如果视图已经在您可能无法控制的方法中使用openGL做了某些事情,那么这将不会起作用。但是我认为这已经为你做好了,所以你还剩下最后一个问题:除非上下文被“共享”,否则上下文可能不共享资源,缓冲区,比如纹理。要创建共享上下文,您需要将主要上下文作为上下文构造中的参数传递,这又导致您需要能够自行控制上下文。

所以请尝试以下操作:

  • 检查是否可以使用单个上下文中双方的意见
  • 检查,如果你能创建2个纹理(1为每个上下文)和交换的时候交换他们工程视图
  • 创建一个单一的面视图,并使用“视口”的方法来控制视图的哪一部分要绘制到
相关问题