顶点着色器代码
#version 330 core
layout (location = 0) in vec3 aPos;
void main()
{
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
GLSL版本号和OpenGL的版本是匹配的,比如说GLSL 330版本对应于OpenGL 3.3,我们同样明确表示我们会使用核心模式。
使用in关键字,在顶点着色器中声明所有的输入顶点属性
layout (location = 0)设定了输入变量的位置值
顶点着色器的输出是预定义的gl_Position变量
片段着色器代码
#version 330 core
out vec4 FragColor;
void main()
{
FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}
用out关键字声明输出变量
发送方out一个变量,接收方in一个变量,当类型和名字都一样的时候,OpenGL就会把两个变量链接到一起,它们之间就能发送数据了(
Uniform
Uniform是一种从CPU中的应用向GPU中的着色器发送数据的方式
uniform是全局的,全局意味着uniform变量必须在每个着色器程序对象中都是唯一的,而且它可以被着色器程序的任意着色器在任意阶段访问.
如果你声明了一个uniform却在GLSL代码中没用过,编译器会静默移除这个变量
因为OpenGL在其核心是一个C库,所以它不支持类型重载。
类型:
int、float、double、uint和bool
容器有:向量(Vector)和矩阵(Matrix)
一个向量的分量,使用vec.x、.y、.z和.w来获取它们的第1、2、3、4个分量
通过glfwGetTime()获取运行的秒数,使用sin函数让值在0.0到1.0之间改变。