當使用SurfaceTexture
和Camera
時,我注意到了一個有趣的錯誤。使用SurfaceTexture和相機時出現口吃(Android 4.0 ICS)
如果我設置一個SurfaceTexture
,傳遞一個有效的OpenGL
紋理並將其傳遞到Camera
,一切都很好。然後我可以用簡單的着色器替換像素着色器,並且所有工作仍然很棒。但是如果我用更復雜的着色器替換像素着色器,幀速率會下降並出現口吃。
似乎正在發生的事情是一個幀被無序處理。經過一些假設,我想知道硬件是否被髮送太多。在嘗試了許多事情之後,我發現如果我只是在大約75毫秒左右的時間內睡眠了gl處理線程,幀速率就會回升,口吃消失。
這是一個好的黑客現在,但我擔心價值只是基於我的着色器的任意猜測,它可能會改變與其他着色器或其他手機。我的問題是:是否有可能知道何時可以安全地將另一幀發送到OpenGL而不會對系統進行過度賦稅? (或者是在這裏發生的其他事情?)
我試過使用glFinish
和glFlush
,但這些都沒有幫助。我想知道是否這是因爲相機使用samplerExternalOES,並以某種方式影響它?
注意:如果我運行相同的OpenGL
代碼使用SurfaceView
而不是我沒有得到任何口吃。當然,表現並不好,所以可能是它沒有的原因。
''如果我設置了一個TextureView,傳遞一個有效的OpenGL紋理並將其傳遞給Camera'',那麼您是否可以更具體地確定您正在做什麼?如果我正確地閱讀文檔,TextureView不會將紋理作爲參數,但會爲您創建SurfaceTexture。另外改變着色器是我在文檔中找不到的東西,但TextureView看起來更像是一個'靜態'HW加速視圖。 – harism 2012-01-10 21:48:08
對。我的錯誤無處不在我說TextureView我打算說SurfaceTexture。我會更新我的問題以反映這一點。 – Grimmace 2012-01-10 21:57:43