diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Overlay.cpp | 8 | ||||
-rw-r--r-- | src/WindowUtils.cpp | 6 | ||||
-rw-r--r-- | src/main.cpp | 1 |
3 files changed, 8 insertions, 7 deletions
diff --git a/src/Overlay.cpp b/src/Overlay.cpp index aa14e3b..48aa4d3 100644 --- a/src/Overlay.cpp +++ b/src/Overlay.cpp @@ -743,7 +743,10 @@ namespace gsr { // MGL_WINDOW_TYPE_DIALOG is needed for kde plasma wayland in some cases, otherwise the window will pop up on another activity // or may not be visible at all window_create_params.window_type = (is_kwin && gsr_info.system_info.display_server == DisplayServer::WAYLAND) ? MGL_WINDOW_TYPE_DIALOG : MGL_WINDOW_TYPE_NORMAL; - window_create_params.render_api = MGL_RENDER_API_EGL; + // Nvidia + Wayland + Egl doesn't work on some systems properly and it instead falls back to software rendering. + // Use Glx on Wayland to workaround this issue. This is fine since Egl is only needed for x11 to reliably get the texture of the fullscreen window on Nvidia + // when a compositor isn't running. + window_create_params.render_api = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? MGL_RENDER_API_GLX : MGL_RENDER_API_EGL; if(!window->create("gsr ui", window_create_params)) fprintf(stderr, "error: failed to create window\n"); @@ -782,9 +785,6 @@ namespace gsr { update_compositor_texture(focused_monitor); - top_bar_text = mgl::Text("GPU Screen Recorder", get_theme().top_bar_font); - logo_sprite = mgl::Sprite(&get_theme().logo_texture); - bg_screenshot_overlay = mgl::Rectangle(mgl::vec2f(get_theme().window_width, get_theme().window_height)); top_bar_background = mgl::Rectangle(mgl::vec2f(get_theme().window_width, get_theme().window_height*0.06f).floor()); top_bar_text = mgl::Text("GPU Screen Recorder", get_theme().top_bar_font); diff --git a/src/WindowUtils.cpp b/src/WindowUtils.cpp index d245568..7631e4d 100644 --- a/src/WindowUtils.cpp +++ b/src/WindowUtils.cpp @@ -321,7 +321,7 @@ namespace gsr { } XNextEvent(display, &xev); - if(xev.type == ConfigureNotify) { + if(xev.type == ConfigureNotify && xev.xconfigure.window == window) { got_data = xev.xconfigure.x > 0 && xev.xconfigure.y > 0; position.x = xev.xconfigure.x + xev.xconfigure.width / 2; position.y = xev.xconfigure.y + xev.xconfigure.height / 2; @@ -382,7 +382,7 @@ namespace gsr { } XNextEvent(display, &xev); - if(xev.type == MapNotify) { + if(xev.type == MapNotify && xev.xmap.window == window) { int x = 0; int y = 0; Window w = None; @@ -393,7 +393,7 @@ namespace gsr { position.y = y + size / 2; if(got_data) break; - } else if(xev.type == ConfigureNotify) { + } else if(xev.type == ConfigureNotify && xev.xconfigure.window == window) { got_data = xev.xconfigure.x > 0 && xev.xconfigure.y > 0; position.x = xev.xconfigure.x + xev.xconfigure.width / 2; position.y = xev.xconfigure.y + xev.xconfigure.height / 2; diff --git a/src/main.cpp b/src/main.cpp index 9c20a81..c81bc8c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -37,6 +37,7 @@ static void disable_prime_run() { unsetenv("__NV_PRIME_RENDER_OFFLOAD_PROVIDER"); unsetenv("__GLX_VENDOR_LIBRARY_NAME"); unsetenv("__VK_LAYER_NV_optimus"); + unsetenv("DRI_PRIME"); } static std::unique_ptr<gsr::GlobalHotkeysX11> register_x11_hotkeys(gsr::Overlay *overlay) { |