Переглянути джерело

Fixed oversight on Video backgrounds not working on X11
Added unistd.h to fix compilation error on ubuntu

Signed-off-by: Alexis Maiquez <almamu@almamu.com>

Alexis Maiquez 3 роки тому
батько
коміт
f047bdd2d6

+ 3 - 11
src/WallpaperEngine/Render/CVideo.cpp

@@ -6,18 +6,11 @@
 using namespace WallpaperEngine;
 using namespace WallpaperEngine::Render;
 
-void* get_proc_address_glfw (void* ctx, const char* name)
+void* get_proc_address (void* ctx, const char* name)
 {
-    return reinterpret_cast <void*> (glfwGetProcAddress (name));
+    return static_cast<CVideo*> (ctx)->getContext ().getDriver ().getProcAddress (name);
 }
 
-#ifdef ENABLE_WAYLAND
-#include <EGL/egl.h>
-void* get_proc_address_wayland(void* ctx, const char* name) {
-    return reinterpret_cast <void*> (eglGetProcAddress (name));
-}
-#endif
-
 CVideo::CVideo (Core::CVideo* video, CRenderContext& context, CAudioContext& audioContext) :
     CWallpaper (video, Type, context, audioContext),
     m_width (16),
@@ -47,8 +40,7 @@ CVideo::CVideo (Core::CVideo* video, CRenderContext& context, CAudioContext& aud
     mpv_set_option (this->m_mpv, "volume", MPV_FORMAT_DOUBLE, &volume);
 
     // initialize gl context for mpv
-    mpv_opengl_init_params gl_init_params {get_proc_address_wayland, nullptr};
-    // mpv_opengl_init_params gl_init_params {this->getContext().getDriver().getWindowHandle() ? get_proc_address_glfw : get_proc_address_wayland, nullptr};
+    mpv_opengl_init_params gl_init_params {get_proc_address, this};
     mpv_render_param params[] {
         {MPV_RENDER_PARAM_API_TYPE, const_cast <char*> (MPV_RENDER_API_TYPE_OPENGL)},
         {MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params},

+ 5 - 0
src/WallpaperEngine/Render/Drivers/CVideoDriver.h

@@ -66,6 +66,11 @@ namespace WallpaperEngine::Render::Drivers
          * @return The number of rendered frames since the start of the driver
          */
         [[nodiscard]] virtual uint32_t getFrameCounter () const = 0;
+        /**
+         * @param name
+         * @return GetProcAddress for this video driver
+         */
+        [[nodiscard]] virtual void* getProcAddress (const char* name) const = 0;
         /**
          * Process events on the driver and renders a frame
         */

+ 5 - 0
src/WallpaperEngine/Render/Drivers/CWaylandOpenGLDriver.cpp

@@ -349,6 +349,11 @@ CWaylandOpenGLDriver::SEGLContext* CWaylandOpenGLDriver::getEGLContext ()
     return &this->m_eglContext;
 }
 
+void* CWaylandOpenGLDriver::getProcAddress (const char* name) const
+{
+    return reinterpret_cast <void*> (eglGetProcAddress (name));
+}
+
 CWaylandOpenGLDriver::SWaylandContext* CWaylandOpenGLDriver::getWaylandContext ()
 {
     return &this->m_waylandContext;

+ 1 - 0
src/WallpaperEngine/Render/Drivers/CWaylandOpenGLDriver.h

@@ -77,6 +77,7 @@ namespace WallpaperEngine::Render::Drivers
         void swapBuffers () override;
         uint32_t getFrameCounter () const override;
         void dispatchEventQueue() const override;
+        [[nodiscard]] void* getProcAddress (const char* name) const override;
 
         void onLayerClose(Output::CWaylandOutputViewport*);
         Output::CWaylandOutputViewport* surfaceToViewport(wl_surface*);

+ 7 - 0
src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.cpp

@@ -6,6 +6,8 @@
 #define GLFW_EXPOSE_NATIVE_X11
 #include <GLFW/glfw3native.h>
 
+#include <unistd.h>
+
 using namespace WallpaperEngine::Render::Drivers;
 
 void CustomGLFWErrorHandler (int errorCode, const char* reason)
@@ -162,6 +164,11 @@ void CX11OpenGLDriver::dispatchEventQueue() const
         usleep ((minimumTime - (endTime - startTime)) * CLOCKS_PER_SEC);
 }
 
+void* CX11OpenGLDriver::getProcAddress (const char* name) const
+{
+    return reinterpret_cast <void*> (glfwGetProcAddress (name));
+}
+
 GLFWwindow* CX11OpenGLDriver::getWindow ()
 {
     return this->m_window;

+ 1 - 0
src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.h

@@ -37,6 +37,7 @@ namespace WallpaperEngine::Render::Drivers
         void swapBuffers () override;
         [[nodiscard]] uint32_t getFrameCounter () const override;
         void dispatchEventQueue() const override;
+        [[nodiscard]] void* getProcAddress (const char* name) const override;
 
         GLFWwindow* getWindow ();