Explorar o código

libobs-winrt: Support window transparency for WGC

WGC capture is at the compositor level, so it's less quirky than the
BitBlt path would be.

Rounded corners in Windows 11 work. LiveSplit shenanigans do not.
jpark37 %!s(int64=3) %!d(string=hai) anos
pai
achega
aa2a819ad1
Modificáronse 1 ficheiros con 6 adicións e 3 borrados
  1. 6 3
      libobs-winrt/winrt-capture.cpp

+ 6 - 3
libobs-winrt/winrt-capture.cpp

@@ -661,13 +661,15 @@ extern "C" EXPORT void winrt_capture_render(struct winrt_capture *capture)
 		}
 		}
 
 
 		gs_effect_t *const effect =
 		gs_effect_t *const effect =
-			obs_get_base_effect(OBS_EFFECT_OPAQUE);
+			obs_get_base_effect(OBS_EFFECT_DEFAULT);
 		gs_technique_t *tech =
 		gs_technique_t *tech =
 			gs_effect_get_technique(effect, tech_name);
 			gs_effect_get_technique(effect, tech_name);
 
 
 		const bool previous = gs_framebuffer_srgb_enabled();
 		const bool previous = gs_framebuffer_srgb_enabled();
 		gs_enable_framebuffer_srgb(true);
 		gs_enable_framebuffer_srgb(true);
-		gs_enable_blending(false);
+
+		gs_blend_state_push();
+		gs_blend_function(GS_BLEND_ONE, GS_BLEND_INVSRCALPHA);
 
 
 		gs_texture_t *const texture = capture->texture;
 		gs_texture_t *const texture = capture->texture;
 		gs_effect_set_texture_srgb(
 		gs_effect_set_texture_srgb(
@@ -686,7 +688,8 @@ extern "C" EXPORT void winrt_capture_render(struct winrt_capture *capture)
 		}
 		}
 		gs_technique_end(tech);
 		gs_technique_end(tech);
 
 
-		gs_enable_blending(true);
+		gs_blend_state_pop();
+
 		gs_enable_framebuffer_srgb(previous);
 		gs_enable_framebuffer_srgb(previous);
 	}
 	}
 }
 }