Haptic: Explicitly avoid floating point arithmetic if it's not needed.
Thanks, Elias! Partially fixes Bugzilla #2686.main
parent
1db581b4ca
commit
a2622ce6e0
|
@ -658,7 +658,6 @@ static int
|
|||
SDL_SYS_ToDirection(Uint16 *dest, SDL_HapticDirection * src)
|
||||
{
|
||||
Uint32 tmp;
|
||||
float f; /* Ideally we'd use fixed point math instead of floats... */
|
||||
|
||||
switch (src->type) {
|
||||
case SDL_HAPTIC_POLAR:
|
||||
|
@ -690,7 +689,12 @@ SDL_SYS_ToDirection(Uint16 *dest, SDL_HapticDirection * src)
|
|||
break;
|
||||
|
||||
case SDL_HAPTIC_CARTESIAN:
|
||||
f = atan2(src->dir[1], src->dir[0]);
|
||||
if (!src->dir[1])
|
||||
*dest = (src->dir[0] >= 0 ? 0x4000 : 0xC000);
|
||||
else if (!src->dir[0])
|
||||
*dest = (src->dir[1] >= 0 ? 0x8000 : 0);
|
||||
else {
|
||||
float f = atan2(src->dir[1], src->dir[0]); /* Ideally we'd use fixed point math instead of floats... */
|
||||
/*
|
||||
atan2 takes the parameters: Y-axis-value and X-axis-value (in that order)
|
||||
- Y-axis-value is the second coordinate (from center to SOUTH)
|
||||
|
@ -702,8 +706,9 @@ SDL_SYS_ToDirection(Uint16 *dest, SDL_HapticDirection * src)
|
|||
--> finally convert to [0,0xFFFF] as in case SDL_HAPTIC_POLAR.
|
||||
*/
|
||||
tmp = (((Sint32) (f * 18000. / M_PI)) + 45000) % 36000;
|
||||
tmp = (tmp * 0x8000) / 18000; /* convert to range [0,0xFFFF] */
|
||||
*dest = (Uint16) tmp;
|
||||
tmp = (tmp * 0x8000) / 18000; /* convert to range [0,0xFFFF] */
|
||||
*dest = (Uint16) tmp;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue