GLSL Spec
Man I totally forgot to blog about this here.
I got really annoyed with the glsl spec. It’s full of definitions like this:
genType clamp(genType x,
genType minVal,
genType maxVal);
genType clamp(genType x,
float minVal,
float maxVal);
genDType clamp(genDType x,
genDType minVal,
genDType maxVal);
Once you know that:
genType
= float, vec2, vec3, vec4genDType
= double, dvec2, dvec3, dvec4
It is easy to read as a human, but inaccurate as a machine. The reason is that we see that when we call clamp
with two float
s we get a float
, and when given 2 vec2
s we will get a vec2
. But when trivially parsed it looks like clamp returns some generic type. This is false. Say we have some function foo(vec2)
, in glsl this is legal:
foo(clamp(vec2(1,2), vec2(2,3));
Because the return type of clamp is concrete, it’s only the spec has compressed this information for ease of reading.
This may seem like a really tedious rant, but to me it’s super important as it make it more complicated to use this data, and I havent even started on the fact that the spec is only available as inconsistantly formatted html man pages or PDF.
What I wanted was a really specification for the functions and variables in glsl. Every single overload, specified in the types of the language.
The result of this need is the glsl-spec project which has exactly what I wanted. Every function, every variable, specified using GLSL types, with GL version info, and available as s-expressions & json.
Let’s go make more things
Peace