mirror of
https://gitlab.com/Mr_Goldberg/goldberg_emulator.git
synced 2024-11-14 10:50:13 +01:00
dd530e80b1
Added Base_Hook::get_lib_name to track what renderer is hooked for overlay. Objects used to detect renderer type are now also used to hook the rendering functions. So we don't have to build another device. Updated VTables for DX12.
51 lines
No EOL
1,001 B
C++
51 lines
No EOL
1,001 B
C++
#ifndef __INCLUDED_BASE_HOOK_H__
|
|
#define __INCLUDED_BASE_HOOK_H__
|
|
|
|
#include "../dll/base.h"
|
|
|
|
#ifndef NO_OVERLAY
|
|
|
|
#include <vector>
|
|
#include <utility>
|
|
|
|
class Base_Hook
|
|
{
|
|
protected:
|
|
std::vector<std::pair<void**, void*>> _hooked_funcs;
|
|
|
|
void* _library;
|
|
bool _hooked;
|
|
|
|
Base_Hook(const Base_Hook&) = delete;
|
|
Base_Hook(Base_Hook&&) = delete;
|
|
Base_Hook& operator =(const Base_Hook&) = delete;
|
|
Base_Hook& operator =(Base_Hook&&) = delete;
|
|
|
|
public:
|
|
Base_Hook();
|
|
virtual ~Base_Hook();
|
|
|
|
void BeginHook();
|
|
void EndHook();
|
|
void UnhookAll();
|
|
|
|
virtual const char* get_lib_name() const;
|
|
void HookFunc(std::pair<void**, void*> hook);
|
|
|
|
template<typename T>
|
|
void HookFuncs(std::pair<T*, T> funcs)
|
|
{
|
|
HookFunc(funcs);
|
|
}
|
|
|
|
template<typename T, typename ...Args>
|
|
void HookFuncs(std::pair<T*, T> funcs, Args... args)
|
|
{
|
|
HookFunc(funcs);
|
|
HookFuncs(args...);
|
|
}
|
|
};
|
|
|
|
#endif//NO_OVERLAY
|
|
|
|
#endif//__INCLUDED_BASE_HOOK_H__
|