直接将任何Android视图渲染到OpenGL纹理(范例)
Zas12357386
・2 分钟阅读
有两个魔术类允许你执行这个操作: Surface和SurfaceTexture,我认为它们文档都非常糟糕,文档会让你相信它们的能力非常有限,但是,实际上它们非常强大。例如SurfaceTexture状态文档: "图像流可以来自相机预览或视频解码。" 这让我觉得没有可能有其他的来源,但是,正如我在下面所述,你实际可以连接Surface到SurfaceTexture,这就开辟了很多的可能性。
这个SurfaceTexture基本上是你进入OpenGL层的入口点,它使用OpenGL纹理标识初始化,并执行所有渲染到纹理。
Surface类提供在硬件上执行视图绘图所需的抽象,它提供了画布对象(通过lockCanvas
方法),它基本上是Android视图用于绘制(视图的onDraw()
方法实际上需要一个画布)的所有内容,事实证明,Surface类在它构造函数中引入了SurfaceTexture。
这就是基本的步骤将视图渲染到opengl的步骤如下:
- 初始化OpenGL纹理
- 在OpenGL上下文中,使用texture id构造一个SurfaceTexture ,使用
SurfaceTexture.setDefaultBufferSize(int width, int height)
确保在纹理上有足够的空间来渲染视图, - 创建使用上述SurfaceTexture构造的Surface。
- 在View onDraw中,使用Surface.lockCanvas返回的画布进行视图绘制. 显然,你可以使用任何视图来实现这一点,而不仅仅是WebView ,加上画布有一系列的绘图方法,可以让你做出流畅的风格。