c++ - in vec 和 out vec 是什么意思?

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

最佳答案

在"file"范围内声明的变量 inout 指的是阶段输入/输出。

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

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

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

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

不可能从您的着色器代码中分辨出哪些顶点属性 positioncolor 以及与什么颜色缓冲区 outColor 相关联。这些必须在链接之前通过 glBindAttribLocation (...)glBindFragDataLocation (...) 等调用在 GL 代码中设置。

关于c++ - in vec 和 out vec 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23747538/

相关文章:

c++ - 在链表前面添加新节点的问题

c++ - OpenGL 的范围问题

opengl - 用单纯形噪声替换球体的解析法线

javascript - HTML5 canvas webgl,无法绘制立方体

c++ - 如何使用_mm_extract_epi8函数?

c++ - 将 int 添加到数组,将 LSB 转换为 0 c++

c++ - 我如何获得可用于在 Linux 上的异​​步套接字上读取的字节数?

opengl - glsl 更新 2D 纹理的特定行

python - 如何测试 pygame 屏幕中的 2d 点是否是 PyOpenGL 中 3d 对象的一部分?

c++ - GLSL 点积问题