一、OpenGL ES 和 GLSurfaceView 基础认知
(一)OpenGL ES 简介
OpenGL ES 是 OpenGL 的子集,由 Khronos Group 开发维护,专门针对嵌入式系统,像智能手机、平板电脑和游戏控制台等进行了优化。它去除了一些复杂图元与非必要特性,留下核心功能,是移动平台支持 OpenGL 基本功能的精简规范,为开发者提供了操作图形和图片的 API。

(二)GLSurfaceView 的作用
在安卓端提到 OpenGL,GLSurfaceView 是关键。它内部分封装好了 OpenGL(EGL)环境,比起开发者自己搭建 EGL 环境,实现几个接口就能使用,简单又方便。GLSurfaceView 本质也是用于显示内容,使用上和普通 View 基本一致,但渲染工作需手动完成。
二、纹理贴图的实现步骤
(一)创建纹理
这是纹理贴图的首要步骤。创建一个纹理,为后续接收和处理图像数据做好准备。
(二)设置 Surface
根据相机框架结构来设置 Surface。具体如下:
1. 输入载体:以一个 SurfaceTexture 作为接收相机预览数据的载体,这个 SurfaceTexture 就是处理器的输入。
2. 输出接收:SurfaceView、TextureView 或者是 Surface,提供 SurfaceTexture 或者 Surface 给处理器作为输出,以此接收处理结果。
三、借助 GLSurfaceView 实现渲染
(一)GLSurfaceView 的初始化
在 xml 布局文件中使用 GLSurfaceView,示例代码如下:
<android.opengl.GLSurfaceView
...
/>
(二)利用 GLSurfaceView 的 GL 环境进行处理
处理器借助 GLSurfaceView 提供的 GL 环境,以相机数据作为输入进行处理,处理结果渲染到视图提供的输出点上,而非 GLSurfaceView 内部的 Surface 上。当然,若不想使用 GLSurfaceView,也可自己利用 EGL 来实现 GL 环境,具体实现可参照 GLSurfaceView 的源码。
四、实现滤镜实时效果示例
通过共享 texture(SurfaceTexture)可实现滤镜实时效果,包含 TextureView 预览和 GLSurfaceView 预览。具体流程如下:
|步骤|详情|
| —- | —- |
|创建纹理|创建一个纹理用于后续操作|
|设置 Surface|按相机框架结构设置,以 SurfaceTexture 接收相机预览数据,视图提供输出接收处理结果|
|处理与渲染|处理器利用 GLSurfaceView 的 GL 环境处理相机数据,将结果渲染到视图输出点|
五、注意事项
- 学习资源:如果想详细学习 OpenGL ES 的使用,推荐阅读《OpenGL ES 3.0 编程指南》。
- 替代方案:若不使用 GLSurfaceView,自己用 EGL 实现 GL 环境时,需仔细参照 GLSurfaceView 的源码进行开发。
六、总结要点
- 理解 OpenGL ES 和 GLSurfaceView 的概念和作用,是进行纹理贴图的基础。
- 掌握纹理贴图的步骤,包括创建纹理和设置 Surface。
- 学会利用 GLSurfaceView 提供的 GL 环境进行图像处理和渲染。
希望以上内容能帮助你掌握 OpenGL ES 借助 GLSurfaceView 实现纹理贴图的技术,在实际开发中运用自如😃。
原创文章,作者:,如若转载,请注明出处:https://zube.cn/archives/156