Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you tell if a vertex attribute is enabled from within a vertex shader?

I was wondering if there was a way to tell if a vertex attribute is enabled from within a vertex shader? I know that if the vertex attribute is disabled all the values will be treated as 0.0, so I could do a test like the following:

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

But this has the obvious problem for the case that the attribute is enabled and the value is just set to 0 (it will be treated as if it's disabled)!

The other solution would be to just use a uniform variable that states whether or not to use the attribute, but I wondered if there was anything built into GLSL that would do that?

like image 610
James Bedford Avatar asked Feb 22 '12 20:02

James Bedford


2 Answers

FYI:

I know that if the vertex attribute is disabled all the values will be treated as 0.0, so I could do a test like the following:

That is not true. If an attribute is disabled, its value comes from regular OpenGL state. Namely, the state set by the glVertexAttrib functions. So it is perfectly legal to have these kinds of "constant attributes" sent to shaders.

That's why the API doesn't have a way for a shader to tell if an attribute is "disabled". A "disabled" attribute may still have meaningful data.

like image 85
Nicol Bolas Avatar answered Oct 21 '22 07:10

Nicol Bolas


No there isn't.

Pass a boolean uniform yourself to emulate it.

like image 7
Bahbar Avatar answered Oct 21 '22 05:10

Bahbar