diff --git a/OptiScaler/OptiScaler.vcxproj b/OptiScaler/OptiScaler.vcxproj index 9b1cc767..3f55642d 100644 --- a/OptiScaler/OptiScaler.vcxproj +++ b/OptiScaler/OptiScaler.vcxproj @@ -82,7 +82,7 @@ $(SolutionDir)external\vulkan\include;$(SolutionDir)external\nvngx_dlss_sdk;$(SolutionDir)external\xess\inc\xess;$(SolutionDir)external\FidelityFX-SDK\ffx-api\include\ffx_api;$(SolutionDir)external\simpleini;$(SolutionDir)external\unordered_dense\include;$(SolutionDir)external\spdlog\include;$(SolutionDir)external\freetype;$(IncludePath) $(ProjectDir)fsr2\lib;$(ProjectDir)fsr2_212\lib;$(ProjectDir)fsr31\lib;$(ProjectDir)vulkan;$(ProjectDir)d3dx;$(ProjectDir)detours;$(SolutionDir)external\xess\lib;$(SolutionDir)external\freetype;$(LibraryPath) dxgi - E:\Games\Epic\Control\ + E:\Games\Deep Rock Galactic\FSD\Binaries\Win64\ .\x64\Debug .dll diff --git a/OptiScaler/imgui/imgui_dx12.cpp b/OptiScaler/imgui/imgui_dx12.cpp index 95086475..87f93580 100644 --- a/OptiScaler/imgui/imgui_dx12.cpp +++ b/OptiScaler/imgui/imgui_dx12.cpp @@ -9,263 +9,264 @@ long frameCounter = 0; bool Imgui_Dx12::Render(ID3D12GraphicsCommandList* pCmdList, ID3D12Resource* outTexture) { - if (Config::Instance()->OverlayMenu.value_or(true)) - return false; + if (Config::Instance()->OverlayMenu.value_or(true)) + return false; - if (pCmdList == nullptr || outTexture == nullptr) - return false; + if (pCmdList == nullptr || outTexture == nullptr) + return false; - frameCounter++; + frameCounter++; - //if (!IsVisible()) - // return true; + //if (!IsVisible()) + // return true; - auto outDesc = outTexture->GetDesc(); + auto outDesc = outTexture->GetDesc(); - CreateRenderTarget(outDesc); + CreateRenderTarget(outDesc); - if (!_dx12Init && ImGui::GetIO().BackendRendererUserData == nullptr) - { - _dx12Init = ImGui_ImplDX12_Init(_device, 2, outDesc.Format, _srvDescHeap, - _srvDescHeap->GetCPUDescriptorHandleForHeapStart(), _srvDescHeap->GetGPUDescriptorHandleForHeapStart()); - } + if (!_dx12Init && ImGui::GetIO().BackendRendererUserData == nullptr) + { + _dx12Init = ImGui_ImplDX12_Init(_device, 2, outDesc.Format, _srvDescHeap, + _srvDescHeap->GetCPUDescriptorHandleForHeapStart(), _srvDescHeap->GetGPUDescriptorHandleForHeapStart()); + } - if (!_dx12Init) - return false; + if (!_dx12Init) + return false; - frameCounter++; + frameCounter++; - auto backbuf = frameCounter % 2; + auto backbuf = frameCounter % 2; - D3D12_RENDER_TARGET_VIEW_DESC rtDesc = { }; - rtDesc.Format = outDesc.Format; - rtDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + D3D12_RENDER_TARGET_VIEW_DESC rtDesc = { }; + rtDesc.Format = outDesc.Format; + rtDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; - if ((outDesc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET) > 0) - { - D3D12_RESOURCE_BARRIER outBarrier = { }; - outBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - outBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - outBarrier.Transition.pResource = outTexture; - outBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; - outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; - pCmdList->ResourceBarrier(1, &outBarrier); + if ((outDesc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET) > 0) + { + D3D12_RESOURCE_BARRIER outBarrier = { }; + outBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + outBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + outBarrier.Transition.pResource = outTexture; + outBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; + pCmdList->ResourceBarrier(1, &outBarrier); - // Create RTV for out - pCmdList->SetDescriptorHeaps(1, &_srvDescHeap); + // Create RTV for out + pCmdList->SetDescriptorHeaps(1, &_srvDescHeap); - _device->CreateRenderTargetView(outTexture, &rtDesc, _renderTargetDescriptor[backbuf]); - pCmdList->OMSetRenderTargets(1, &_renderTargetDescriptor[backbuf], FALSE, NULL); + _device->CreateRenderTargetView(outTexture, &rtDesc, _renderTargetDescriptor[backbuf]); + pCmdList->OMSetRenderTargets(1, &_renderTargetDescriptor[backbuf], FALSE, NULL); - ImGui_ImplDX12_NewFrame(); - ImGui_ImplWin32_NewFrame(); + ImGui_ImplDX12_NewFrame(); + ImGui_ImplWin32_NewFrame(); - // Render - ImguiDxBase::RenderMenu(); - ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), pCmdList); + // Render + ImguiDxBase::RenderMenu(); + ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), pCmdList); - outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; - outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; - pCmdList->ResourceBarrier(1, &outBarrier); + outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; + outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + pCmdList->ResourceBarrier(1, &outBarrier); - return true; - } + return true; + } - D3D12_RESOURCE_BARRIER outBarrier = { }; - outBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - outBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - outBarrier.Transition.pResource = outTexture; - outBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; - outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE; + D3D12_RESOURCE_BARRIER outBarrier = { }; + outBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + outBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + outBarrier.Transition.pResource = outTexture; + outBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE; - D3D12_RESOURCE_BARRIER bufferBarrier = { }; - bufferBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - bufferBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - bufferBarrier.Transition.pResource = _renderTargetResource[backbuf]; - bufferBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - bufferBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; - bufferBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST; + D3D12_RESOURCE_BARRIER bufferBarrier = { }; + bufferBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + bufferBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + bufferBarrier.Transition.pResource = _renderTargetResource[backbuf]; + bufferBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + bufferBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; + bufferBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST; - D3D12_RESOURCE_BARRIER barriers[] = { bufferBarrier, outBarrier }; - pCmdList->ResourceBarrier(2, barriers); + D3D12_RESOURCE_BARRIER barriers[] = { bufferBarrier, outBarrier }; + pCmdList->ResourceBarrier(2, barriers); - // Copy out to buffer - pCmdList->CopyResource(_renderTargetResource[backbuf], outTexture); + // Copy out to buffer + pCmdList->CopyResource(_renderTargetResource[backbuf], outTexture); - // Set as render target - bufferBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST; - bufferBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; - pCmdList->ResourceBarrier(1, &bufferBarrier); + // Set as render target + bufferBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST; + bufferBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; + pCmdList->ResourceBarrier(1, &bufferBarrier); - // Create RTV for buffer - pCmdList->SetDescriptorHeaps(1, &_srvDescHeap); + // Create RTV for buffer + pCmdList->SetDescriptorHeaps(1, &_srvDescHeap); - _device->CreateRenderTargetView(_renderTargetResource[backbuf], &rtDesc, _renderTargetDescriptor[backbuf]); - pCmdList->OMSetRenderTargets(1, &_renderTargetDescriptor[backbuf], FALSE, nullptr); + _device->CreateRenderTargetView(_renderTargetResource[backbuf], &rtDesc, _renderTargetDescriptor[backbuf]); + pCmdList->OMSetRenderTargets(1, &_renderTargetDescriptor[backbuf], FALSE, nullptr); - ImGui_ImplDX12_NewFrame(); - ImGui_ImplWin32_NewFrame(); + ImGui_ImplDX12_NewFrame(); + ImGui_ImplWin32_NewFrame(); - // Render to buffer - ImguiDxBase::RenderMenu(); + // Render to buffer + if (ImguiDxBase::RenderMenu()) + { + ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), pCmdList); - ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), pCmdList); + outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_SOURCE; + outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST; - outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_SOURCE; - outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST; + bufferBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; + bufferBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE; + pCmdList->ResourceBarrier(2, barriers); - bufferBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; - bufferBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE; - pCmdList->ResourceBarrier(2, barriers); + // Copy back buffer to out + pCmdList->CopyResource(outTexture, _renderTargetResource[backbuf]); - // Copy back buffer to out - pCmdList->CopyResource(outTexture, _renderTargetResource[backbuf]); + // fix states + bufferBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_SOURCE; + bufferBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; - // fix states - bufferBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_SOURCE; - bufferBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; + outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST; + outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + pCmdList->ResourceBarrier(2, barriers); + } - outBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST; - outBarrier.Transition.StateAfter = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; - pCmdList->ResourceBarrier(2, barriers); - - return true; + return true; } Imgui_Dx12::Imgui_Dx12(HWND handle, ID3D12Device* pDevice) : ImguiDxBase(handle), _device(pDevice) { - if (Config::Instance()->OverlayMenu.value_or(true)) - return; + if (Config::Instance()->OverlayMenu.value_or(true)) + return; - D3D12_DESCRIPTOR_HEAP_DESC rtvDesc = { }; - rtvDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV; - rtvDesc.NumDescriptors = 2; - rtvDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; - rtvDesc.NodeMask = 1; + D3D12_DESCRIPTOR_HEAP_DESC rtvDesc = { }; + rtvDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV; + rtvDesc.NumDescriptors = 2; + rtvDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + rtvDesc.NodeMask = 1; - if (pDevice->CreateDescriptorHeap(&rtvDesc, IID_PPV_ARGS(&_rtvDescHeap)) != S_OK) - return; + if (pDevice->CreateDescriptorHeap(&rtvDesc, IID_PPV_ARGS(&_rtvDescHeap)) != S_OK) + return; - _rtvDescHeap->SetName(L"Imgui_Dx12_rtvHeap"); + _rtvDescHeap->SetName(L"Imgui_Dx12_rtvHeap"); - SIZE_T rtvDescriptorSize = pDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); - D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle = _rtvDescHeap->GetCPUDescriptorHandleForHeapStart(); + SIZE_T rtvDescriptorSize = pDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle = _rtvDescHeap->GetCPUDescriptorHandleForHeapStart(); - for (UINT i = 0; i < 2; ++i) { - _renderTargetDescriptor[i] = rtvHandle; - rtvHandle.ptr += rtvDescriptorSize; - } + for (UINT i = 0; i < 2; ++i) { + _renderTargetDescriptor[i] = rtvHandle; + rtvHandle.ptr += rtvDescriptorSize; + } - D3D12_DESCRIPTOR_HEAP_DESC srvDesc = { }; - srvDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; - srvDesc.NumDescriptors = 1; - srvDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + D3D12_DESCRIPTOR_HEAP_DESC srvDesc = { }; + srvDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; + srvDesc.NumDescriptors = 1; + srvDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; - Config::Instance()->SkipHeapCapture = true; + Config::Instance()->SkipHeapCapture = true; - if (pDevice->CreateDescriptorHeap(&srvDesc, IID_PPV_ARGS(&_srvDescHeap)) != S_OK) - return; + if (pDevice->CreateDescriptorHeap(&srvDesc, IID_PPV_ARGS(&_srvDescHeap)) != S_OK) + return; - Config::Instance()->SkipHeapCapture = false; + Config::Instance()->SkipHeapCapture = false; - Dx12Ready(); + Dx12Ready(); - _srvDescHeap->SetName(L"Imgui_Dx12_srvDescHeap"); + _srvDescHeap->SetName(L"Imgui_Dx12_srvDescHeap"); } Imgui_Dx12::~Imgui_Dx12() { - if (!_dx12Init) - return; + if (!_dx12Init) + return; - ID3D12Fence* d3d12Fence; - _device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&d3d12Fence)); - d3d12Fence->Signal(999); + ID3D12Fence* d3d12Fence; + _device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&d3d12Fence)); + d3d12Fence->Signal(999); - auto fenceEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr); + auto fenceEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr); - if (d3d12Fence->SetEventOnCompletion(999, fenceEvent) == S_OK) - { - WaitForSingleObject(fenceEvent, INFINITE); - CloseHandle(fenceEvent); - } + if (d3d12Fence->SetEventOnCompletion(999, fenceEvent) == S_OK) + { + WaitForSingleObject(fenceEvent, INFINITE); + CloseHandle(fenceEvent); + } - d3d12Fence->Release(); + d3d12Fence->Release(); - ImGui_ImplDX12_Shutdown(); + ImGui_ImplDX12_Shutdown(); - if (_rtvDescHeap) - { - _rtvDescHeap->Release(); - _rtvDescHeap = nullptr; - } + if (_rtvDescHeap) + { + _rtvDescHeap->Release(); + _rtvDescHeap = nullptr; + } - if (_srvDescHeap) - { - _srvDescHeap->Release(); - _srvDescHeap = nullptr; - } + if (_srvDescHeap) + { + _srvDescHeap->Release(); + _srvDescHeap = nullptr; + } - if (_renderTargetResource[0]) - { - _renderTargetResource[0]->Release(); - _renderTargetResource[0] = nullptr; - } + if (_renderTargetResource[0]) + { + _renderTargetResource[0]->Release(); + _renderTargetResource[0] = nullptr; + } - if (_renderTargetResource[1]) - { - _renderTargetResource[1]->Release(); - _renderTargetResource[1] = nullptr; - } + if (_renderTargetResource[1]) + { + _renderTargetResource[1]->Release(); + _renderTargetResource[1] = nullptr; + } } void Imgui_Dx12::CreateRenderTarget(const D3D12_RESOURCE_DESC& InDesc) { - if (_renderTargetResource[0] != nullptr) - { - auto rtDesc = _renderTargetResource[0]->GetDesc(); + if (_renderTargetResource[0] != nullptr) + { + auto rtDesc = _renderTargetResource[0]->GetDesc(); - if (InDesc.Width != rtDesc.Width || InDesc.Height != rtDesc.Height || InDesc.Format != rtDesc.Format) - { - _renderTargetResource[0]->Release(); - _renderTargetResource[0] = nullptr; - _renderTargetResource[1]->Release(); - _renderTargetResource[1] = nullptr; - } - else - return; - } + if (InDesc.Width != rtDesc.Width || InDesc.Height != rtDesc.Height || InDesc.Format != rtDesc.Format) + { + _renderTargetResource[0]->Release(); + _renderTargetResource[0] = nullptr; + _renderTargetResource[1]->Release(); + _renderTargetResource[1] = nullptr; + } + else + return; + } - for (UINT i = 0; i < 2; ++i) - { - D3D12_RESOURCE_DESC desc = {}; - desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; - desc.Width = InDesc.Width; - desc.Height = InDesc.Height; - desc.DepthOrArraySize = 1; - desc.MipLevels = 1; - desc.Format = TranslateTypelessFormats(InDesc.Format); - desc.SampleDesc.Count = 1; - desc.SampleDesc.Quality = 0; - desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; - desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; + for (UINT i = 0; i < 2; ++i) + { + D3D12_RESOURCE_DESC desc = {}; + desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + desc.Width = InDesc.Width; + desc.Height = InDesc.Height; + desc.DepthOrArraySize = 1; + desc.MipLevels = 1; + desc.Format = TranslateTypelessFormats(InDesc.Format); + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; - D3D12_HEAP_PROPERTIES heapProps = CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT); + D3D12_HEAP_PROPERTIES heapProps = CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT); - ID3D12Resource* renderTarget; - auto result = _device->CreateCommittedResource(&heapProps, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_RENDER_TARGET, nullptr, IID_PPV_ARGS(&renderTarget)); + ID3D12Resource* renderTarget; + auto result = _device->CreateCommittedResource(&heapProps, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_RENDER_TARGET, nullptr, IID_PPV_ARGS(&renderTarget)); - if (result == S_OK) { - renderTarget->SetName(L"Imgui_Dx12_renderTarget"); + if (result == S_OK) { + renderTarget->SetName(L"Imgui_Dx12_renderTarget"); - D3D12_RENDER_TARGET_VIEW_DESC rtDesc = { }; - rtDesc.Format = InDesc.Format; - rtDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + D3D12_RENDER_TARGET_VIEW_DESC rtDesc = { }; + rtDesc.Format = InDesc.Format; + rtDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; - _device->CreateRenderTargetView(renderTarget, &rtDesc, _renderTargetDescriptor[i]); - _renderTargetResource[i] = renderTarget; - } - } + _device->CreateRenderTargetView(renderTarget, &rtDesc, _renderTargetDescriptor[i]); + _renderTargetResource[i] = renderTarget; + } + } } \ No newline at end of file diff --git a/OptiScaler/imgui/imgui_dx_base.cpp b/OptiScaler/imgui/imgui_dx_base.cpp index c0f929ab..29974887 100644 --- a/OptiScaler/imgui/imgui_dx_base.cpp +++ b/OptiScaler/imgui/imgui_dx_base.cpp @@ -7,59 +7,64 @@ #include "imgui_dx_base.h" #include "imgui/imgui_impl_win32.h" -void ImguiDxBase::RenderMenu() +bool ImguiDxBase::RenderMenu() { - if (Config::Instance()->OverlayMenu.value_or(true)) - return; + if (Config::Instance()->OverlayMenu.value_or(true)) + return false; - ImGuiCommon::RenderMenu(); - ImGui::Render(); + if (ImGuiCommon::RenderMenu()) + { + ImGui::Render(); + return true; + } + + return false; } bool ImguiDxBase::IsHandleDifferent() { - if (Config::Instance()->OverlayMenu.value_or(true)) - return false; + if (Config::Instance()->OverlayMenu.value_or(true)) + return false; - HWND frontWindow = Util::GetProcessWindow(); + HWND frontWindow = Util::GetProcessWindow(); - if (frontWindow == _handle) - return false; + if (frontWindow == _handle) + return false; - _handle = frontWindow; + _handle = frontWindow; - return true; + return true; } void ImguiDxBase::Dx11Ready() { - ImGuiCommon::Dx11Inited(); + ImGuiCommon::Dx11Inited(); } void ImguiDxBase::Dx12Ready() { - ImGuiCommon::Dx12Inited(); + ImGuiCommon::Dx12Inited(); } ImguiDxBase::ImguiDxBase(HWND handle) : _handle(handle) { - if (Config::Instance()->OverlayMenu.value_or(true)) - return; + if (Config::Instance()->OverlayMenu.value_or(true)) + return; - ImGuiCommon::Init(handle); + ImGuiCommon::Init(handle); - _baseInit = ImGuiCommon::IsInited(); + _baseInit = ImGuiCommon::IsInited(); } ImguiDxBase::~ImguiDxBase() { - if (!_baseInit) - return; + if (!_baseInit) + return; - ImGuiCommon::Shutdown(); + ImGuiCommon::Shutdown(); } bool ImguiDxBase::IsVisible() const { - return ImGuiCommon::IsVisible(); + return ImGuiCommon::IsVisible(); } diff --git a/OptiScaler/imgui/imgui_dx_base.h b/OptiScaler/imgui/imgui_dx_base.h index a201e1f2..d40814b4 100644 --- a/OptiScaler/imgui/imgui_dx_base.h +++ b/OptiScaler/imgui/imgui_dx_base.h @@ -14,7 +14,7 @@ private: protected: long frameCounter = 0; - void RenderMenu(); + bool RenderMenu(); static DXGI_FORMAT TranslateTypelessFormats(DXGI_FORMAT format) { diff --git a/OptiScaler/resource.h b/OptiScaler/resource.h index a6abd9a9..8f3c83b8 100644 --- a/OptiScaler/resource.h +++ b/OptiScaler/resource.h @@ -21,7 +21,7 @@ #define VER_MAJOR_VERSION 0 #define VER_MINOR_VERSION 7 #define VER_HOTFIX_VERSION 0 -#define VER_BUILD_NUMBER 91 +#define VER_BUILD_NUMBER 92 #define VER_PRE_RELEASE