为什么需要TextureView才能通过PixelCopy.request显示SurfaceTexture

时间:2019-01-16 18:06:55

标签: android opengl-es glsurfaceview textureview android-pixel-copy

我正在使用第三方库来渲染到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时不被调用。

0 个答案:

没有答案