@@ -3,7 +3,6 @@ use crate::autosplitters::supermetroid::SuperMetroidAutoSplitter;
33use crate :: autosplitters:: AutoSplitter ;
44use anyhow:: { anyhow, Context } ;
55use eframe:: egui;
6- use glow:: HasContext ;
76use livesplit_core:: { Layout , SharedTimer } ;
87use livesplit_hotkey:: Hook ;
98use 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