在GLSL中,我不明白什么是“in”和“out”变量,这是什么意思? 以下是我从教程中复制的代码示例。
// Shader sources
const GLchar* vertexSource =
"#version 150 core\n"
"in vec2 position;"
"in vec3 color;"
"out vec3 Color;"
"void main() {"
" Color = color;"
" gl_Position = vec4(position, 0.0, 1.0);"
"}";
const GLchar* fragmentSource =
"#version 150 core\n"
"in vec3 Color;"
"out vec4 outColor;"
"void main() {"
" outColor = vec4(Color, 1.0);"
"}";
答案 0 :(得分:2)
在"文件"中声明in
和out
的变量这样的范围指的是阶段输入/输出。
在顶点着色器中,声明为in
的变量是顶点属性,并且由整数位置与OpenGL中的顶点属性指针匹配。
在片段着色器中,声明为in
的变量应按名称匹配顶点着色器的输出(同名,但out
)。
在片段着色器中,声明为out
的变量是一个颜色输出,并且在您要绘制的帧缓冲区中具有相应的颜色附件。
在顶点着色器中,您有两个顶点属性(position
和color
)用于计算片段着色器中的 插值 输入(Color
)。片段着色器将插值颜色写入由outColor
标识的颜色缓冲区附件。
无法从着色器代码中分辨出哪些顶点属性position
和color
以及哪些颜色缓冲区outColor
与之关联。必须在链接之前通过glBindAttribLocation (...)
和glBindFragDataLocation (...)
之类的调用在GL代码中设置这些内容。