- uniform 变量
uniform变量是全局变量,用于从CPU向GPU发送数据
int vertexColorLocation = glGetUniformLocation(shaderProgram, "uniformColor");
glUseProgram(shaderProgram);
glUniform4f(vertexColorLocation, 0.0f, 0.0f, 0.0f, 1.0f);
#version 330 core
out vec4 FragColor;
uniform vec4 uniformColor;
void main()
{
FragColor = uniformColor;
}
- 着色器in/out变量
顶点着色器可以接收外界顶点、色彩和纹理数据,也可以向片元着色器发送数据;片元着色器必须输出vec4类型的片元颜色,可以接收来自顶点着色器的数据。
float vertices[] = {
0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f,
-0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f
};
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3* sizeof(float)));
glEnableVertexAttribArray(1);
#顶点着色器
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
out vec3 ourColor;
void main()
{
gl_Position = vec4(aPos, 1.0);
ourColor = aColor;
}
#片元着色器
#version 330 core
out vec4 FragColor;
in vec3 ourColor;
void main()
{
FragColor = vec4(ourColor, 1.0);
}
