我想知道是否有办法判断是否在顶点着色器中启用了顶点属性?我知道如果禁用顶点属性,所有值都将被视为0.0,所以我可以进行如下测试:
if (attribute == 0)
{
// Do something different to normal.
}
else
{
// Use the attribute.
}
但是,对于启用该属性并且该值设置为0的情况,这会有明显的问题(它将被视为已禁用)!
另一个解决方案是使用一个统一变量来说明是否使用该属性,但我想知道GLSL中是否有内置的东西可以做到这一点?
答案 0 :(得分:15)
供参考:
我知道如果禁用顶点属性,所有值都会被视为0.0,所以我可以进行如下测试:
事实并非如此。如果禁用某个属性,则其值来自常规OpenGL状态。即,由glVertexAttrib
函数设置的状态。因此,将这些“常量属性”发送给着色器是完全合法的。
这就是为什么API没有办法让着色器判断属性是否被“禁用”。 “禁用”属性可能仍然包含有意义的数据。
答案 1 :(得分:5)
没有。
自己传递一个布尔制服来模仿它。