Why is our shader code so much more strict?

Why is our shader code differ from like shadertoy for example where I can do something like this:

vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2.0,4));

for example and have it compile just fine (notice the integers mixed with floats?)

Why does that work in a lot of other gl setups but ours freaks out?

This line does work with Babylonjs:


See line #20.

hmmm, ok then I guess I don’t understand when you can mix floats and ints? Do you have any insight to that?

No idea! I don’t know GLSL well enough.

You are not in fact mixing floats and ints, you are creating a vector3 of floats, so:


If you were to, say do the following:

You would get errors due to adding an int to a vector of floats.

So when passing ti to vec3 it inherently converted it to a float?
I guess then if it was a iVec3 it would cast to ints?