在 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);"
"}";
最佳答案
在"file"范围内声明的变量 in
和 out
指的是阶段输入/输出。
在顶点着色器中,
in
中声明的变量是顶点属性,并通过整数位置与 OpenGL 中的顶点属性指针匹配。在片段着色器中,声明为
in
的变量的名称应与顶点着色器的输出匹配(名称相同,但out
)。在片段着色器中,声明为
out
的变量是颜色输出,并且在您要绘制到的帧缓冲区中具有相应的颜色附件。
在您的顶点着色器中,您有两个顶点属性(position
和 color
)用于计算插值 在片段着色器中输入(颜色
)。片段着色器将插值 颜色写入由outColor
标识的颜色缓冲区附件。
不可能从您的着色器代码中分辨出哪些顶点属性 position
和 color
以及与什么颜色缓冲区 outColor
相关联。这些必须在链接之前通过 glBindAttribLocation (...)
和 glBindFragDataLocation (...)
等调用在 GL 代码中设置。
关于c++ - in vec 和 out vec 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23747538/