我正在使用第三方库来渲染到Surface
上。该表面附着到SurfaceTexture:
mSurfaceTexture = new SurfaceTexture(mTextureId);
此SurfaceTexture
未附加到视图。我的假设是,因为它没有附加视图,所以它从不调用onFrameAvailable
(是的,它的监听器已设置)。为了解决这个问题,我在其GLSurfaceView
调用中有一个Renderer
和一个onDrawFrame(GL10 gl)
:
mSurfaceTexture.updateTexImage();
最后,我有一个ImageView
,它引用SurfaceTexture
的表面,调用
PixelCopy.request(mSurface,plotBitmap,listener,getHandler());
setImageBitmap(plotBitmap);
通过该管道,可以看到黑色的表面(显然),而可以看到白色或灰色的imageview
,具体取决于我在GLSurfaceView
中单击和拖动的方式(对此一无所知)。
因此,我希望能够看到SurfaceTexture
中的内容。我发现我必须将TextureView
添加到视图层次结构中,并将其SurfaceTexture
设置为上述内容:
mTextureView.setSurfaceTexture(mSurfaceTexture);
然而,令人困惑的是,TextureView
本身并不显示任何内容(它是一个白色正方形),它仅允许ImageView
的{{1}}请求显示什么被渲染到表面。有人知道为什么吗?关于消费者和生产者使用不同的GLThreads的一些信息?
旁注:PixelCopy
在没有实例化onFrameAvailable
时被调用,但是在存在TextureView
时不被调用。