8

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

if (attribute == 0)
{
    // Do something different to normal.
}
else
{
    // Use the attribute.
}

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

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

4

2 回答 2

18

供参考:

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

那不是真的。如果一个属性被禁用,它的值来自常规的 OpenGL 状态。即,由glVertexAttrib函数设置的状态。因此,将这些“常量属性”发送到着色器是完全合法的。

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

于 2012-02-22T22:06:47.043 回答
7

不,没有。

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

于 2012-02-22T20:42:14.783 回答