vec和vec中的含义是什么?

时间:2014-05-19 21:30:26

标签: c++ opengl glsl shader

在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);"
    "}";

1 个答案:

答案 0 :(得分:2)

在"文件"中声明inout的变量这样的范围指的是阶段输入/输出。

  1. 在顶点着色器中,声明为in的变量是顶点属性,并且由整数位置与OpenGL中的顶点属性指针匹配。

  2. 在片段着色器中,声明为in的变量应按名称匹配顶点着色器的输出(同名,但out)。

  3. 在片段着色器中,声明为out的变量是一个颜色输出,并且在您要绘制的帧缓冲区中具有相应的颜色附件。

  4. 在顶点着色器中,您有两个顶点属性(positioncolor)用于计算片段着色器中的 插值 输入(Color)。片段着色器将插值颜色写入由outColor标识的颜色缓冲区附件。

    无法从着色器代码中分辨出哪些顶点属性positioncolor以及哪些颜色缓冲区outColor与之关联。必须在链接之前通过glBindAttribLocation (...)glBindFragDataLocation (...)之类的调用在GL代码中设置这些内容。