2021-12-25 22:36:38 +01:00
|
|
|
#pragma once
|
|
|
|
#ifndef DEDICATED // This file should not be compiled for DEDICATED!
|
|
|
|
//------------------------------
|
|
|
|
#include <d3d11.h>
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Initialization
|
|
|
|
void SetupImGui();
|
|
|
|
void DirectX_Init();
|
|
|
|
void DrawImGui();
|
|
|
|
void DestroyRenderTarget();
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Internals
|
|
|
|
void InstallDXHooks();
|
|
|
|
void DirectX_Shutdown();
|
|
|
|
|
|
|
|
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
|
|
extern HRESULT __stdcall Present(IDXGISwapChain* pSwapChain, UINT nSyncInterval, UINT nFlags);
|
|
|
|
//extern bool LoadTextureBuffer(unsigned char* image_data, const int& image_width, const int& image_height, ID3D11ShaderResourceView** out_srv);
|
|
|
|
extern bool LoadTextureBuffer(unsigned char* buffer, int len, ID3D11ShaderResourceView** out_srv, int* out_width, int* out_height);
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Typedefs
|
|
|
|
typedef HRESULT(__stdcall* IDXGISwapChainPresent)(IDXGISwapChain* pSwapChain, UINT nSyncInterval, UINT nFlags);
|
|
|
|
typedef HRESULT(__stdcall* IDXGIResizeBuffers) (IDXGISwapChain* pSwapChain, UINT nBufferCount, UINT nWidth, UINT nHeight, DXGI_FORMAT dxFormat, UINT nSwapChainFlags);
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Globals
|
|
|
|
extern DWORD g_dThreadId;
|
2022-02-28 01:01:40 +01:00
|
|
|
inline INT g_nWindowWidth;
|
|
|
|
inline INT g_nWindowHeight;
|
2021-12-25 22:36:38 +01:00
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Enums
|
|
|
|
enum class D3D11DeviceVTbl : short
|
|
|
|
{
|
|
|
|
// IUnknown
|
|
|
|
QueryInterface = 0,
|
|
|
|
AddRef = 1,
|
|
|
|
Release = 2,
|
|
|
|
|
|
|
|
// ID3D11Device
|
|
|
|
CreateBuffer = 3,
|
|
|
|
CreateTexture1D = 4,
|
|
|
|
CreateTexture2D = 5,
|
|
|
|
CreateTexture3D = 6,
|
|
|
|
CreateShaderResourceView = 7,
|
|
|
|
CreateUnorderedAccessView = 8,
|
|
|
|
CreateRenderTargetView = 9,
|
|
|
|
CreateDepthStencilView = 10,
|
|
|
|
CreateInputLayout = 11,
|
|
|
|
CreateVertexShader = 12,
|
|
|
|
CreateGeometryShader = 13,
|
|
|
|
CreateGeometryShaderWithStreamOutput = 14,
|
|
|
|
CreatePixelShader = 15,
|
|
|
|
CreateHullShader = 16,
|
|
|
|
CreateDomainShader = 17,
|
|
|
|
CreateComputeShader = 18,
|
|
|
|
CreateClassLinkage = 19,
|
|
|
|
CreateBlendState = 20,
|
|
|
|
CreateDepthStencilState = 21,
|
|
|
|
CreateRasterizerState = 22,
|
|
|
|
CreateSamplerState = 23,
|
|
|
|
CreateQuery = 24,
|
|
|
|
CreatePredicate = 25,
|
|
|
|
CreateCounter = 26,
|
|
|
|
CreateDeferredContext = 27,
|
|
|
|
OpenSharedResource = 28,
|
|
|
|
CheckFormatSupport = 29,
|
|
|
|
CheckMultisampleQualityLevels = 30,
|
|
|
|
CheckCounterInfo = 31,
|
|
|
|
CheckCounter = 32,
|
|
|
|
CheckFeatureSupport = 33,
|
|
|
|
GetPrivateData = 34,
|
|
|
|
SetPrivateData = 35,
|
|
|
|
SetPrivateDataInterface = 36,
|
|
|
|
GetFeatureLevel = 37,
|
|
|
|
GetCreationFlags = 38,
|
|
|
|
GetDeviceRemovedReason = 39,
|
|
|
|
GetImmediateContext = 40,
|
|
|
|
SetExceptionMode = 41,
|
|
|
|
GetExceptionMode = 42,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class DXGISwapChainVTbl : short
|
|
|
|
{
|
|
|
|
// IUnknown
|
|
|
|
QueryInterface = 0,
|
|
|
|
AddRef = 1,
|
|
|
|
Release = 2,
|
|
|
|
|
|
|
|
// IDXGIObject
|
|
|
|
SetPrivateData = 3,
|
|
|
|
SetPrivateDataInterface = 4,
|
|
|
|
GetPrivateData = 5,
|
|
|
|
GetParent = 6,
|
|
|
|
|
|
|
|
// IDXGIDeviceSubObject
|
|
|
|
GetDevice = 7,
|
|
|
|
|
|
|
|
// IDXGISwapChain
|
|
|
|
Present = 8,
|
|
|
|
GetBuffer = 9,
|
|
|
|
SetFullscreenState = 10,
|
|
|
|
GetFullscreenState = 11,
|
|
|
|
GetDesc = 12,
|
|
|
|
ResizeBuffers = 13,
|
|
|
|
ResizeTarget = 14,
|
|
|
|
GetContainingOutput = 15,
|
|
|
|
GetFrameStatistics = 16,
|
|
|
|
GetLastPresentCount = 17,
|
|
|
|
};
|
|
|
|
|
2022-06-19 18:07:43 +02:00
|
|
|
inline CMemory p_gGameDevice;
|
|
|
|
inline ID3D11Device** g_ppGameDevice = nullptr;
|
|
|
|
|
2022-07-21 16:56:25 +02:00
|
|
|
class VDXGI : public IDetour
|
2021-12-25 22:36:38 +01:00
|
|
|
{
|
2022-04-11 01:44:30 +02:00
|
|
|
virtual void GetAdr(void) const;
|
|
|
|
virtual void GetFun(void) const { }
|
2022-06-19 18:07:43 +02:00
|
|
|
virtual void GetVar(void) const
|
|
|
|
{
|
2022-08-09 03:02:00 +02:00
|
|
|
p_gGameDevice = g_GameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\xD3\xEA\x48\x8B\x0D\x00\x00\x00\x00"), "xxxxx????").FindPatternSelf("48 8B").ResolveRelativeAddressSelf(0x3, 0x7);
|
2022-06-19 18:07:43 +02:00
|
|
|
g_ppGameDevice = p_gGameDevice.RCast<ID3D11Device**>(); /*D3 EA 48 8B 0D ? ? ? ?*/
|
|
|
|
}
|
2022-04-11 01:44:30 +02:00
|
|
|
virtual void GetCon(void) const { }
|
|
|
|
virtual void Attach(void) const { }
|
|
|
|
virtual void Detach(void) const { }
|
2021-12-25 22:36:38 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
};
|
2022-07-21 16:56:25 +02:00
|
|
|
REGISTER(VDXGI);
|
2021-12-25 22:36:38 +01:00
|
|
|
#endif // !DEDICATED
|