2025-01-09 20:12:07 -05:00
|
|
|
#include "helpers.h"
|
|
|
|
#include <d3d9.h>
|
|
|
|
|
|
|
|
#include "imgui.h"
|
|
|
|
#include "imgui_impl_dx9.h"
|
|
|
|
|
2025-03-13 01:56:56 -04:00
|
|
|
|
|
|
|
#ifdef _TEST2
|
2025-01-09 20:12:07 -05:00
|
|
|
// Data
|
|
|
|
static LPDIRECT3D9 g_pD3D = nullptr;
|
|
|
|
static LPDIRECT3DDEVICE9 g_pd3dDevice = nullptr;
|
|
|
|
static UINT g_ResizeWidth = 0, g_ResizeHeight = 0;
|
|
|
|
static D3DPRESENT_PARAMETERS g_d3dpp = {};
|
|
|
|
|
|
|
|
// TODO Figure out if I can move these DirectX helpers into here.
|
|
|
|
// If I define _TEST2 into directx9_test.cpp it'll switch everything to using this file
|
|
|
|
// It crashes because g_d3dpp is a nullptr though
|
|
|
|
|
2025-03-13 01:56:56 -04:00
|
|
|
|
|
|
|
|
2025-01-09 20:12:07 -05:00
|
|
|
bool Helpers::CreateDeviceD3D(HWND hWnd)
|
|
|
|
{
|
|
|
|
if ((g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == nullptr)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
// Create the D3DDevice
|
|
|
|
ZeroMemory(&g_d3dpp, sizeof(g_d3dpp));
|
|
|
|
g_d3dpp.Windowed = TRUE;
|
|
|
|
g_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
|
|
|
|
g_d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; // Need to use an explicit format with alpha if needing per-pixel alpha composition.
|
|
|
|
g_d3dpp.EnableAutoDepthStencil = TRUE;
|
|
|
|
g_d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
|
|
|
|
g_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; // Present with vsync
|
|
|
|
//g_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; // Present without vsync, maximum unthrottled framerate
|
|
|
|
if (g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &g_d3dpp, &g_pd3dDevice) < 0)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Helpers::CleanupDeviceD3D()
|
|
|
|
{
|
|
|
|
if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = nullptr; }
|
|
|
|
if (g_pD3D) { g_pD3D->Release(); g_pD3D = nullptr; }
|
|
|
|
}
|
|
|
|
|
|
|
|
void Helpers::ResetDevice()
|
|
|
|
{
|
|
|
|
ImGui_ImplDX9_InvalidateDeviceObjects();
|
|
|
|
HRESULT hr = g_pd3dDevice->Reset(&g_d3dpp);
|
|
|
|
if (hr == D3DERR_INVALIDCALL)
|
|
|
|
IM_ASSERT(0);
|
|
|
|
ImGui_ImplDX9_CreateDeviceObjects();
|
2025-03-13 01:56:56 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif //_TEST2
|