Set toward-zero rounding when updating in alDeferUpdatesSOFT

This commit is contained in:
Chris Robinson 2011-09-28 22:02:36 -07:00
parent 8a0e0265bc
commit 53572da7de

View File

@ -585,8 +585,19 @@ AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void)
ALboolean UpdateSources;
ALsource **src, **src_end;
ALeffectslot **slot, **slot_end;
int fpuState;
LockContext(Context);
#if defined(HAVE_FESETROUND)
fpuState = fegetround();
fesetround(FE_TOWARDZERO);
#elif defined(HAVE__CONTROLFP)
fpuState = _controlfp(0, 0);
(void)_controlfp(_RC_CHOP, _MCW_RC);
#else
(void)fpuState;
#endif
Context->DeferUpdates = AL_TRUE;
/* Make sure all pending updates are performed */
@ -619,6 +630,11 @@ AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void)
}
UnlockContext(Context);
#if defined(HAVE_FESETROUND)
fesetround(fpuState);
#elif defined(HAVE__CONTROLFP)
_controlfp(fpuState, _MCW_RC);
#endif
}
ALCcontext_DecRef(Context);