416 lines
9.7 KiB
C++
416 lines
9.7 KiB
C++
|
|
#include "pch.h"
|
|||
|
|
#include "imguiC.h"
|
|||
|
|
#include "DNFTOOL.h"
|
|||
|
|
|
|||
|
|
#ifdef _WIN64
|
|||
|
|
#define SELF_PTR LONG_PTR
|
|||
|
|
#define WNDPROC_INDEX GWLP_WNDPROC
|
|||
|
|
#else
|
|||
|
|
#define SELF_PTR DWORD
|
|||
|
|
#define WNDPROC_INDEX GWL_WNDPROC
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
typedef HRESULT(WINAPI* Reset_t)(LPDIRECT3DDEVICE9, D3DPRESENT_PARAMETERS*); // 16
|
|||
|
|
typedef long(__stdcall* EndScene_t)(LPDIRECT3DDEVICE9); // 42
|
|||
|
|
typedef LRESULT(__stdcall* WndProc_t)(const HWND, UINT, WPARAM, LPARAM);
|
|||
|
|
|
|||
|
|
D3DPRESENT_PARAMETERS g_present;
|
|||
|
|
IDirect3D9* g_Direct3D9 = NULL;
|
|||
|
|
IDirect3DDevice9* g_pd3dDevice = NULL;
|
|||
|
|
HWND g_hWnd = NULL;
|
|||
|
|
|
|||
|
|
Reset_t oReset;
|
|||
|
|
EndScene_t oBeginScene;
|
|||
|
|
EndScene_t oEndScene;
|
|||
|
|
WndProc_t oWndProc;
|
|||
|
|
|
|||
|
|
DWORD* dDeviceVT = NULL;
|
|||
|
|
|
|||
|
|
|
|||
|
|
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|||
|
|
|
|||
|
|
static bool IMGUISW = false;
|
|||
|
|
|
|||
|
|
LRESULT __stdcall hkWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
|
|
{
|
|||
|
|
if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam)) return true;
|
|||
|
|
switch (msg) {
|
|||
|
|
case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK:
|
|||
|
|
case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK: case WM_XBUTTONDOWN: case WM_XBUTTONDBLCLK:
|
|||
|
|
if (checkBoxFalgs_1) return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return CallWindowProc(oWndProc, hWnd, msg, wParam, lParam);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MineImGuiInit(IDirect3DDevice9* pd3dDevice)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>IMGUI <20>汾
|
|||
|
|
IMGUI_CHECKVERSION();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>IMGUI<55><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ImGui::CreateContext();
|
|||
|
|
|
|||
|
|
ImGuiIO& io = ImGui::GetIO();
|
|||
|
|
// <20>ر<EFBFBD>imgui <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʾ
|
|||
|
|
io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
|
|||
|
|
io.WantSaveIniSettings = false;
|
|||
|
|
io.IniFilename = NULL;
|
|||
|
|
|
|||
|
|
//ImGuiStyle& style = ImGui::GetStyle();
|
|||
|
|
ImGui::StyleColorsDark();
|
|||
|
|
//ImGui::StyleColorsClassic();
|
|||
|
|
//ImGui::StyleColorsLight();
|
|||
|
|
//LoadMyStype();
|
|||
|
|
|
|||
|
|
//SetLayeredWindowAttributes();
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---Ϊ<><CEAA><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|||
|
|
ImFontConfig f_cfg;
|
|||
|
|
f_cfg.FontDataOwnedByAtlas = false;
|
|||
|
|
//const ImFont* font = io.Fonts->AddFontFromMemoryTTF((void*)baidu_font_data, baidu_font_size, 17.0f, &f_cfg, io.Fonts->GetGlyphRangesChineseSimplifiedCommon());
|
|||
|
|
const ImFont* font = io.Fonts->AddFontFromFileTTF("Fonts/simsun.ttc", 11.5f, &f_cfg, io.Fonts->GetGlyphRangesChineseSimplifiedCommon());
|
|||
|
|
|
|||
|
|
ImGui_ImplWin32_Init(g_hWnd);
|
|||
|
|
ImGui_ImplDX9_Init(pd3dDevice);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
LPDIRECT3DTEXTURE9 g_texture;
|
|||
|
|
void imguiC::LoadImg()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
//unsigned char* buffer = GetNPK();
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
for (int y = 0; y < 118; y++)
|
|||
|
|
memcpy((unsigned char*)lock_rect.pBits + lock_rect.Pitch * y, buffer + (203 * 4) * y, (203 * 4));
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
namespace Gdiplus
|
|||
|
|
{
|
|||
|
|
using std::min;
|
|||
|
|
using std::max;
|
|||
|
|
};
|
|||
|
|
#include <atlimage.h>
|
|||
|
|
|
|||
|
|
bool TmainBeginSate = TRUE;
|
|||
|
|
void DrawCustom(IDirect3DDevice9* pd3dDevice)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>濪ʼ<E6BFAA><CABC><EFBFBD><EFBFBD>
|
|||
|
|
ImGui_ImplDX9_NewFrame();
|
|||
|
|
ImGui_ImplWin32_NewFrame();
|
|||
|
|
|
|||
|
|
ImGui::NewFrame();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ڴ<EFBFBD>С
|
|||
|
|
ImGui::SetNextWindowPos(ImVec2(0, 0), ImGuiCond_FirstUseEver);
|
|||
|
|
ImGui::SetNextWindowSize(ImVec2(800, 600), ImGuiCond_FirstUseEver);
|
|||
|
|
//ImGui::SetNextWindowBgAlpha(0);
|
|||
|
|
|
|||
|
|
ImGui::Begin(u8"imgui_Test", &TmainBeginSate, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize);
|
|||
|
|
|
|||
|
|
|
|||
|
|
ImDrawList* draw_list = ImGui::GetForegroundDrawList();
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
CImage Img;
|
|||
|
|
DWORD adwBitmasks[3] = { 0x0000000f, 0x000000f0, 0x00000f00 };
|
|||
|
|
Img.CreateEx(100, 100, 16, BI_BITFIELDS, adwBitmasks, 0);
|
|||
|
|
Img.Save(L"Test.png");
|
|||
|
|
|
|||
|
|
ImGui::Image(Img, ImVec2(400, 400));
|
|||
|
|
draw_list->AddText(ImVec2(400, 400), 0xfaff0000,u8"<EFBFBD><EFBFBD><EFBFBD>Ắ");
|
|||
|
|
/*
|
|||
|
|
pd3dDevice->CreateTexture(203, 118, 1, D3DUSAGE_DYNAMIC, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &g_texture, NULL);
|
|||
|
|
|
|||
|
|
|
|||
|
|
D3DLOCKED_RECT lock_rect;
|
|||
|
|
g_texture->LockRect(0, &lock_rect, NULL, 0);
|
|||
|
|
|
|||
|
|
char* nPbit = (char*)lock_rect.pBits;
|
|||
|
|
int nPitch = lock_rect.Pitch;
|
|||
|
|
int stride = nPitch / (4 * 3);//<2F><><EFBFBD><EFBFBD>Ϊ3<CEAA>ȷݣ<C8B7>strideΪ<65><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
DWORD* pwd = (DWORD*)nPbit;
|
|||
|
|
for (UINT row = 0; row < 240; row++)
|
|||
|
|
{
|
|||
|
|
for (int col = 0; col < stride; col++)
|
|||
|
|
{
|
|||
|
|
pwd[row * nPitch / 4 + col] = 0xFFFF0000;
|
|||
|
|
pwd[row * nPitch / 4 + col + stride] = 0xFF00FF00;
|
|||
|
|
pwd[row * nPitch / 4 + col + 2 * stride] = 0xFF0000FF;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
g_texture->UnlockRect(0);
|
|||
|
|
|
|||
|
|
ImGui::Image(g_texture, ImGui::GetContentRegionAvail());
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
//ImGui::Checkbox(u8"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", &checkBoxFalgs_1); ImGui::SameLine();
|
|||
|
|
////CString tmpste = (checkBoxFalgs_1) ? "ON" : "OFF";
|
|||
|
|
////ImGui::Text(u8"[ %S ]", tmpste);
|
|||
|
|
|
|||
|
|
//if (ImGui::BeginTabBar("tab1", tab_bar_flags))
|
|||
|
|
//{
|
|||
|
|
// loadTab1();
|
|||
|
|
// loadTab2();
|
|||
|
|
// loadTab3();
|
|||
|
|
// loadTab4();
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//BYTE* PNGB = GetNPK();
|
|||
|
|
//ImGui::RenderText(ImVec2(203, 118), (char*)PNGB);
|
|||
|
|
/*
|
|||
|
|
std::vector<unsigned char> encoded;
|
|||
|
|
unsigned error_enc = lodepng::encode(encoded, PNGB, 203, 118, LodePNGColorType::LCT_RGBA, unsigned(8));
|
|||
|
|
|
|||
|
|
static ImTextureID bg_tex_id = 0;
|
|||
|
|
if (!bg_tex_id)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>opencv<63><76><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC>Ȼ<EFBFBD><C8BB>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ͼƬ
|
|||
|
|
//loadTexture<72><65>һ<EFBFBD><D2BB><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><D6AA><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>аٶ<D0B0>
|
|||
|
|
|
|||
|
|
|
|||
|
|
bg_tex_id = &encoded;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ImGui::Image(bg_tex_id, ImGui::GetContentRegionAvail());
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
|
|||
|
|
ImGui::EndTabBar();
|
|||
|
|
ImGui::End();
|
|||
|
|
ImGui::EndFrame();
|
|||
|
|
ImGui::Render();
|
|||
|
|
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
HRESULT __stdcall hkEndScene(IDirect3DDevice9* pd3dDevice)
|
|||
|
|
{
|
|||
|
|
/*
|
|||
|
|
static int num = 0;
|
|||
|
|
std::cout << "D3d:" << num << std::endl;
|
|||
|
|
++num;
|
|||
|
|
*/
|
|||
|
|
g_pd3dDevice = pd3dDevice;
|
|||
|
|
Helpers::UnHookFunction((PVOID*)(&oEndScene), hkEndScene);
|
|||
|
|
|
|||
|
|
// IMGUI<55><49>ʼ<EFBFBD><CABC>
|
|||
|
|
static bool firstCall = TRUE;
|
|||
|
|
if (firstCall)
|
|||
|
|
{
|
|||
|
|
firstCall = !firstCall;
|
|||
|
|
MineImGuiInit(pd3dDevice);
|
|||
|
|
oWndProc = (WNDPROC)SetWindowLongPtr(g_hWnd, WNDPROC_INDEX, (LONG_PTR)hkWndProc);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (IMGUISW == true)
|
|||
|
|
{
|
|||
|
|
//DrawCustom(pd3dDevice);
|
|||
|
|
IMGUISW = false;
|
|||
|
|
}
|
|||
|
|
//DrawCustom();
|
|||
|
|
|
|||
|
|
HRESULT result = pd3dDevice->EndScene();
|
|||
|
|
Helpers::HookFunction((PVOID*)(&oEndScene), hkEndScene);
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
HRESULT __stdcall hkReset(IDirect3DDevice9* pd3dDevice, D3DPRESENT_PARAMETERS* pPresentationParameters)
|
|||
|
|
{
|
|||
|
|
std::cout << "Im Going" << std::endl;
|
|||
|
|
Helpers::UnHookFunction((PVOID*)(&oReset), &hkReset);
|
|||
|
|
ImGui_ImplDX9_InvalidateDeviceObjects();
|
|||
|
|
HRESULT tmpReset = pd3dDevice->Reset(pPresentationParameters);
|
|||
|
|
ImGui_ImplDX9_CreateDeviceObjects();
|
|||
|
|
Helpers::HookFunction((PVOID*)(&oReset), hkReset);
|
|||
|
|
return tmpReset;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
IDirect3DDevice9* imguiC::GetD3dDev9()
|
|||
|
|
{
|
|||
|
|
return g_pd3dDevice;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct tagWNDINFO
|
|||
|
|
{
|
|||
|
|
DWORD dwProcessId;
|
|||
|
|
HWND hWnd;
|
|||
|
|
} WNDINFO, * LPWNDINFO;
|
|||
|
|
//ö<>ٴ<EFBFBD><D9B4>ڹ<EFBFBD><DAB9><EFBFBD>
|
|||
|
|
static BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam)
|
|||
|
|
{
|
|||
|
|
DWORD dwProcessId;
|
|||
|
|
GetWindowThreadProcessId(hWnd, &dwProcessId);
|
|||
|
|
LPWNDINFO pInfo = (LPWNDINFO)lParam;
|
|||
|
|
|
|||
|
|
if (dwProcessId == pInfo->dwProcessId)
|
|||
|
|
{
|
|||
|
|
pInfo->hWnd = hWnd;
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
|
|||
|
|
static HWND GetProcessMainWnd()
|
|||
|
|
{
|
|||
|
|
DWORD dwProcessId = ::GetCurrentProcessId();
|
|||
|
|
WNDINFO wi;
|
|||
|
|
wi.dwProcessId = dwProcessId;
|
|||
|
|
wi.hWnd = NULL;
|
|||
|
|
EnumWindows(EnumProc, (LPARAM)&wi);
|
|||
|
|
return wi.hWnd;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void imguiC::Init()
|
|||
|
|
{
|
|||
|
|
IMGUISW = true;
|
|||
|
|
/*
|
|||
|
|
static bool Sw = false;
|
|||
|
|
if (!Sw)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>IMGUI <20>汾
|
|||
|
|
IMGUI_CHECKVERSION();
|
|||
|
|
ImGui::CreateContext();
|
|||
|
|
ImGuiIO& io = ImGui::GetIO(); (void)io;
|
|||
|
|
io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
|
|||
|
|
io.WantSaveIniSettings = false;
|
|||
|
|
io.IniFilename = NULL;
|
|||
|
|
|
|||
|
|
ImGui::StyleColorsDark();
|
|||
|
|
|
|||
|
|
ImFontConfig f_cfg;
|
|||
|
|
f_cfg.FontDataOwnedByAtlas = false;
|
|||
|
|
const ImFont* font = io.Fonts->AddFontFromMemoryTTF((void*)baidu_font_data, baidu_font_size, 17.0f, &f_cfg, io.Fonts->GetGlyphRangesChineseSimplifiedCommon());
|
|||
|
|
|
|||
|
|
ImGui_ImplWin32_Init(g_hWnd);
|
|||
|
|
ImGui_ImplDX9_Init(g_pd3dDevice);
|
|||
|
|
Sw = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//g_pd3dDevice->BeginScene();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>濪ʼ<E6BFAA><CABC><EFBFBD><EFBFBD>
|
|||
|
|
ImGui_ImplDX9_NewFrame();
|
|||
|
|
ImGui_ImplWin32_NewFrame();
|
|||
|
|
|
|||
|
|
ImGui::NewFrame();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ڴ<EFBFBD>С
|
|||
|
|
ImGui::SetNextWindowPos(ImVec2(50, 50), ImGuiCond_FirstUseEver);
|
|||
|
|
ImGui::SetNextWindowSize(ImVec2(350, 450), ImGuiCond_FirstUseEver);
|
|||
|
|
|
|||
|
|
ImGui::Begin(u8"Imgui_Test", &TmainBeginSate);
|
|||
|
|
|
|||
|
|
ImGui::EndTabBar();
|
|||
|
|
ImGui::End();
|
|||
|
|
ImGui::EndFrame();
|
|||
|
|
ImGui::Render();
|
|||
|
|
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
|
|||
|
|
|
|||
|
|
//g_pd3dDevice->EndScene();
|
|||
|
|
*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void imguiC::Run()
|
|||
|
|
{
|
|||
|
|
//while (true)
|
|||
|
|
//{
|
|||
|
|
// if (DNFTOOL::GetHook(0x1A5FB4C, "0x14+0x28+") == 6)
|
|||
|
|
// {
|
|||
|
|
// std::cout << "<22><>ʼע<CABC><D7A2>" << std::endl;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
// <20><>ȡĿ<C8A1><C4BF><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
|
|||
|
|
//g_hWnd = FindWindowA("DNF Taiwan", "DNF Taiwan");
|
|||
|
|
g_hWnd = GetProcessMainWnd();
|
|||
|
|
//std::cout << g_hWnd << std::endl;
|
|||
|
|
// <20><><EFBFBD><EFBFBD>D39<33>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
|||
|
|
g_Direct3D9 = Direct3DCreate9(D3D_SDK_VERSION);
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
|||
|
|
memset(&g_present, 0, sizeof(g_present));
|
|||
|
|
g_present.Windowed = TRUE;
|
|||
|
|
g_present.SwapEffect = D3DSWAPEFFECT_DISCARD;
|
|||
|
|
g_present.BackBufferFormat = D3DFMT_UNKNOWN;
|
|||
|
|
g_present.EnableAutoDepthStencil = TRUE;
|
|||
|
|
g_present.AutoDepthStencilFormat = D3DFMT_D16;
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>d3d9<64>豸<EFBFBD><E8B1B8>ʶ
|
|||
|
|
HRESULT result = g_Direct3D9->CreateDevice(
|
|||
|
|
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
|
|||
|
|
g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
|
|||
|
|
&g_present, &g_pd3dDevice
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
//// <20><>ʼhook<6F><6B>Ӧ<EFBFBD><D3A6>D3D9<44><39><EFBFBD><EFBFBD>
|
|||
|
|
dDeviceVT = (DWORD*)*(DWORD*)g_pd3dDevice;
|
|||
|
|
oReset = (Reset_t)dDeviceVT[16];
|
|||
|
|
oBeginScene = (EndScene_t)dDeviceVT[41];
|
|||
|
|
oEndScene = (EndScene_t)dDeviceVT[42];
|
|||
|
|
|
|||
|
|
Helpers::HookFunction((PVOID*)(&oReset), hkReset);
|
|||
|
|
//Helpers::HookFunction((PVOID*)(&oBeginScene), hkBeginScene);
|
|||
|
|
Helpers::HookFunction((PVOID*)(&oEndScene), hkEndScene);
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|