OpenGL渲染架构图介绍

 

 

简要解释:

Client客户端:指的是存储在CPU中的一些代码,比如要使用OpenGL API和C/C++的代码。

Server服务端:指的是调用GPU芯片。

 

Vertex Shader:顶点着色器,管道接收Uniforms、Attributes、Texture Data(纹理数据),三个参数中,但是Texture Data(纹理数据)给顶点着色器实际上没有必要。

Fragment Shader:片元着色器。

Primitive Assembly:图元装配,也就是光栅化。这个是我们OpenGL开发人员无法干预的。

 

三种数据的介绍:

1、Attributes管道主要是接收经常发生改变的数据,比如颜色数据、顶点数据、纹理数据、光照法线等;Attributes只能传给顶点着色器里面,不能直接传递到片元着色器,需要通过GLSL代码间接传递给片元着色器。

2、Uniforms管道主要是接收比较统一,不经常发生改变的数据,比如旋转矩阵、视频的颜色空间YUV数据;Uniforms既可以传给顶点着色器也可以传递给片元着色器里面。Uniforms类似于constant(静态值)。

3、Texture Data纹理管道。

PS:纹理的用处,其一是滤镜,图片本身就是纹理,对图片做滤镜处理其实就是在读取纹理数据的时候,改变图片的纹理值,比如图片本来是彩色的,在读取纹理值是可以改变成灰度的图片。其二就是在渲染的时候使用纹理填充,在渲染一个图片的时候,比如说一个正方体,可以使用线框填充,也可以使用颜色填充,还可以使用纹理填充,纹理也可以有多张图片,比如两张图片混合之后在填充。

PS:视频解码后,就是一帧帧的图片,然后利用OpenGL ES或Metal将这些图片渲染播放出来。图片的颜色空间用的是RGB,视频的颜色空间使用的是YUV,这中间就需要将YUV数据转化为RGB数据,使用转换矩阵,这个转换矩阵就是要传给片元着色器。

 

关于客户端和服务端,可以用下面这张图方便理解:

 

由于OpenGL是基于C的API,因此它非常便携且受到广泛支持。作为C API,它与基于OC和Cocoa应用程序无缝集成。OpenGL提供应用程序用于生成2D或3D图像的函数,应用程序将渲染的图像呈现给屏幕或将它们复制回自己的内存。

OpenGL规范没有提供自己的窗口层,它依赖于OS X定义的功能来将OpenGL绘图与窗口系统集成,应用程序创建OS X。OpenGL渲染下下文并将渲染目标附加到其上(称为可绘制对象)。渲染上下文管理OpenGL状态更改和通过调用OpenGL API创建。 

 

posted @ 2021-04-21 16:04  码出境界  阅读(423)  评论(0编辑  收藏  举报