1. OpenGL 渲染架构
-
客户端:
OpenGL提供应⽤程序⽤于⽣成2D或3D图像的函数,开发者编写的代码,调用的OpenGL的API框架,以及OpenGL驱动.
客户端是存储在CPU存储器中的,并且在应用程序中执行,或者在主系统内存的驱动程序中执行。
-
服务端:
OpenGL规范没有提供⾃己的窗口层,计算机图形硬件厂商所提供的OpenGL的实现。我们编写的GLSL代码也是在服务端去运行的,即操作GPU。
它依赖于OS X定义的功能来将OpenGL绘图与窗⼝系统集成,应⽤程序创建OS X OpenGL 渲染上下⽂并将渲染⽬标附加到可绘制对象上,渲染上下⽂管理OpenGL状态更改和通过调用OpenGL API创建的对象。
客户端只会向服务端传递三种数据:
我们能操作和配置的只有顶点着色器和片元着色器,往这两个着色器传递数据的通道有三个:
1. 属性值(Attributes)
属性会从本地客户端内存中复制存储在图形硬件中的一个缓冲区上。这些属性只供顶点着色器使用,不能直接传递到片元着色器,通过GLSL代码间接传递给片元着色器。
这些属性对每个顶点都要做改变,属性值可以是浮点数、整数或布尔数据。主要应用是顶点的颜色数据,顶点数据,投影矩阵,模型矩阵,纹理坐标(图片的映射坐标),光照坐标,光照法线等
2. Uniform值
Uniforms值本质上跟属性一样,顶点着色器和片元着色器中都可以有Uniform变量。
我们通常设置完Uniform变量就紧接着发出渲染一个图元批次的命令。Uniform实际上可以无次数限制的使用,我们可以设置一个应用于整个表面的单个颜色值,还可以设置一个时间值,在每次渲染某种类型的顶点动画时修改它。
Uniform变量的常见的应用是在顶点渲染中设置变换矩阵,视频颜色从YUV转换为RGB的转换矩阵等。
3. 纹理数据(Texture Data)
从顶点着色器和片元着色器中都可以对纹理值进行采样和筛选。典型情况下,片元着色器对一个纹理进行采样,并在一个三角形的表面上应用图形数据,但是,纹理数据的作用并不仅仅是表现图形。
步骤:
- 1、三个值都可以通过三个通道分别传到顶点着色器中,顶点着色器处理从客户段输入的数据、应用变换、进行其他的类型的数学运算来计算关照效果、位移、颜色值等等。
- 2、顶点着色器处理完成之后,就会经过图元合成,将顶点组合在一起变成图元,然后裁剪、转换窗口坐标、进行光栅化;
- 3、接着将数据输入到片元着色器,计算片元最终颜色以及深度,然后传递到片元测试模块以及混合模块,由片元着色器输出我们将屏幕上看到的最终颜色值。
注意:
Attributes属性值是不能直接传递给片元着色器的,只能通过顶点着色器去传递。但是Uniforms和纹理数据是可以直接传递给片元着色器的。
网友评论