aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--OpenAL32/alState.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/OpenAL32/alState.c b/OpenAL32/alState.c
index 3920adf0..1cb52689 100644
--- a/OpenAL32/alState.c
+++ b/OpenAL32/alState.c
@@ -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);