0

是否可以在着色器中具有相同位置的两个布局等同于两个不同类型的不同输入变量?目前,我的程序没有明确地为顶点、纹理、法线顶点数组分配任何位置。但是在我的着色器中,当我为我的顶点位置和纹理坐标选择位置 0 时,它给了我一个完美的输出。我想知道这只是巧合还是真的可以分配到同一个位置?这是我对顶点着色器中输入变量的定义:

#version 440
layout (location = 0) in vec4 VertexPosition;
layout (location = 2) in vec4 VertexNormal;
layout (location = 0) in vec2 VertexTexCoord;
4

1 回答 1

3

从技术上讲……是的,你可以。对于顶点着色器输入(并且适用于顶点着色器输入),您可以将两个变量分配给同一位置。但是,您可能不会尝试同时读取它们。您可以动态选择从哪个变量读取,但如果您的着色器采用从两个变量读取的路径,则这是未定义的行为。

该标准的相关报价是:

允许组件别名的一个例外是顶点着色器的两个输入变量(不是块成员),允许具有组件别名。此顶点变量组件别名仅用于支持每个执行路径访问的顶点着色器每个别名组件最多一个输入。

但这是愚蠢和毫无意义的。不要这样做

于 2013-08-09T00:46:59.093 回答