|
@@ -1236,6 +1236,8 @@ int InitPlatform(void)
|
|
|
int result = glfwInit();
|
|
|
if (result == GLFW_FALSE) { TRACELOG(LOG_WARNING, "GLFW: Failed to initialize GLFW"); return -1; }
|
|
|
|
|
|
+ // Initialize graphic device: display/window and graphic context
|
|
|
+ //----------------------------------------------------------------------------
|
|
|
glfwDefaultWindowHints(); // Set default windows hints
|
|
|
//glfwWindowHint(GLFW_RED_BITS, 8); // Framebuffer red color component bits
|
|
|
//glfwWindowHint(GLFW_GREEN_BITS, 8); // Framebuffer green color component bits
|
|
@@ -1450,60 +1452,73 @@ int InitPlatform(void)
|
|
|
}
|
|
|
|
|
|
glfwMakeContextCurrent(platform.handle);
|
|
|
- glfwSwapInterval(0); // No V-Sync by default
|
|
|
-
|
|
|
- // Try to enable GPU V-Sync, so frames are limited to screen refresh rate (60Hz -> 60 FPS)
|
|
|
- // NOTE: V-Sync can be enabled by graphic driver configuration, it doesn't need
|
|
|
- // to be activated on web platforms since VSync is enforced there.
|
|
|
- if (CORE.Window.flags & FLAG_VSYNC_HINT)
|
|
|
+ result = glfwGetError(NULL);
|
|
|
+
|
|
|
+ // Check context activation
|
|
|
+ if ((result != GLFW_NO_WINDOW_CONTEXT) && (result != GLFW_PLATFORM_ERROR))
|
|
|
{
|
|
|
- // WARNING: It seems to hit a critical render path in Intel HD Graphics
|
|
|
- glfwSwapInterval(1);
|
|
|
- TRACELOG(LOG_INFO, "DISPLAY: Trying to enable VSYNC");
|
|
|
- }
|
|
|
+ CORE.Window.ready = true;
|
|
|
|
|
|
- int fbWidth = CORE.Window.screen.width;
|
|
|
- int fbHeight = CORE.Window.screen.height;
|
|
|
+ glfwSwapInterval(0); // No V-Sync by default
|
|
|
|
|
|
- if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
|
|
|
- {
|
|
|
- // NOTE: On APPLE platforms system should manage window/input scaling and also framebuffer scaling.
|
|
|
- // Framebuffer scaling should be activated with: glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_TRUE);
|
|
|
-#if !defined(__APPLE__)
|
|
|
- glfwGetFramebufferSize(platform.handle, &fbWidth, &fbHeight);
|
|
|
+ // Try to enable GPU V-Sync, so frames are limited to screen refresh rate (60Hz -> 60 FPS)
|
|
|
+ // NOTE: V-Sync can be enabled by graphic driver configuration, it doesn't need
|
|
|
+ // to be activated on web platforms since VSync is enforced there.
|
|
|
+ if (CORE.Window.flags & FLAG_VSYNC_HINT)
|
|
|
+ {
|
|
|
+ // WARNING: It seems to hit a critical render path in Intel HD Graphics
|
|
|
+ glfwSwapInterval(1);
|
|
|
+ TRACELOG(LOG_INFO, "DISPLAY: Trying to enable VSYNC");
|
|
|
+ }
|
|
|
|
|
|
- // Screen scaling matrix is required in case desired screen area is different from display area
|
|
|
- CORE.Window.screenScale = MatrixScale((float)fbWidth/CORE.Window.screen.width, (float)fbHeight/CORE.Window.screen.height, 1.0f);
|
|
|
+ int fbWidth = CORE.Window.screen.width;
|
|
|
+ int fbHeight = CORE.Window.screen.height;
|
|
|
|
|
|
- // Mouse input scaling for the new screen size
|
|
|
- SetMouseScale((float)CORE.Window.screen.width/fbWidth, (float)CORE.Window.screen.height/fbHeight);
|
|
|
-#endif
|
|
|
- }
|
|
|
+ if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
|
|
|
+ {
|
|
|
+ // NOTE: On APPLE platforms system should manage window/input scaling and also framebuffer scaling.
|
|
|
+ // Framebuffer scaling should be activated with: glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_TRUE);
|
|
|
+ #if !defined(__APPLE__)
|
|
|
+ glfwGetFramebufferSize(platform.handle, &fbWidth, &fbHeight);
|
|
|
|
|
|
- CORE.Window.render.width = fbWidth;
|
|
|
- CORE.Window.render.height = fbHeight;
|
|
|
- CORE.Window.currentFbo.width = fbWidth;
|
|
|
- CORE.Window.currentFbo.height = fbHeight;
|
|
|
+ // Screen scaling matrix is required in case desired screen area is different from display area
|
|
|
+ CORE.Window.screenScale = MatrixScale((float)fbWidth/CORE.Window.screen.width, (float)fbHeight/CORE.Window.screen.height, 1.0f);
|
|
|
|
|
|
- TRACELOG(LOG_INFO, "DISPLAY: Device initialized successfully");
|
|
|
- TRACELOG(LOG_INFO, " > Display size: %i x %i", CORE.Window.display.width, CORE.Window.display.height);
|
|
|
- TRACELOG(LOG_INFO, " > Screen size: %i x %i", CORE.Window.screen.width, CORE.Window.screen.height);
|
|
|
- TRACELOG(LOG_INFO, " > Render size: %i x %i", CORE.Window.render.width, CORE.Window.render.height);
|
|
|
- TRACELOG(LOG_INFO, " > Viewport offsets: %i, %i", CORE.Window.renderOffset.x, CORE.Window.renderOffset.y);
|
|
|
+ // Mouse input scaling for the new screen size
|
|
|
+ SetMouseScale((float)CORE.Window.screen.width/fbWidth, (float)CORE.Window.screen.height/fbHeight);
|
|
|
+ #endif
|
|
|
+ }
|
|
|
|
|
|
- // Load OpenGL extensions
|
|
|
- // NOTE: GL procedures address loader is required to load extensions
|
|
|
- rlLoadExtensions(glfwGetProcAddress);
|
|
|
+ CORE.Window.render.width = fbWidth;
|
|
|
+ CORE.Window.render.height = fbHeight;
|
|
|
+ CORE.Window.currentFbo.width = fbWidth;
|
|
|
+ CORE.Window.currentFbo.height = fbHeight;
|
|
|
+
|
|
|
+ TRACELOG(LOG_INFO, "DISPLAY: Device initialized successfully");
|
|
|
+ TRACELOG(LOG_INFO, " > Display size: %i x %i", CORE.Window.display.width, CORE.Window.display.height);
|
|
|
+ TRACELOG(LOG_INFO, " > Screen size: %i x %i", CORE.Window.screen.width, CORE.Window.screen.height);
|
|
|
+ TRACELOG(LOG_INFO, " > Render size: %i x %i", CORE.Window.render.width, CORE.Window.render.height);
|
|
|
+ TRACELOG(LOG_INFO, " > Viewport offsets: %i, %i", CORE.Window.renderOffset.x, CORE.Window.renderOffset.y);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TRACELOG(LOG_FATAL, "PLATFORM: Failed to initialize graphics device");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
if ((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) > 0) MinimizeWindow();
|
|
|
|
|
|
- CORE.Window.ready = true; // TODO: Proper validation on windows/context creation
|
|
|
-
|
|
|
// If graphic device is no properly initialized, we end program
|
|
|
if (!CORE.Window.ready) { TRACELOG(LOG_FATAL, "PLATFORM: Failed to initialize graphic device"); return -1; }
|
|
|
else SetWindowPosition(GetMonitorWidth(GetCurrentMonitor())/2 - CORE.Window.screen.width/2, GetMonitorHeight(GetCurrentMonitor())/2 - CORE.Window.screen.height/2);
|
|
|
|
|
|
+ // Load OpenGL extensions
|
|
|
+ // NOTE: GL procedures address loader is required to load extensions
|
|
|
+ rlLoadExtensions(glfwGetProcAddress);
|
|
|
+ //----------------------------------------------------------------------------
|
|
|
|
|
|
+ // Initialize input events callbacks
|
|
|
+ //----------------------------------------------------------------------------
|
|
|
// Set window callback events
|
|
|
glfwSetWindowSizeCallback(platform.handle, WindowSizeCallback); // NOTE: Resizing not allowed by default!
|
|
|
glfwSetWindowMaximizeCallback(platform.handle, WindowMaximizeCallback);
|
|
@@ -1521,12 +1536,19 @@ int InitPlatform(void)
|
|
|
glfwSetJoystickCallback(JoystickCallback);
|
|
|
|
|
|
glfwSetInputMode(platform.handle, GLFW_LOCK_KEY_MODS, GLFW_TRUE); // Enable lock keys modifiers (CAPS, NUM)
|
|
|
+ //----------------------------------------------------------------------------
|
|
|
|
|
|
- // Initialize hi-res timer
|
|
|
+ // Initialize timming system
|
|
|
+ //----------------------------------------------------------------------------
|
|
|
InitTimer();
|
|
|
-
|
|
|
- // Initialize base path for storage
|
|
|
+ //----------------------------------------------------------------------------
|
|
|
+
|
|
|
+ // Initialize storage system
|
|
|
+ //----------------------------------------------------------------------------
|
|
|
CORE.Storage.basePath = GetWorkingDirectory();
|
|
|
+ //----------------------------------------------------------------------------
|
|
|
+
|
|
|
+ TRACELOG(LOG_INFO, "PLATFORM: DESKTOP (GLFW): Initialized successfully");
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -1542,7 +1564,6 @@ void ClosePlatform(void)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-
|
|
|
// GLFW3 Error Callback, runs on GLFW3 error
|
|
|
static void ErrorCallback(int error, const char *description)
|
|
|
{
|