大家好,欢迎来到听风的OpenGL日常。
写在前面
本篇我们通过OpenGL的数据流动来理解着色器,通过数据流会很清楚的看到OpenGL着色器的工作原理。所以今天要说的内容全部跟GLSL语言有关,当然这样的一篇不可能全部讲完(可能连皮毛都没有),理解着色器是如何传数据的才是我们的重点。
话不多说,一图以蔽之。
如图中,上部CPU的部分为顶点数据,其中包含顶点、颜色数据(一般情况下);下部分橙色为顶点着色器,绿色为片元着色器;gl_Position
内置变量用于顶点位置设置,gl_FlagColor
内置变量用于片元颜色设置。
着色器程序示例
顶点着色器
顶点着色器shader.vs
:
#version 330 core
layout (location=0) in vec3 position;
layout (location=1) in vec3 color;
attribute vec2 tex_coord;
varying vec2 transform_to_frag;
out vec4 vertex_color;
void main()
{
gl_Position = vec4(position, 1.0);
vertex_color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
片元着色器
片元着色器shader.frag
#version 330 core
in vec4 vertex_color;
varying vec2 transform_to_frag;
uniform sampler2D color_map;
out vec4 color;
void main()
{
color = vertex_color;
gl_FragCol