The old implementation relied on the tricks that no longer seem to
optimize anything and break strict aliasing rule, which in turn is an
undefined behavior:
/var/storage/rf/proj/itgmania/src/RageTypes.h: In function ‘unsigned char FTOC(float)’:
/var/storage/rf/proj/itgmania/src/RageTypes.h:300:42: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
300 | int ret = reinterpret_cast<int&>(base);
| ^~~~
Compiler explorer summary: https://godbolt.org/z/5857747P3
It's also possible to eliminate this strict aliasing violation with a union,
while leaving all the tricky code (also included in the link above).
Online build of the test code that's suggested for FTOC: https://onlinegdb.com/O7N0Orl0r
ARM version of the code wasn't correct -- as in not passing the attached test.
It didn't perform accurately around the end of the input range.
this isn't actually a good solution, really RageVColor shouldn't be
doing this conversion at all and should be refactored/removed.
this gets gameplay running a bit smoother, much closer to holding 60fps
AMV is an actor which can have a variable number of vertices that can
each be given their own pos, color, and coords. They can be drawn using
any of the RageSpriteVertex draw functions in RageDisplay.cpp. The
vertex properties can be tweened.
To combat this, I have developed the BitmapText::textglowmode command, along with the TextGlowMode enum.
Valid values include 'TextGlowMode_Inner', 'TextGlowMode_Stroke', 'TextGlowMode_Both'.