Skip to content

Commit c7a232c

Browse files
committed
trying to fix transparency again
1 parent f2d6c00 commit c7a232c

2 files changed

Lines changed: 8 additions & 21 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/livesplit_renderer.rs

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use crate::autosplitters::supermetroid::SuperMetroidAutoSplitter;
33
use crate::autosplitters::AutoSplitter;
44
use anyhow::{anyhow, Context};
55
use eframe::egui;
6-
use glow::HasContext;
76
use livesplit_core::{Layout, SharedTimer};
87
use livesplit_hotkey::Hook;
98
use parking_lot::RwLock;
@@ -241,7 +240,6 @@ impl eframe::App for LiveSplitCoreRenderer {
241240
// showing the stale layout_state until the editor produces one
242241
}
243242

244-
let draw_bg = self.app_config.read().transparent_window != Some(YesOrNo::Yes);
245243
if self.app_config.read().renderer == Some(RendererType::Gpu) {
246244
let ppp = ctx.input(|i| i.pixels_per_point());
247245
let width = (viewport.width() * ppp) as u32;
@@ -254,32 +252,23 @@ impl eframe::App for LiveSplitCoreRenderer {
254252
painter.add(egui::PaintCallback {
255253
rect: viewport,
256254
callback: std::sync::Arc::new(egui_glow::CallbackFn::new(
257-
move |_info, painter| {
255+
move |_info, _painter| {
258256
let _span = span!(Level::TRACE, "gpu_render").entered();
259-
// Clear the default framebuffer when the window is
260-
// opaque. The GPU renderer blits its result onto
261-
// the default FB, but nothing else clears it
262-
// between frames. Without this, stale pixels from
263-
// the previous frame bleed through any transparent
264-
// regions of the layout (ghosting).
265-
if draw_bg {
266-
let gl = painter.gl();
267-
unsafe {
268-
gl.clear_color(0.0, 0.0, 0.0, 1.0);
269-
gl.clear(glow::COLOR_BUFFER_BIT);
270-
}
271-
}
272257
let ls_guard = ls.read();
273258
let ic_guard = ic.read();
274259
if let Some(layout_state) = ls_guard.as_ref() {
275260
let mut gpu_guard = gpu.lock();
276261
if let Some(gpu_renderer) = gpu_guard.as_mut() {
262+
// Always draw the layout background — its
263+
// own alpha controls OBS compositing.
264+
// Window-level transparency is handled by
265+
// clear_color() returning alpha=0.
277266
unsafe {
278267
gpu_renderer.render(
279268
layout_state,
280269
&ic_guard,
281270
[width, height],
282-
draw_bg,
271+
true,
283272
);
284273
}
285274
}
@@ -293,8 +282,6 @@ impl eframe::App for LiveSplitCoreRenderer {
293282
let _span = span!(Level::TRACE, "update_frame_buffer").entered();
294283
let layout_state = self.layout_state.read();
295284
let image_cache = self.image_cache.read();
296-
let draw_background =
297-
self.app_config.read().transparent_window != Some(YesOrNo::Yes);
298285
let Some(gl) = frame.gl() else {
299286
return;
300287
};
@@ -309,7 +296,7 @@ impl eframe::App for LiveSplitCoreRenderer {
309296
frame_buffer,
310297
sz,
311298
stride,
312-
draw_background,
299+
true,
313300
);
314301
}
315302
});

0 commit comments

Comments
 (0)