分类
tech

OpenGL 03 Data between shader stages

Description

使用 interface block 在 shader 的不同 stage 之间传递数据

Notes

vertex fetching

在 vertex shader 运行之前的一个 fixed-function stage
它会向 vertex shader 提供输入参数
这些变量就是 vertex attributes

storage qualifiers

在 OpenGL 中,我们使用 inout 关键字,在声明变量时修饰存储类型
shader 中所有用 out 声明的变量,就会被发送到下一个 stage 中用 in 声明的同样变量名的变量中

Interface Bolocks

当需要在 shader stage 间传递的变量很多的时候,我们可以用 interface block 来打组,写法和 c 的 struct 很类似

glVertexAttrib

第 1 个参数 index 用于指定 attribute 的编号
第 2 个参数 v 是属性数据本身
每一次调用该函数,它都会向 OpenGL 更新 vertex attribute 数据

layout qualifier

用于在 vertex shader 中给 in 变量指定 vertex attribute 的编号

  • Application:glVertexAttrib4fv(0, data);
  • Vertex Shader:layout (location = 0 ) in vec4 offset;

这里后者的 location 就是前者的第1个参数 index

Project structure

Codes

makefile

03_data-between-shader-stages.cpp

03_data-between-shader-stages.vert

03_data-between-shader-stages.frag