Use DWMEnableBlurBehindWindow instead of WS_EX_LAYERED
Affects per-pixel transparency The current method renders to the screen by copying the GLES output to a DIB for transparency using the CPU instead of rendering directly to the window via the GPU. This is slower and also forces the window to be borderless as WS_EX_LAYERED affects the non-client region as well. This change uses DWMEnableBlurBehindWindow which allows using the standard glClearColor() background alpha and is also performed through the GPU, eliminating CPU bottlenecks
This commit is contained in:
@ -372,18 +372,7 @@ void RasterizerGLES3::output_lens_distorted_to_screen(RID p_render_target, const
|
||||
void RasterizerGLES3::end_frame(bool p_swap_buffers) {
|
||||
|
||||
if (OS::get_singleton()->is_layered_allowed()) {
|
||||
if (OS::get_singleton()->get_window_per_pixel_transparency_enabled()) {
|
||||
#if (defined WINDOWS_ENABLED) && !(defined UWP_ENABLED)
|
||||
Size2 wndsize = OS::get_singleton()->get_layered_buffer_size();
|
||||
uint8_t *data = OS::get_singleton()->get_layered_buffer_data();
|
||||
if (data) {
|
||||
glReadPixels(0, 0, wndsize.x, wndsize.y, GL_BGRA, GL_UNSIGNED_BYTE, data);
|
||||
OS::get_singleton()->swap_layered_buffer();
|
||||
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
if (!OS::get_singleton()->get_window_per_pixel_transparency_enabled()) {
|
||||
//clear alpha
|
||||
glColorMask(false, false, false, true);
|
||||
glClearColor(0, 0, 0, 1);
|
||||
|
||||
Reference in New Issue
Block a user