You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MangoHud/src/kiero/d3d11_impl.cpp

65 lines
1.5 KiB
C++

#include "kiero.h"
#if KIERO_INCLUDE_D3D11
#include "d3d11_impl.h"
#include <d3d11.h>
#include <assert.h>
#include <iostream>
#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_impl_dx11.h"
#include "dx_shared.h"
typedef long(__stdcall* Present)(IDXGISwapChain*, UINT, UINT);
static Present oPresent = NULL;
long __stdcall hkPresent11(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags)
{
static bool init = false;
auto prev_ctx = ImGui::GetCurrentContext();
if (!init)
{
DXGI_SWAP_CHAIN_DESC desc;
pSwapChain->GetDesc(&desc);
ID3D11Device* device;
pSwapChain->GetDevice(__uuidof(ID3D11Device), (void**)&device);
ID3D11DeviceContext* context;
device->GetImmediateContext(&context);
imgui_create(context, device);
ImGui::SetCurrentContext(state.imgui_ctx);
ImGui_ImplWin32_Init(desc.OutputWindow);
ImGui_ImplDX11_Init(device, context);
init = true;
}
ImGui::SetCurrentContext(state.imgui_ctx);
update_hud_info(sw_stats, params, vendorID);
ImGui_ImplDX11_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
position_layer(params, window_size);
render_imgui(sw_stats, params, window_size, "D3D11");
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
ImGui::SetCurrentContext(prev_ctx);
return oPresent(pSwapChain, SyncInterval, Flags);
}
void impl::d3d11::init()
{
auto ret = kiero::bind(8, (void**)&oPresent, reinterpret_cast<void *>(hkPresent11));
assert(ret == kiero::Status::Success);
}
#endif // KIERO_INCLUDE_D3D11