2016-04-15 112 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爲每個上下文)和交換的時候交換他們工程視圖
  • 創建一個單一的面視圖,並使用「視口」的方法來控制視圖的哪一部分要繪製到
相關問題