template<> BOOL MyDirect3D<IDirect3D3>::Hook(IDirect3D3* obj) { BOOL rv = FALSE; rv |= VTHOOKFUNC2(IDirect3D3, CreateDevice3, CreateDevice); rv |= HookVTable(obj, 0, (FARPROC)MyQueryInterface, (FARPROC&)QueryInterface, __FUNCTION__": QueryInterface"); return rv; }
template<> BOOL MyDirect3D<IDirect3D>::Hook(IDirect3D* obj) { BOOL rv = FALSE; //rv |= VTHOOKFUNC(IDirect3D, Initialize); rv |= HookVTable(obj, 0, (FARPROC)MyQueryInterface, (FARPROC&)QueryInterface, __FUNCTION__": QueryInterface"); return rv; }
static BOOL Hook(IDirect3DN* obj) { //cmdprintf("SHORTTRACE: 3,50"); BOOL rv = FALSE; rv |= VTHOOKFUNC(IDirect3DN, CreateDevice); rv |= HookVTable(obj, 0, (FARPROC)MyQueryInterface, (FARPROC&)QueryInterface, __FUNCTION__": QueryInterface"); return rv; }
// these D3D versions had fewer drawing functions template<> BOOL MyDirect3DDevice<IDirect3DDevice>::Hook(IDirect3DDevice* obj) { BOOL rv = FALSE; rv |= VTHOOKFUNC(IDirect3DDevice, Release); rv |= VTHOOKFUNC(IDirect3DDevice, BeginScene); rv |= VTHOOKFUNC(IDirect3DDevice, EndScene); rv |= HookVTable(obj, 0, (FARPROC)MyQueryInterface, (FARPROC&)QueryInterface, __FUNCTION__": QueryInterface"); return rv; }
DWORD WINAPI VMT_Patching(LPVOID Param) { while (1) { Sleep(100); HookVTable((PDWORD*)nm_pD3Ddev, (PBYTE)myEndScene, 42); // HookVTable((PDWORD*)nm_pD3Ddev, (PBYTE)myDrawIndexedPrimitive, 82); } return 1; }
static BOOL Hook(IReferenceClock* obj) { BOOL rv = FALSE; rv |= VTHOOKFUNC(IReferenceClock, GetTime); rv |= VTHOOKFUNC(IReferenceClock, AdviseTime); rv |= VTHOOKFUNC(IReferenceClock, AdvisePeriodic); rv |= VTHOOKFUNC(IReferenceClock, Unadvise); rv |= HookVTable(obj, 0, (FARPROC)MyQueryInterface, (FARPROC&)QueryInterface, __FUNCTION__": QueryInterface"); return rv; }
template<> BOOL MyDirect3DDevice<IDirect3DDevice2>::Hook(IDirect3DDevice2* obj) { BOOL rv = FALSE; rv |= VTHOOKFUNC(IDirect3DDevice2, Release); rv |= VTHOOKFUNC(IDirect3DDevice2, BeginScene); rv |= VTHOOKFUNC(IDirect3DDevice2, EndScene); rv |= VTHOOKFUNC(IDirect3DDevice2, DrawPrimitive); rv |= VTHOOKFUNC(IDirect3DDevice2, DrawIndexedPrimitive); rv |= VTHOOKFUNC(IDirect3DDevice2, Begin); rv |= VTHOOKFUNC(IDirect3DDevice2, BeginIndexed); rv |= VTHOOKFUNC(IDirect3DDevice2, Vertex); rv |= VTHOOKFUNC(IDirect3DDevice2, Index); rv |= VTHOOKFUNC(IDirect3DDevice2, End); rv |= HookVTable(obj, 0, (FARPROC)MyQueryInterface, (FARPROC&)QueryInterface, __FUNCTION__": QueryInterface"); return rv; }
static BOOL Hook(IDirect3DDeviceN* obj) { BOOL rv = FALSE; rv |= VTHOOKFUNC(IDirect3DDeviceN, Release); rv |= VTHOOKFUNC(IDirect3DDeviceN, BeginScene); rv |= VTHOOKFUNC(IDirect3DDeviceN, EndScene); rv |= VTHOOKFUNC(IDirect3DDeviceN, DrawPrimitive); rv |= VTHOOKFUNC(IDirect3DDeviceN, DrawIndexedPrimitive); rv |= VTHOOKFUNC(IDirect3DDeviceN, DrawPrimitiveStrided); rv |= VTHOOKFUNC(IDirect3DDeviceN, DrawIndexedPrimitiveStrided); rv |= VTHOOKFUNC(IDirect3DDeviceN, DrawPrimitiveVB); rv |= VTHOOKFUNC(IDirect3DDeviceN, DrawIndexedPrimitiveVB); rv |= VTHOOKFUNC(IDirect3DDeviceN, Clear); rv |= HookVTable(obj, 0, (FARPROC)MyQueryInterface, (FARPROC&)QueryInterface, __FUNCTION__": QueryInterface"); return rv; }