From f047bdd2d6bf2ae9e279974d7af5f0dfcffac321 Mon Sep 17 00:00:00 2001 From: Alexis Maiquez Date: Sat, 22 Apr 2023 12:55:37 +0200 Subject: [PATCH] Fixed oversight on Video backgrounds not working on X11 Added unistd.h to fix compilation error on ubuntu Signed-off-by: Alexis Maiquez --- src/WallpaperEngine/Render/CVideo.cpp | 14 +++----------- src/WallpaperEngine/Render/Drivers/CVideoDriver.h | 5 +++++ .../Render/Drivers/CWaylandOpenGLDriver.cpp | 5 +++++ .../Render/Drivers/CWaylandOpenGLDriver.h | 1 + .../Render/Drivers/CX11OpenGLDriver.cpp | 7 +++++++ .../Render/Drivers/CX11OpenGLDriver.h | 1 + 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/WallpaperEngine/Render/CVideo.cpp b/src/WallpaperEngine/Render/CVideo.cpp index ab56c59..8606e19 100644 --- a/src/WallpaperEngine/Render/CVideo.cpp +++ b/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 (glfwGetProcAddress (name)); + return static_cast (ctx)->getContext ().getDriver ().getProcAddress (name); } -#ifdef ENABLE_WAYLAND -#include -void* get_proc_address_wayland(void* ctx, const char* name) { - return reinterpret_cast (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 (MPV_RENDER_API_TYPE_OPENGL)}, {MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params}, diff --git a/src/WallpaperEngine/Render/Drivers/CVideoDriver.h b/src/WallpaperEngine/Render/Drivers/CVideoDriver.h index fb35c96..2e80379 100644 --- a/src/WallpaperEngine/Render/Drivers/CVideoDriver.h +++ b/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 */ diff --git a/src/WallpaperEngine/Render/Drivers/CWaylandOpenGLDriver.cpp b/src/WallpaperEngine/Render/Drivers/CWaylandOpenGLDriver.cpp index 5307130..a0a1813 100644 --- a/src/WallpaperEngine/Render/Drivers/CWaylandOpenGLDriver.cpp +++ b/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 (eglGetProcAddress (name)); +} + CWaylandOpenGLDriver::SWaylandContext* CWaylandOpenGLDriver::getWaylandContext () { return &this->m_waylandContext; diff --git a/src/WallpaperEngine/Render/Drivers/CWaylandOpenGLDriver.h b/src/WallpaperEngine/Render/Drivers/CWaylandOpenGLDriver.h index 6e181a4..e6f5384 100644 --- a/src/WallpaperEngine/Render/Drivers/CWaylandOpenGLDriver.h +++ b/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*); diff --git a/src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.cpp b/src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.cpp index 3abe372..28e6017 100644 --- a/src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.cpp +++ b/src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.cpp @@ -6,6 +6,8 @@ #define GLFW_EXPOSE_NATIVE_X11 #include +#include + 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 (glfwGetProcAddress (name)); +} + GLFWwindow* CX11OpenGLDriver::getWindow () { return this->m_window; diff --git a/src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.h b/src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.h index bcae385..001d112 100644 --- a/src/WallpaperEngine/Render/Drivers/CX11OpenGLDriver.h +++ b/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 ();