Răsfoiți Sursa

Minor tweaks on DRM system

raysan5 4 ani în urmă
părinte
comite
bfff2c432c
1 a modificat fișierele cu 31 adăugiri și 12 ștergeri
  1. 31 12
      src/core.c

+ 31 - 12
src/core.c

@@ -243,11 +243,10 @@
 #if defined(PLATFORM_RPI)
     #include "bcm_host.h"               // Raspberry Pi VideoCore IV access functions
 #endif
-
 #if defined(PLATFORM_DRM)
-    #include <gbm.h>                    // Generic Buffer Management
+    #include <gbm.h>                    // Generic Buffer Management (native platform for EGL on DRM)
     #include <xf86drm.h>                // Direct Rendering Manager user-level library interface
-    #include <xf86drmMode.h>            // Direct Rendering Manager modesetting interface
+    #include <xf86drmMode.h>            // Direct Rendering Manager mode setting (KMS) interface
 #endif
 
     #include "EGL/egl.h"                // Native platform windowing system interface
@@ -357,9 +356,9 @@ typedef struct CoreData {
 #if defined(PLATFORM_DRM)
         int fd;                             // File descriptor for /dev/dri/... 
         drmModeConnector *connector;        // Direct Rendering Manager (DRM) mode connector
+        drmModeCrtc *crtc;                  // CRT Controller
         int modeIndex;                      // Index of the used mode of connector->modes
-        drmModeCrtc *crtc;                  // CRT controller
-        struct gbm_device *gbmDevice;       // GBM device (Generic Buffer Management, native platform for EGL on DRM)
+        struct gbm_device *gbmDevice;       // GBM device
         struct gbm_surface *gbmSurface;     // GBM surface
         struct gbm_bo *prevBO;              // Previous GBM buffer object (during frame swapping)
         uint32_t prevFB;                    // Previous GBM framebufer (during frame swapping)
@@ -777,7 +776,11 @@ void InitWindow(int width, int height, const char *title)
     //AConfiguration_getScreenSize(CORE.Android.app->config);
     //AConfiguration_getScreenLong(CORE.Android.app->config);
 
+    // Initialize App command system
+    // NOTE: On APP_CMD_INIT_WINDOW -> InitGraphicsDevice(), InitTimer(), LoadFontDefault()...
     CORE.Android.app->onAppCmd = AndroidCommandCallback;
+    
+    // Initialize input events system
     CORE.Android.app->onInputEvent = AndroidInputCallback;
 
     // Initialize assets manager
@@ -919,7 +922,29 @@ void CloseWindow(void)
     timeEndPeriod(1);           // Restore time period
 #endif
 
-#if defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
+#if defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI)
+    // Close surface, context and display
+    if (CORE.Window.device != EGL_NO_DISPLAY)
+    {
+        eglMakeCurrent(CORE.Window.device, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+
+        if (CORE.Window.surface != EGL_NO_SURFACE)
+        {
+            eglDestroySurface(CORE.Window.device, CORE.Window.surface);
+            CORE.Window.surface = EGL_NO_SURFACE;
+        }
+
+        if (CORE.Window.context != EGL_NO_CONTEXT)
+        {
+            eglDestroyContext(CORE.Window.device, CORE.Window.context);
+            CORE.Window.context = EGL_NO_CONTEXT;
+        }
+
+        eglTerminate(CORE.Window.device);
+        CORE.Window.device = EGL_NO_DISPLAY;
+    }
+#endif
+
 #if defined(PLATFORM_DRM)
     if (CORE.Window.prevFB)
     {
@@ -964,14 +989,10 @@ void CloseWindow(void)
         close(CORE.Window.fd);
         CORE.Window.fd = -1;
     }
-#endif
 
     // Close surface, context and display
     if (CORE.Window.device != EGL_NO_DISPLAY)
     {
-#if !defined(PLATFORM_DRM)
-        eglMakeCurrent(CORE.Window.device, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-#endif
         if (CORE.Window.surface != EGL_NO_SURFACE)
         {
             eglDestroySurface(CORE.Window.device, CORE.Window.surface);
@@ -1011,7 +1032,6 @@ void CloseWindow(void)
         }
     }
 
-
     if (CORE.Input.Gamepad.threadId) pthread_join(CORE.Input.Gamepad.threadId, NULL);
 #endif
 
@@ -5294,7 +5314,6 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event)
     }
 
 #if defined(SUPPORT_GESTURES_SYSTEM)
-
     GestureEvent gestureEvent = { 0 };
 
     // Register touch actions