注:本文旨在记录笔者的学习过程,仅代表笔者个人的理解,如果有表述不准确的地方,欢迎各位指正!因为涉及到的概念来源自网络,所以如有侵权,也望告知!
前言
本文主要目的是进一步了解OpenGL ES图形管线的基础概念。
正文
1.定义
OpenGL ES 开放式图形库(OpenGL的)⽤于可视化的⼆维和三维数据。它是⼀个多功能开放标准图形库,⽀持2D和3D数字内容创建,机械和建筑设计,虚拟原型设计,⻜⾏模拟,视频游戏等应⽤程序。您可以使⽤OpenGL配置3D图形管道并向其提交数据。顶点被变换和点亮,组合成图元,并光栅化以创建2D图像。OpenGL旨在将函数调⽤转换为可以发送到底层图形硬件的图形命令。由于此底层硬件专⽤于处理图形命令,因此OpenGL绘图通常⾮常快。
OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,它消除了冗余功能,提供了⼀个既易于学习⼜更易于在移动图形硬件中实现的库。
经过多年发展,现在主要有三个版本:OpenGL ES 1.x,针对固定功能流⽔管线硬件。OpenGL ES 2.x针对可编程流⽔管线硬件。OpenGL ES 3.X,OpenGL ES 2.0的扩展。
2.图形管线
OpenGL ES的渲染图形管线如图所示,从CPU层可以输入顶点坐标、纹理坐标和纹理图像数据到GPU层,同时也可以输出参数(通常是变换矩阵)到GPU层,整个的渲染过程就是将输入数据从CPU 到 GPU中,然后再GPU各个组件模块中依次执行,到最后输出一块帧缓存数据。
从OpenGL ES 2.x开始,OpenGL ES支持可编程图形管线。当然整个管线流程中大部分组件的处理流程也还是GPU内部固定的,也是通过CPU层传入输入数据和参数到各个部件中,只有 Vertex Shader(顶点着色器)和 Fragment Shader(片元着色器)是可编程的。
3.各部件职责业务
a.顶点着色器
总结:它可以⽤于执⾏⾃定义计算,实施新的变换,照明或者传统的固定功能所不允许的基于顶点的效果。
b.图元装配
c.光栅化
d.⽚元着⾊器
总结: 它可以⽤于图⽚/视频/图形中每个像素的颜⾊填充(⽐如给视频添加滤镜,实际上就是将视频中每个图⽚的像素点颜⾊填充进⾏修改)。