有没有可能在一个着色器中有两个相同位置的布局等同于两个不同类型的不同输入变量?目前,我的程序没有显式地为顶点,纹理,法线顶点数组分配任何位置,但在我的着色器中,当我为顶点位置和纹理坐标都选择了位置0时,它给了我一个完美的输出。我想知道这是否只是一个巧合,或者真的可以分配到相同的位置?下面是我在顶点着色器中定义的输入变量:
#version 440
layout (location = 0) in vec4 VertexPosition;
layout (location = 2) in vec4 VertexNormal;
layout (location = 0) in vec2 VertexTexCoord;
1条答案
按热度按时间rur96b6h1#
从技术上讲......是的,你可以。对于顶点着色器输入(* 仅 * 对于顶点着色器输入),你可以将两个变量分配到同一个位置。但是,你 * 不能 * 尝试从这两个变量中读取。你可以动态选择从哪一个读取,但是如果你的着色器采用从两个变量中读取的路径,则这是未定义的行为。
该标准的相关引用如下:
允许组件别名的一个例外是顶点着色器的两个输入变量(不是块成员),它们允许有组件别名。这种顶点变量组件别名仅用于支持顶点着色器,其中每个执行路径最多访问每个别名组件的一个输入。
但这是愚蠢和毫无意义的。* 不要这样做 *。