|
|
@ -3978,6 +3978,38 @@ static bool InitGraphicsDevice(int width, int height) |
|
|
|
glfwSwapInterval(1); |
|
|
|
TRACELOG(LOG_INFO, "DISPLAY: Trying to enable VSYNC"); |
|
|
|
} |
|
|
|
|
|
|
|
int fbWidth = CORE.Window.screen.width; |
|
|
|
int fbHeight = CORE.Window.screen.height; |
|
|
|
|
|
|
|
#if defined(PLATFORM_DESKTOP) |
|
|
|
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(CORE.Window.handle, &fbWidth, &fbHeight); |
|
|
|
|
|
|
|
// Screen scaling matrix is required in case desired screen area is different than display area |
|
|
|
CORE.Window.screenScale = MatrixScale((float)fbWidth/CORE.Window.screen.width, (float)fbHeight/CORE.Window.screen.height, 1.0f); |
|
|
|
|
|
|
|
// Mouse input scaling for the new screen size |
|
|
|
SetMouseScale((float)CORE.Window.screen.width/fbWidth, (float)CORE.Window.screen.height/fbHeight); |
|
|
|
#endif |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
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); |
|
|
|
|
|
|
|
#endif // PLATFORM_DESKTOP || PLATFORM_WEB |
|
|
|
|
|
|
|
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI) || defined(PLATFORM_DRM) |
|
|
@ -4377,6 +4409,19 @@ static bool InitGraphicsDevice(int width, int height) |
|
|
|
TRACELOG(LOG_WARNING, "DISPLAY: Failed to attach EGL rendering context to EGL surface"); |
|
|
|
return false; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
CORE.Window.render.width = CORE.Window.screen.width; |
|
|
|
CORE.Window.render.height = CORE.Window.screen.height; |
|
|
|
CORE.Window.currentFbo.width = CORE.Window.render.width; |
|
|
|
CORE.Window.currentFbo.height = CORE.Window.render.height; |
|
|
|
|
|
|
|
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); |
|
|
|
} |
|
|
|
#endif // PLATFORM_ANDROID || PLATFORM_RPI || PLATFORM_DRM |
|
|
|
|
|
|
|
// Load OpenGL extensions |
|
|
@ -4387,43 +4432,13 @@ static bool InitGraphicsDevice(int width, int height) |
|
|
|
rlLoadExtensions(eglGetProcAddress); |
|
|
|
#endif |
|
|
|
|
|
|
|
int fbWidth = CORE.Window.screen.width; |
|
|
|
int fbHeight = CORE.Window.screen.height; |
|
|
|
|
|
|
|
#if defined(PLATFORM_DESKTOP) |
|
|
|
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(CORE.Window.handle, &fbWidth, &fbHeight); |
|
|
|
|
|
|
|
// Screen scaling matrix is required in case desired screen area is different than display area |
|
|
|
CORE.Window.screenScale = MatrixScale((float)fbWidth/CORE.Window.screen.width, (float)fbHeight/CORE.Window.screen.height, 1.0f); |
|
|
|
|
|
|
|
// Mouse input scaling for the new screen size |
|
|
|
SetMouseScale((float)CORE.Window.screen.width/fbWidth, (float)CORE.Window.screen.height/fbHeight); |
|
|
|
#endif |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
CORE.Window.currentFbo.width = fbWidth; |
|
|
|
CORE.Window.currentFbo.height = fbHeight; |
|
|
|
CORE.Window.render.width = CORE.Window.currentFbo.width; |
|
|
|
CORE.Window.render.height = CORE.Window.currentFbo.height; |
|
|
|
|
|
|
|
// Initialize OpenGL context (states and resources) |
|
|
|
// NOTE: CORE.Window.currentFbo.width and CORE.Window.currentFbo.height not used, just stored as globals in rlgl |
|
|
|
rlglInit(CORE.Window.currentFbo.width, CORE.Window.currentFbo.height); |
|
|
|
|
|
|
|
// Setup default viewport |
|
|
|
SetupViewport(fbWidth, 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); |
|
|
|
// NOTE: It updated CORE.Window.render.width and CORE.Window.render.height |
|
|
|
SetupViewport(CORE.Window.currentFbo.width, CORE.Window.currentFbo.height); |
|
|
|
|
|
|
|
ClearBackground(RAYWHITE); // Default background color for raylib games :P |
|
|
|
|
|
|
|