diff options
| author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-05-03 11:48:46 +0300 |
|---|---|---|
| committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-05-23 15:23:18 +0300 |
| commit | 628c81d2d9a2cf05541a8d95dd99f6349aca851d (patch) | |
| tree | f0063c0a9125e9a6a9562e572429e38efbbb2372 /drivers/d3d12/rendering_device_driver_d3d12.cpp | |
| parent | b947c53ddc08d4314b2ce70ca1bc2adb37b83c37 (diff) | |
| download | redot-engine-628c81d2d9a2cf05541a8d95dd99f6349aca851d.tar.gz | |
[DisplayServer] Add method to check if window transparency is supported and enabled.
Diffstat (limited to 'drivers/d3d12/rendering_device_driver_d3d12.cpp')
| -rw-r--r-- | drivers/d3d12/rendering_device_driver_d3d12.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/d3d12/rendering_device_driver_d3d12.cpp b/drivers/d3d12/rendering_device_driver_d3d12.cpp index 9407826ebf..b042d41524 100644 --- a/drivers/d3d12/rendering_device_driver_d3d12.cpp +++ b/drivers/d3d12/rendering_device_driver_d3d12.cpp @@ -2199,9 +2199,21 @@ Error RenderingDeviceDriverD3D12::swap_chain_resize(CommandQueueID p_cmd_queue, swap_chain_desc.SampleDesc.Count = 1; swap_chain_desc.Flags = creation_flags; swap_chain_desc.Scaling = DXGI_SCALING_NONE; + if (OS::get_singleton()->is_layered_allowed()) { + swap_chain_desc.AlphaMode = DXGI_ALPHA_MODE_PREMULTIPLIED; + has_comp_alpha[(uint64_t)p_cmd_queue.id] = true; + } else { + swap_chain_desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE; + has_comp_alpha[(uint64_t)p_cmd_queue.id] = false; + } ComPtr<IDXGISwapChain1> swap_chain_1; res = context_driver->dxgi_factory_get()->CreateSwapChainForHwnd(command_queue->d3d_queue.Get(), surface->hwnd, &swap_chain_desc, nullptr, nullptr, swap_chain_1.GetAddressOf()); + if (!SUCCEEDED(res) && swap_chain_desc.AlphaMode != DXGI_ALPHA_MODE_IGNORE) { + swap_chain_desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE; + has_comp_alpha[(uint64_t)p_cmd_queue.id] = false; + res = context_driver->dxgi_factory_get()->CreateSwapChainForHwnd(command_queue->d3d_queue.Get(), surface->hwnd, &swap_chain_desc, nullptr, nullptr, swap_chain_1.GetAddressOf()); + } ERR_FAIL_COND_V(!SUCCEEDED(res), ERR_CANT_CREATE); swap_chain_1.As(&swap_chain->d3d_swap_chain); @@ -5980,6 +5992,13 @@ const RDD::Capabilities &RenderingDeviceDriverD3D12::get_capabilities() const { return device_capabilities; } +bool RenderingDeviceDriverD3D12::is_composite_alpha_supported(CommandQueueID p_queue) const { + if (has_comp_alpha.has((uint64_t)p_queue.id)) { + return has_comp_alpha[(uint64_t)p_queue.id]; + } + return false; +} + /******************/ RenderingDeviceDriverD3D12::RenderingDeviceDriverD3D12(RenderingContextDriverD3D12 *p_context_driver) { |
