你能告诉我是否从顶点着色器中启用了顶点属性?

Jam*_*ord 7 opengl glsl vertex-shader vertex-attributes

我想知道是否有办法判断顶点着色器中是否启用了顶点属性?我知道如果禁用顶点属性,所有值都将被视为0.0,所以我可以进行如下测试:

if (attribute == 0)
{
    // Do something different to normal.
}
else
{
    // Use the attribute.
}
Run Code Online (Sandbox Code Playgroud)

但是,对于启用该属性并且该值仅设置为0的情况,这具有明显的问题(它将被视为已禁用)!

另一种解决方案是使用一个统一变量来说明是否使用该属性,但我想知道GLSL中是否有任何内置可以做到这一点?

Nic*_*las 16

供参考:

我知道如果禁用顶点属性,所有值都将被视为0.0,所以我可以进行如下测试:

事实并非如此.如果禁用某个属性,则其值来自常规OpenGL状态.即,由glVertexAttrib功能设置的状态.因此,将这些"常量属性"发送到着色器是完全合法的.

这就是为什么API没有办法让着色器判断属性是否被"禁用"."禁用"属性可能仍然具有有意义的数据.

  • @OP因此,您可以通过将`glVertexAttrib`设置为,将检查特定“未启用”值的解决方案改编为使用不同于0的值,该值不是否则可能发生的“真实”属性值。这个值。因此,您不需要额外的布尔值。 (2认同)

Bah*_*bar 6

不,没有.

自己传递一个布尔制服来模仿它.