If being careful, it's now possible to swap GlutContext with EglContext.
GlutContext doesn't have keyReleaseEvent() and many keys, but EglContext
doesn't have e.g. mouseMotionEvent().
Query depends on 3.0/EXT_transform_feedback (also PRIMITIVES_GENERATED,
even if it wasn't in the specs), only part of SampleQuery requires
3.0/NV_conditional_render, the rest is in 2.1 already.
They can be used for both floating-point (normalized) and integral
(denormalized) representation and support conversion between them.
HSV conversion is done always using floating-point types.
Getters for RGB(A) were removed from Vector3 and Vector4, they are now
part of Color3 and Color4. Because of this, Framebuffer now accepts
Color instead of Vector.
NumericType is corresponding numeric type with size at least the same as
int. It is used in debug operators for Matrix and Vector to prevent
printing chars as characters.
If the type isn't already floating-point, FloatingPointType is
corresponding larger type with sufficient size for normalization of
given integral type.
Also updated type traits for long types, they are now subclassed either
from int or long long based on sizeof(long).
It's now less confusing ("length squared" looks like it's even heavier
than length), but on the other hand it's not so obvious that these two
functions come together.
On the other hand everything of this is done at runtime, so it's less
performant than the previous version, mainly when used in loops. When
the result is declared as constexpr, it is done at compile time, just
like the previous version.
I don't know which version to keep, so there will be both until a good
decision.
It was clashing with the default "initializer-list" constructor, which
is constexpr. This constructor is also explicit, which makes it
impossible to e.g. return Vector<1, T> from function without explicitly
specifying name , while for Vector<2, T> it works:
return {1, 2}; // works for Vector<2, int>
return {1}; // doesn't work for Vector<1, int>