aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/platform/n64/osys_n64.h2
-rw-r--r--backends/platform/n64/osys_n64_base.cpp20
2 files changed, 18 insertions, 4 deletions
diff --git a/backends/platform/n64/osys_n64.h b/backends/platform/n64/osys_n64.h
index ddf4fa7f0c..f7560eb4d3 100644
--- a/backends/platform/n64/osys_n64.h
+++ b/backends/platform/n64/osys_n64.h
@@ -113,6 +113,8 @@ protected:
uint16 _overlayHeight, _overlayWidth;
bool _overlayVisible;
+ bool _disableFpsLimit; // When this is enabled, the system doesn't limit screen updates
+
bool _mouseVisible;
volatile int _mouseX, _mouseY;
volatile float _tempMouseX, _tempMouseY;
diff --git a/backends/platform/n64/osys_n64_base.cpp b/backends/platform/n64/osys_n64_base.cpp
index 2ee99d2ddc..cde5208bda 100644
--- a/backends/platform/n64/osys_n64_base.cpp
+++ b/backends/platform/n64/osys_n64_base.cpp
@@ -83,6 +83,8 @@ OSystem_N64::OSystem_N64() {
// Max FPS
_maxFps = N64_NTSC_FPS;
+ _disableFpsLimit = false;
+
_overlayVisible = false;
_shakeOffset = 0;
@@ -486,11 +488,13 @@ void OSystem_N64::copyRectToScreen(const byte *buf, int pitch, int x, int y, int
void OSystem_N64::updateScreen() {
#ifdef LIMIT_FPS
static uint32 _lastScreenUpdate = 0;
- uint32 now = getMillis();
- if (now - _lastScreenUpdate < 1000 / _maxFps)
- return;
+ if (!_disableFpsLimit) {
+ uint32 now = getMillis();
+ if (now - _lastScreenUpdate < 1000 / _maxFps)
+ return;
- _lastScreenUpdate = now;
+ _lastScreenUpdate = now;
+ }
#endif
// Check if audio buffer needs refill
@@ -647,6 +651,14 @@ void OSystem_N64::hideOverlay() {
clearAllVideoBuffers();
_dirtyOffscreen = true;
+
+ // Force TWO screen updates (because of double buffered display).
+ // This way games which won't automatically update the screen
+ // when overlay is disabled, won't show a black screen. (eg. Lure)
+ _disableFpsLimit = true;
+ updateScreen();
+ updateScreen();
+ _disableFpsLimit = false;
}
void OSystem_N64::clearOverlay() {