#四丶着色器

顶点着色器(Vertex Shader)

顶点着色器的功能是根据输入的顶点数据和Uniform数据(如果有),来填写当前顶点 内置的输出变量 ,并将一些有用数据传递给下一阶段。

一个核心的顶点着色器模板如下:
layout(location = 0) in vec2 position;

out gl_PerVertex {
vec4 gl_Position;
};

void main(){
gl_Position = vec4(position,0.0f,1.0f);
}

  • layout(location = 0) 代表了值对应流水线创建时顶点输入布局中 索引为0 的顶点属性
  • in 代表是输入变量
  • vec2表示该变量类型是二维向量,它需要与顶点输入布局中的格式(Float2)对应
  • position是输入变量的名称,它可以是任意的
  • out gl_PerVertex { vec4 gl_Position; }; 是顶点着色器中固定输出定义
  • gl_Position = vec4(position,0.0f,1.0f);就是根据输入的顶点位置,填充顶点着色器实际的顶点数据输出

片段着色器(Fragment Shader)

片段着色器的功能是根据前一阶段的输入数据和Uniform数据(如果有),写入到渲染目标的颜色附件上。

一个核心的片段着色器模板如下:
layout(location = 0) out vec4 fragColor;
void main(){
fragColor = vec4(1,1,1,1);
}

  • layout(location = 0) out 表明该片段将输出到 渲染目标 索引为0的颜色附件 上,一个渲染目标往往至少包含一个颜色附件,交换链的渲染目标上就只有一个四通道的颜色附件 。
  • vec4代表着颜色附件具有四个颜色通道,例如RGBA8888
  • fragColor 是输出变量的名称,它可以是任意的
  • fragColor = vec4(1,1,1,1)说明了最终的片段为不透明的白色(R=1,G=1,B=1,A=1)