Browse Source

Review InitWindow() to avoid void pointer

Reviewed for PLATFORM_ANDROID and PLATFORM_UWP
raysan5 7 years ago
parent
commit
bbdf9f4880
2 changed files with 101 additions and 111 deletions
  1. 100 110
      src/core.c
  2. 1 1
      src/raylib.h

+ 100 - 110
src/core.c

@@ -238,9 +238,10 @@ static GLFWwindow *window;                      // Native window (graphic device
 
 
 static bool windowReady = false;                // Check if window has been initialized successfully
 static bool windowReady = false;                // Check if window has been initialized successfully
 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...
 
 
 #if defined(PLATFORM_ANDROID)
 #if defined(PLATFORM_ANDROID)
-static struct android_app *app;                 // 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
 static int ident, events;                       // Android ALooper_pollAll() variables
 static int ident, events;                       // Android ALooper_pollAll() variables
 static const char *internalDataPath;            // Android internal data path to write data (/data/data/<package>/files)
 static const char *internalDataPath;            // Android internal data path to write data (/data/data/<package>/files)
@@ -283,10 +284,10 @@ static bool windowShouldClose = false;  // Flag to set window for closing
 #endif
 #endif
 
 
 #if defined(PLATFORM_UWP)
 #if defined(PLATFORM_UWP)
-static EGLNativeWindowType uwpWindow;
+extern EGLNativeWindowType uwpWindow;   // Native EGL window handler for UWP (external, defined in UWP App)
 #endif
 #endif
 
 
-// Display size-related data
+// Screen related variables
 static unsigned int displayWidth, displayHeight; // Display width and height (monitor, device-screen, LCD, ...)
 static unsigned int displayWidth, displayHeight; // Display width and height (monitor, device-screen, LCD, ...)
 static int screenWidth, screenHeight;       // Screen width and height (used render area)
 static int screenWidth, screenHeight;       // Screen width and height (used render area)
 static int renderWidth, renderHeight;       // Framebuffer width and height (render area, including black bars if required)
 static int renderWidth, renderHeight;       // Framebuffer width and height (render area, including black bars if required)
@@ -294,11 +295,11 @@ static int renderOffsetX = 0;               // Offset X from render area (must b
 static int renderOffsetY = 0;               // Offset Y from render area (must be divided by 2)
 static int renderOffsetY = 0;               // Offset Y from render area (must be divided by 2)
 static bool fullscreen = false;             // Fullscreen mode (useful only for PLATFORM_DESKTOP)
 static bool fullscreen = false;             // Fullscreen mode (useful only for PLATFORM_DESKTOP)
 static Matrix downscaleView;                // Matrix to downscale view (in case screen size bigger than display size)
 static Matrix downscaleView;                // Matrix to downscale view (in case screen size bigger than display size)
+
 static bool cursorHidden = false;           // Track if cursor is hidden
 static bool cursorHidden = false;           // Track if cursor is hidden
 static bool cursorOnScreen = false;         // Tracks if cursor is inside client area
 static bool cursorOnScreen = false;         // Tracks if cursor is inside client area
 
 
 #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB) || defined(PLATFORM_UWP)
 #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB) || defined(PLATFORM_UWP)
-static const char *windowTitle = NULL;      // Window text title...
 static int screenshotCounter = 0;           // Screenshots counter
 static int screenshotCounter = 0;           // Screenshots counter
 
 
 // Register mouse states
 // Register mouse states
@@ -416,7 +417,7 @@ static void *GamepadThread(void *arg);                  // Mouse reading thread
 #endif
 #endif
 
 
 #if defined(PLATFORM_UWP)
 #if defined(PLATFORM_UWP)
-// Define functions required to manage inputs
+// TODO: Define functions required to manage inputs
 #endif
 #endif
 
 
 #if defined(_WIN32)
 #if defined(_WIN32)
@@ -427,21 +428,89 @@ static void *GamepadThread(void *arg);                  // Mouse reading thread
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Module Functions Definition - Window and OpenGL Context Functions
 // Module Functions Definition - Window and OpenGL Context Functions
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
-#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB) || defined(PLATFORM_UWP)
+
+#if defined(PLATFORM_ANDROID)
+// To allow easier porting to android, we allow the user to define a 
+// main function which we call from android_main, defined by ourselves
+extern int main(int argc, char *argv[]);
+
+void android_main(struct android_app *app)
+{
+    char arg0[] = "raylib";     // NOTE: argv[] are mutable
+    androidApp = app;
+
+    // TODO: Should we maybe report != 0 return codes somewhere?
+    (void)main(1, (char*[]) { arg0, NULL });
+}
+
+// TODO: Add this to header (if apps really need it)
+struct android_app *GetAndroidApp(void)
+{
+    return androidApp;
+}
+#endif
+
 // Initialize window and OpenGL context
 // Initialize window and OpenGL context
 // NOTE: data parameter could be used to pass any kind of required data to the initialization
 // NOTE: data parameter could be used to pass any kind of required data to the initialization
-void InitWindow(int width, int height, void *data)
+void InitWindow(int width, int height, const char *title)
 {
 {
     TraceLog(LOG_INFO, "Initializing raylib (v1.9.6-dev)");
     TraceLog(LOG_INFO, "Initializing raylib (v1.9.6-dev)");
 
 
-#if defined(PLATFORM_DESKTOP)
-    windowTitle = (char *)data;
-#endif
+    windowTitle = title;
+#if defined(PLATFORM_ANDROID)
+    screenWidth = width;
+    screenHeight = height;
 
 
-#if defined(PLATFORM_UWP)
-    uwpWindow = (EGLNativeWindowType)data;
-#endif
+    // Input data is android app pointer
+    internalDataPath = androidApp->activity->internalDataPath;
+
+    // Set desired windows flags before initializing anything
+    ANativeActivity_setWindowFlags(androidApp->activity, AWINDOW_FLAG_FULLSCREEN, 0);  //AWINDOW_FLAG_SCALED, AWINDOW_FLAG_DITHER
+    //ANativeActivity_setWindowFlags(androidApp->activity, AWINDOW_FLAG_FORCE_NOT_FULLSCREEN, AWINDOW_FLAG_FULLSCREEN);
+
+    int orientation = AConfiguration_getOrientation(androidApp->config);
 
 
+    if (orientation == ACONFIGURATION_ORIENTATION_PORT) TraceLog(LOG_INFO, "PORTRAIT window orientation");
+    else if (orientation == ACONFIGURATION_ORIENTATION_LAND) TraceLog(LOG_INFO, "LANDSCAPE window orientation");
+
+    // TODO: Automatic orientation doesn't seem to work
+    if (width <= height)
+    {
+        AConfiguration_setOrientation(androidApp->config, ACONFIGURATION_ORIENTATION_PORT);
+        TraceLog(LOG_WARNING, "Window set to portraid mode");
+    }
+    else
+    {
+        AConfiguration_setOrientation(androidApp->config, ACONFIGURATION_ORIENTATION_LAND);
+        TraceLog(LOG_WARNING, "Window set to landscape mode");
+    }
+
+    //AConfiguration_getDensity(androidApp->config);
+    //AConfiguration_getKeyboard(androidApp->config);
+    //AConfiguration_getScreenSize(androidApp->config);
+    //AConfiguration_getScreenLong(androidApp->config);
+
+    androidApp->onAppCmd = AndroidCommandCallback;
+    androidApp->onInputEvent = AndroidInputCallback;
+
+    InitAssetManager(androidApp->activity->assetManager);
+
+    TraceLog(LOG_INFO, "Android app initialized successfully");
+
+    // Wait for window to be initialized (display and context)
+    while (!windowReady)
+    {
+        // Process events loop
+        while ((ident = ALooper_pollAll(0, NULL, &events, (void**)&source)) >= 0)
+        {
+            // Process this event
+            if (source != NULL) source->process(androidApp, source);
+
+            // NOTE: Never close window, native activity is controlled by the system!
+            //if (androidApp->destroyRequested != 0) windowShouldClose = true;
+        }
+    }
+#else
     // Init graphics device (display device and OpenGL context)
     // Init graphics device (display device and OpenGL context)
     // NOTE: returns true if window and graphic device has been initialized successfully
     // NOTE: returns true if window and graphic device has been initialized successfully
     windowReady = InitGraphicsDevice(width, height);
     windowReady = InitGraphicsDevice(width, height);
@@ -495,87 +564,8 @@ void InitWindow(int width, int height, void *data)
         SetTargetFPS(60);
         SetTargetFPS(60);
         LogoAnimation();
         LogoAnimation();
     }
     }
+#endif        // defined(PLATFORM_ANDROID)
 }
 }
-#endif
-
-#if defined(PLATFORM_ANDROID)
-/* To allow easier porting to android, we allow the user to define a main function
- * which we call from android_main, that we define ourselves
- */
-extern int main(int argc, char *argv[]);
-void android_main(struct android_app *_app) {
-    char arg0[] = "raylib"; /* argv[] are mutable */
-    app = _app;
-    /* TODO should we maybe report != 0 return codes somewhere? */
-    (void)main(1, (char*[]){ arg0, NULL });
-}
-/* TODO add this to header, if apps really need it) */
-struct android_app *GetAndroidApp(void)
-{
-    return app;
-}
-
-// Initialize window and OpenGL context (and Android activity)
-// NOTE: data parameter could be used to pass any kind of required data to the initialization
-void InitWindow(int width, int height, void *data)
-{
-    (void)data; // ignored
-    TraceLog(LOG_INFO, "Initializing raylib (v1.9.6-dev)");
-
-    screenWidth = width;
-    screenHeight = height;
-
-    // Input data is android app pointer
-    internalDataPath = app->activity->internalDataPath;
-
-    // Set desired windows flags before initializing anything
-    ANativeActivity_setWindowFlags(app->activity, AWINDOW_FLAG_FULLSCREEN, 0);  //AWINDOW_FLAG_SCALED, AWINDOW_FLAG_DITHER
-    //ANativeActivity_setWindowFlags(app->activity, AWINDOW_FLAG_FORCE_NOT_FULLSCREEN, AWINDOW_FLAG_FULLSCREEN);
-
-    int orientation = AConfiguration_getOrientation(app->config);
-
-    if (orientation == ACONFIGURATION_ORIENTATION_PORT) TraceLog(LOG_INFO, "PORTRAIT window orientation");
-    else if (orientation == ACONFIGURATION_ORIENTATION_LAND) TraceLog(LOG_INFO, "LANDSCAPE window orientation");
-
-    // TODO: Automatic orientation doesn't seem to work
-    if (width <= height)
-    {
-        AConfiguration_setOrientation(app->config, ACONFIGURATION_ORIENTATION_PORT);
-        TraceLog(LOG_WARNING, "Window set to portraid mode");
-    }
-    else
-    {
-        AConfiguration_setOrientation(app->config, ACONFIGURATION_ORIENTATION_LAND);
-        TraceLog(LOG_WARNING, "Window set to landscape mode");
-    }
-
-    //AConfiguration_getDensity(app->config);
-    //AConfiguration_getKeyboard(app->config);
-    //AConfiguration_getScreenSize(app->config);
-    //AConfiguration_getScreenLong(app->config);
-
-    app->onAppCmd = AndroidCommandCallback;
-    app->onInputEvent = AndroidInputCallback;
-
-    InitAssetManager(app->activity->assetManager);
-
-    TraceLog(LOG_INFO, "Android app initialized successfully");
-
-    // Wait for window to be initialized (display and context)
-    while (!windowReady)
-    {
-        // Process events loop
-        while ((ident = ALooper_pollAll(0, NULL, &events,(void**)&source)) >= 0)
-        {
-            // Process this event
-            if (source != NULL) source->process(app, source);
-
-            // NOTE: Never close window, native activity is controlled by the system!
-            //if (app->destroyRequested != 0) windowShouldClose = true;
-        }
-    }
-}
-#endif
 
 
 // Close window and unload OpenGL context
 // Close window and unload OpenGL context
 void CloseWindow(void)
 void CloseWindow(void)
@@ -2217,7 +2207,7 @@ static bool InitGraphicsDevice(int width, int height)
         }
         }
     }
     }
 
 
-	//SetupFramebufferSize(displayWidth, displayHeight);
+    //SetupFramebufferSize(displayWidth, displayHeight);
 
 
     EGLint numConfigs = 0;
     EGLint numConfigs = 0;
     if ((eglChooseConfig(display, framebufferAttribs, &config, 1, &numConfigs) == EGL_FALSE) || (numConfigs == 0))
     if ((eglChooseConfig(display, framebufferAttribs, &config, 1, &numConfigs) == EGL_FALSE) || (numConfigs == 0))
@@ -2271,9 +2261,9 @@ static bool InitGraphicsDevice(int width, int height)
         return false;
         return false;
     }
     }
 
 
-	// Get EGL display window size 
-	eglQuerySurface(display, surface, EGL_WIDTH, &screenWidth);
-	eglQuerySurface(display, surface, EGL_HEIGHT, &screenHeight);
+    // Get EGL display window size 
+    eglQuerySurface(display, surface, EGL_WIDTH, &screenWidth);
+    eglQuerySurface(display, surface, EGL_HEIGHT, &screenHeight);
     
     
 #else   // PLATFORM_ANDROID, PLATFORM_RPI
 #else   // PLATFORM_ANDROID, PLATFORM_RPI
     EGLint numConfigs;
     EGLint numConfigs;
@@ -2314,8 +2304,8 @@ static bool InitGraphicsDevice(int width, int height)
 #if defined(PLATFORM_ANDROID)
 #if defined(PLATFORM_ANDROID)
     EGLint displayFormat;
     EGLint displayFormat;
 
 
-    displayWidth = ANativeWindow_getWidth(app->window);
-    displayHeight = ANativeWindow_getHeight(app->window);
+    displayWidth = ANativeWindow_getWidth(androidApp->window);
+    displayHeight = ANativeWindow_getHeight(androidApp->window);
 
 
     // EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is guaranteed to be accepted by ANativeWindow_setBuffersGeometry()
     // EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is guaranteed to be accepted by ANativeWindow_setBuffersGeometry()
     // As soon as we picked a EGLConfig, we can safely reconfigure the ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID
     // As soon as we picked a EGLConfig, we can safely reconfigure the ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID
@@ -2325,10 +2315,10 @@ static bool InitGraphicsDevice(int width, int height)
     // NOTE: This function use and modify global module variables: screenWidth/screenHeight and renderWidth/renderHeight and downscaleView
     // NOTE: This function use and modify global module variables: screenWidth/screenHeight and renderWidth/renderHeight and downscaleView
     SetupFramebufferSize(displayWidth, displayHeight);
     SetupFramebufferSize(displayWidth, displayHeight);
 
 
-    ANativeWindow_setBuffersGeometry(app->window, renderWidth, renderHeight, displayFormat);
-    //ANativeWindow_setBuffersGeometry(app->window, 0, 0, displayFormat);       // Force use of native display size
+    ANativeWindow_setBuffersGeometry(androidApp->window, renderWidth, renderHeight, displayFormat);
+    //ANativeWindow_setBuffersGeometry(androidApp->window, 0, 0, displayFormat);       // Force use of native display size
 
 
-    surface = eglCreateWindowSurface(display, config, app->window, NULL);
+    surface = eglCreateWindowSurface(display, config, androidApp->window, NULL);
 #endif  // defined(PLATFORM_ANDROID)
 #endif  // defined(PLATFORM_ANDROID)
 
 
 #if defined(PLATFORM_RPI)
 #if defined(PLATFORM_RPI)
@@ -2392,8 +2382,8 @@ static bool InitGraphicsDevice(int width, int height)
     }
     }
 #endif // defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI)
 #endif // defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI)
 
 
-	renderWidth = screenWidth;
-	renderHeight = screenHeight;
+    renderWidth = screenWidth;
+    renderHeight = screenHeight;
 
 
     // Initialize OpenGL context (states and resources)
     // Initialize OpenGL context (states and resources)
     // NOTE: screenWidth and screenHeight not used, just stored as globals
     // NOTE: screenWidth and screenHeight not used, just stored as globals
@@ -2734,14 +2724,14 @@ static void PollInputEvents(void)
     while ((ident = ALooper_pollAll(appEnabled ? 0 : -1, NULL, &events,(void**)&source)) >= 0)
     while ((ident = ALooper_pollAll(appEnabled ? 0 : -1, NULL, &events,(void**)&source)) >= 0)
     {
     {
         // Process this event
         // Process this event
-        if (source != NULL) source->process(app, source);
+        if (source != NULL) source->process(androidApp, source);
 
 
         // NOTE: Never close window, native activity is controlled by the system!
         // NOTE: Never close window, native activity is controlled by the system!
-        if (app->destroyRequested != 0)
+        if (androidApp->destroyRequested != 0)
         {
         {
             //TraceLog(LOG_INFO, "Closing Window...");
             //TraceLog(LOG_INFO, "Closing Window...");
             //windowShouldClose = true;
             //windowShouldClose = true;
-            //ANativeActivity_finish(app->activity);
+            //ANativeActivity_finish(androidApp->activity);
         }
         }
     }
     }
 #endif
 #endif
@@ -3078,14 +3068,14 @@ static void AndroidCommandCallback(struct android_app *app, int32_t cmd)
         case APP_CMD_DESTROY:
         case APP_CMD_DESTROY:
         {
         {
             // TODO: Finish activity?
             // TODO: Finish activity?
-            //ANativeActivity_finish(app->activity);
+            //ANativeActivity_finish(androidApp->activity);
 
 
             TraceLog(LOG_INFO, "APP_CMD_DESTROY");
             TraceLog(LOG_INFO, "APP_CMD_DESTROY");
         } break;
         } break;
         case APP_CMD_CONFIG_CHANGED:
         case APP_CMD_CONFIG_CHANGED:
         {
         {
-            //AConfiguration_fromAssetManager(app->config, app->activity->assetManager);
-            //print_cur_config(app);
+            //AConfiguration_fromAssetManager(androidApp->config, androidApp->activity->assetManager);
+            //print_cur_config(androidApp);
 
 
             // Check screen orientation here!
             // Check screen orientation here!
 
 

+ 1 - 1
src/raylib.h

@@ -699,7 +699,7 @@ extern "C" {            // Prevents name mangling of functions
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 
 
 // Window-related functions
 // Window-related functions
-RLAPI void InitWindow(int width, int height, void *data);         // Initialize window and OpenGL context
+RLAPI void InitWindow(int width, int height, const char *title);  // Initialize window and OpenGL context
 RLAPI void CloseWindow(void);                                     // Close window and unload OpenGL context
 RLAPI void CloseWindow(void);                                     // Close window and unload OpenGL context
 RLAPI bool IsWindowReady(void);                                   // Check if window has been initialized successfully
 RLAPI bool IsWindowReady(void);                                   // Check if window has been initialized successfully
 RLAPI bool WindowShouldClose(void);                               // Check if KEY_ESCAPE pressed or Close icon pressed
 RLAPI bool WindowShouldClose(void);                               // Check if KEY_ESCAPE pressed or Close icon pressed