直接将任何Android视图渲染到OpenGL纹理(范例)

・2 分钟阅读

有两个魔术类允许你执行这个操作: Surface和SurfaceTexture,我认为它们文档都非常糟糕,文档会让你相信它们的能力非常有限,但是,实际上它们非常强大。例如SurfaceTexture状态文档: "图像流可以来自相机预览或视频解码。" 这让我觉得没有可能有其他的来源,但是,正如我在下面所述,你实际可以连接Surface到SurfaceTexture,这就开辟了很多的可能性。

这个SurfaceTexture基本上是你进入OpenGL层的入口点,它使用OpenGL纹理标识初始化,并执行所有渲染到纹理。

Surface类提供在硬件上执行视图绘图所需的抽象,它提供了画布对象(通过lockCanvas方法),它基本上是Android视图用于绘制(视图的onDraw()方法实际上需要一个画布)的所有内容,事实证明,Surface类在它构造函数中引入了SurfaceTexture。

这就是基本的步骤将视图渲染到opengl的步骤如下:

  1. 初始化OpenGL纹理
  2. 在OpenGL上下文中,使用texture id构造一个SurfaceTexture ,使用SurfaceTexture.setDefaultBufferSize(int width, int height) 确保在纹理上有足够的空间来渲染视图,
  3. 创建使用上述SurfaceTexture构造的Surface。
  4. 在View onDraw中,使用Surface.lockCanvas返回的画布进行视图绘制. 显然,你可以使用任何视图来实现这一点,而不仅仅是WebView ,加上画布有一系列的绘图方法,可以让你做出流畅的风格。
Zas12357386 profile image