2、网课系列 | OpenGL图形管道、Shader

shader 是显卡驱动上的一个小程序,比如intel驱动、
在这里插入图片描述
GPU 内部有4个shaders,如下图:
在这里插入图片描述
注意,并不是所有的data都做相同处理,不同的shader接收不同数据
在这里插入图片描述
只要数据从CPU通过 OpenGL送到了GPU上,数据就立即被OpenGL的图形管道处理,图形管道的处理分6步:
1、Per-Vertex Operation
每一个vertex都通过空间矩阵表进行转换,高效的把3D坐标转成别的坐标,在这里插入图片描述

2、Primitive Assembly
通过一种特定的规则来连接vertex,进而构建出一个primitive type
在这里插入图片描述
3、Primitive Processing
对原生的类型进行处理,一般生成原生类型后,要通过剪辑(clipping),把三角形外面部分全部剪掉,让下一阶段不对其处理。
4、Rasterization
最终,屏幕上看到的是类似原生三角形的像素,这种产生类似三角形像素的过程就是rasterization,这个过程中,会检查像素是否在原生周长里面(三角形),不是就discard。
在这里插入图片描述
我们把通过测试的像素叫做fragment。
5、Fragment Processing
一个fragment就是类似原生形状的一系列像素点,当fragment离开光栅化阶段,就会送到per-fragment阶段,并且在这个阶段中,fragment是被fragment shader 处理的。
而fragment shader的作用就是,把颜色、纹理数据应用到fragment的像素上。
在这里插入图片描述

6、Per-Fragment Operation
最后,fragment提交到测试阶段,
Pixel Ownership test
Scissor test
Alpha test
Stencil test
Depth test
在经过测试后,也就是OpenGL图形管道的终点,这些像素被存到了FrameBuffer(Default),也就是你在屏幕上看到的最终像素样子。

猜你喜欢

转载自blog.csdn.net/weixin_42557786/article/details/107529636
今日推荐