in vec和out vec是什么意思

What does in vec and out vec means?

本文关键字:vec 意思 是什么 in out      更新时间:2023-10-16

在GLSL中我不明白什么是" In "answers"out"变量,它是什么意思?以下是我从教程中复制的代码示例。

// Shader sources
const GLchar* vertexSource =
    "#version 150 coren"
    "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 coren"
    "in vec3 Color;"
    "out vec4 outColor;"
    "void main() {"
    "   outColor = vec4(Color, 1.0);"
    "}";

在"文件"作用域中声明的变量inout指的是阶段输入/输出。

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

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

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

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

这是不可能告诉什么顶点属性positioncolor和什么颜色缓冲outColor与您的着色器代码相关联。这些必须在GL代码中通过调用glBindAttribLocation (...)glBindFragDataLocation (...)在链接之前进行设置。