mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-15 07:48:15 +00:00
core: workaround window not being rendered till moved on macOS Mojave
Apple ought to fix their OpenGL implementation, but with OpenGL now deprecated this might not happen. This has been reported upstream in GLFW in glfw/glfw#1334. The workaround comes from kovidgoyal/kitty@b82e74f99 This also fixes the HiDPI (Retina) scaling issues reported in #497, so the workaround is enabled anywhere __APPLE__ is defined.
This commit is contained in:
29
src/core.c
29
src/core.c
@@ -134,12 +134,6 @@
|
|||||||
#define CHDIR chdir
|
#define CHDIR chdir
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__linux__) || defined(PLATFORM_WEB)
|
|
||||||
#include <sys/time.h> // Required for: timespec, nanosleep(), select() - POSIX
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
#include <unistd.h> // Required for: usleep()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
#define GLFW_INCLUDE_ES2
|
#define GLFW_INCLUDE_ES2
|
||||||
@@ -155,6 +149,15 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__linux__) || defined(PLATFORM_WEB)
|
||||||
|
#include <sys/time.h> // Required for: timespec, nanosleep(), select() - POSIX
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
#include <unistd.h> // Required for: usleep()
|
||||||
|
#include <objc/message.h> // Required for: objc_msgsend(), sel_registerName()
|
||||||
|
#define GLFW_EXPOSE_NATIVE_NSGL
|
||||||
|
#include <GLFW/glfw3native.h> // Required for: glfwGetNSGLContext()
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_ANDROID)
|
#if defined(PLATFORM_ANDROID)
|
||||||
//#include <android/sensor.h> // Android sensors functions (accelerometer, gyroscope, light...)
|
//#include <android/sensor.h> // Android sensors functions (accelerometer, gyroscope, light...)
|
||||||
#include <android/window.h> // Defines AWINDOW_FLAG_FULLSCREEN and others
|
#include <android/window.h> // Defines AWINDOW_FLAG_FULLSCREEN and others
|
||||||
@@ -233,6 +236,11 @@ static bool windowReady = false; // Check if window has been init
|
|||||||
static bool windowMinimized = false; // Check if window has been minimized
|
static bool windowMinimized = false; // Check if window has been minimized
|
||||||
static const char *windowTitle = NULL; // Window text title...
|
static const char *windowTitle = NULL; // Window text title...
|
||||||
|
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
static int windowNeedsUpdating = 2; // Times the Cocoa window needs to be updated initially
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(PLATFORM_ANDROID)
|
#if defined(PLATFORM_ANDROID)
|
||||||
static struct android_app *androidApp; // Android activity
|
static struct android_app *androidApp; // Android activity
|
||||||
static struct android_poll_source *source; // Android events polling source
|
static struct android_poll_source *source; // Android events polling source
|
||||||
@@ -2870,6 +2878,15 @@ static void SwapBuffers(void)
|
|||||||
{
|
{
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
|
#if __APPLE__
|
||||||
|
// workaround for missing/erroneous initial rendering on macOS
|
||||||
|
if (windowNeedsUpdating) {
|
||||||
|
// Desugared version of Objective C: [glfwGetNSGLContext(window) update]
|
||||||
|
((id (*)(id, SEL))objc_msgSend)(glfwGetNSGLContext(window),
|
||||||
|
sel_registerName("update"));
|
||||||
|
windowNeedsUpdating--;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI) || defined(PLATFORM_UWP)
|
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI) || defined(PLATFORM_UWP)
|
||||||
|
Reference in New Issue
Block a user