It was mainly in DimensionTraits usage. Also using DimensionTraits::*Type
for private members of physics shapes instead of manually specified
superclasses. The header is still included because of all the inline
accessors, so why not use the same type inside the class.
Some extensions are not part of any core OpenGL version (such as
EXT_direct_state_access, EXT_texture_filter_anisotropic etc.), thus they
have None for core version. Current mechanism in
Context::isExtensionSupported() is that it checks for core version first
and if that is supported, it doesn't check for the extension itself.
Until now Context::isVersionSupported(None) returned always true, which
meant that all non-core extensions were marked as supported
_everywhere_.
I don't want to ditch old Intels with GL 2.1 yet. Also now the version
reported in Context is really the highest supported version, which
optimizes extension presence checks a bit.
It seriously breaks RectangularMatrix::from() and related functions in
subclasses and I don't have better solution for that yet. Hope newer
GCCs fix this issue, because compiling with this option is a way to
unoptimized hell.
The breakage can be seen when Physics::AxisAlignedBox::applyTransformation()
is called in loop from Physics::ObjectShapeGroup::setClean() (e.g.
three AABBs in the group). Result is that the transformation doesn't get
applied at all.
I tried also these solutions without success:
* Reimplementing from() to return (const) copy, so it doesn't alias
original type (warnings suddenly disappear, but the problem persists).
* Using __attribute__((__may_alias__)) on RectangularMatrix - doesn't
help at all (even the warnings remain).
* Using __attribute__((__may_alias__)) on all vector/matrix classes -
causes compilation failure (non-matching function declarations and
definitions due to vector/matrix parameters). Also tried to add it to
all forward-declarations and typedefs, but it causes only a few more
warnings about ignored attribute.
Apparently input events can be processed during buffer swapping. Now
asserting that callback from buffer swap is not called during input
event processing (which shouldn't, as both functions should be called in
the same thread).