diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c86cc0e79..a8d8635f2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -73,6 +73,10 @@ if(${PLATFORM} MATCHES "Desktop") find_library(OPENGL_LIBRARY OpenGL) set(LIBS_PRIVATE ${OPENGL_LIBRARY}) link_libraries("${LIBS_PRIVATE}") + if (NOT CMAKE_SYSTEM STRLESS "Darwin-18.0.0") + add_definitions(-DGL_SILENCE_DEPRECATION) + MESSAGE(AUTHOR_WARNING "OpenGL is deprecated starting with macOS 10.14 (Mojave)!") + endif() elseif(WIN32) add_definitions(-D_CRT_SECURE_NO_WARNINGS) else() diff --git a/src/core.c b/src/core.c index 203da4d9b..558cc854e 100644 --- a/src/core.c +++ b/src/core.c @@ -134,12 +134,6 @@ #define CHDIR chdir #endif -#if defined(__linux__) || defined(PLATFORM_WEB) - #include // Required for: timespec, nanosleep(), select() - POSIX -#elif defined(__APPLE__) - #include // Required for: usleep() -#endif - #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) #if defined(PLATFORM_WEB) #define GLFW_INCLUDE_ES2 @@ -155,6 +149,15 @@ #endif #endif +#if defined(__linux__) || defined(PLATFORM_WEB) + #include // Required for: timespec, nanosleep(), select() - POSIX +#elif defined(__APPLE__) + #include // Required for: usleep() + #include // Required for: objc_msgsend(), sel_registerName() + #define GLFW_EXPOSE_NATIVE_NSGL + #include // Required for: glfwGetNSGLContext() +#endif + #if defined(PLATFORM_ANDROID) //#include // Android sensors functions (accelerometer, gyroscope, light...) #include // 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 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) static struct android_app *androidApp; // Android activity 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) 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 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI) || defined(PLATFORM_UWP) diff --git a/src/raylib.h b/src/raylib.h index 17c4234e3..20a3ca267 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -354,11 +354,11 @@ //---------------------------------------------------------------------------------- // Structures Definition //---------------------------------------------------------------------------------- -#ifndef __cplusplus // Boolean type - #ifndef bool - typedef enum { false, true } bool; - #endif +#if defined(__STDC__) && __STDC_VERSION__ >= 199901L + #include +#elif !defined(__cplusplus) && !defined(bool) + typedef enum { false, true } bool; #endif // Vector2 type