WNDCLASSEXA wc;
{
wc.cbSize = sizeof WNDCLASSEXA;
wc.lpfnWndProc = DefWindowProcA;
wc.lpszClassName = "Dummy Class";
}
UnregisterClassA(wc.lpszClassName, GetModuleHandleA(0));
RegisterClassExA(&wc);
auto window = CreateWindowA(wc.lpszClassName, "", WS_DISABLED, 0, 0, 0, 0, nullptr, nullptr, nullptr, nullptr);
DXGI_SWAP_CHAIN_DESC desc;
{
desc.BufferCount = 1;
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
desc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.OutputWindow = window;
desc.SampleDesc.Count = 1;
desc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
desc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
desc.Windowed = 1;
}
auto level = D3D_FEATURE_LEVEL_11_0;
auto result = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, nullptr, 0,
D3D11_SDK_VERSION, &desc, &pSwapChain, &pDevice, &level, nullptr);
if (result < SEVERITY_SUCCESS) {
::DestroyWindow(desc.OutputWindow);
::UnregisterClassA(wc.lpszClassName, GetModuleHandleA(0));
return;
}
auto pointer = reinterpret_cast<std::uintptr_t*>(pSwapChain);
pointer = reinterpret_cast<std::uintptr_t*>(pointer[0]);
/* hook */
// -> your hook function here..
// -> rPresent = Hook(&pointer[8], &hkPresent);