summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorraysan5 <[email protected]>2020-01-19 17:31:55 +0100
committerraysan5 <[email protected]>2020-01-19 17:31:55 +0100
commit42d56d2f379f2160918c18e400ea657f5c1fd364 (patch)
treea434e95b51f5d4ff79d3349b7c14273aff3d2a8a /src
parentcff38308b76458ce5114a5fc00ef9de5e2ad76ce (diff)
downloadraylib-42d56d2f379f2160918c18e400ea657f5c1fd364.tar.gz
raylib-42d56d2f379f2160918c18e400ea657f5c1fd364.zip
Added SUPPORT_HALFBUSY_WAIT_LOOP
Diffstat (limited to 'src')
-rw-r--r--src/config.h2
-rw-r--r--src/core.c13
2 files changed, 15 insertions, 0 deletions
diff --git a/src/config.h b/src/config.h
index fc250d65..17c82eef 100644
--- a/src/config.h
+++ b/src/config.h
@@ -48,6 +48,8 @@
#define SUPPORT_MOUSE_CURSOR_RPI 1
// Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
//#define SUPPORT_BUSY_WAIT_LOOP 1
+// Use a half-busy wait loop, in this case frame sleeps for some time and runs a busy-wait-loop at the end
+//#define SUPPORT_HALFBUSY_WAIT_LOOP
// Wait for events passively (sleeping while no events) instead of polling them actively every frame
//#define SUPPORT_EVENTS_WAITING 1
// Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()
diff --git a/src/core.c b/src/core.c
index 73e651e8..bf36d067 100644
--- a/src/core.c
+++ b/src/core.c
@@ -61,6 +61,9 @@
* #define SUPPORT_BUSY_WAIT_LOOP
* Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
*
+* #define SUPPORT_HALFBUSY_WAIT_LOOP
+* Use a half-busy wait loop, in this case frame sleeps for some time and runs a busy-wait-loop at the end
+*
* #define SUPPORT_EVENTS_WAITING
* Wait for events passively (sleeping while no events) instead of polling them actively every frame
*
@@ -3342,6 +3345,12 @@ static void Wait(float ms)
// Busy wait loop
while ((nextTime - prevTime) < ms/1000.0f) nextTime = GetTime();
#else
+ #if defined(SUPPORT_HALFBUSY_WAIT_LOOP)
+ #define MAX_HALFBUSY_WAIT_TIME 4
+ double destTime = GetTime() + ms/1000;
+ if (ms > MAX_HALFBUSY_WAIT_TIME) ms -= MAX_HALFBUSY_WAIT_TIME;
+ #endif
+
#if defined(_WIN32)
Sleep((unsigned int)ms);
#elif defined(__linux__) || defined(PLATFORM_WEB)
@@ -3356,6 +3365,10 @@ static void Wait(float ms)
#elif defined(__APPLE__)
usleep(ms*1000.0f);
#endif
+
+ #if defined(SUPPORT_HALFBUSY_WAIT_LOOP)
+ while (GetTime() < destTime) { }
+ #endif
#endif
}