Some minor changes and refactoring

This commit is contained in:
Robert Krawczyk 2019-09-05 20:52:45 +02:00
parent dbc6ff9390
commit b129645128
7 changed files with 30 additions and 23 deletions

View file

@ -80,7 +80,7 @@ inline void StringPathAppend(std::wstring* path, const std::wstring& more)
inline bool FileExists(const std::string& path) inline bool FileExists(const std::string& path)
{ {
FILE* filep; FILE* filep;
if (fopen_s(&filep, path.c_str(), "rb") == 0) if (fopen_s(&filep, path.c_str(), "rb") == 0 && filep != 0)
{ {
fclose(filep); fclose(filep);
return true; return true;

View file

@ -30,6 +30,7 @@
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<SpectreMitigation>false</SpectreMitigation>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>

View file

@ -30,7 +30,7 @@ void MainContext::EnableAutoFix()
const std::map<const MainContext::AutoFixes, const uint32_t> MainContext::behaviorflags_fixes = const std::map<const MainContext::AutoFixes, const uint32_t> MainContext::behaviorflags_fixes =
{ {
{ RESIDENT_EVIL_4, D3DCREATE_SOFTWARE_VERTEXPROCESSING }, { RESIDENT_EVIL_4, D3DCREATE_SOFTWARE_VERTEXPROCESSING },
{ KINGS_BOUNTY_LEGEND, D3DCREATE_MIXED_VERTEXPROCESSING }, { KINGS_BOUNTY_LEGEND, D3DCREATE_MIXED_VERTEXPROCESSING }
}; };
void MainContext::FixBehaviorFlagConflict(const DWORD flags_in, DWORD* flags_out) void MainContext::FixBehaviorFlagConflict(const DWORD flags_in, DWORD* flags_out)
@ -73,8 +73,9 @@ HRESULT APIENTRY MainContext::ApplyVertexBufferFix(IDirect3DDevice9 *pIDirect3DD
// Final Fantasy XIII // Final Fantasy XIII
if (autofix == FINAL_FANTASY_XIII) if (autofix == FINAL_FANTASY_XIII)
{ {
if (Length == 358400 && FVF == 0 && Pool == D3DPOOL_MANAGED) { if (Length == 358400 && Pool == D3DPOOL_MANAGED) {
Usage = D3DUSAGE_DYNAMIC; Pool = D3DPOOL_SYSTEMMEM; Usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY;
Pool = D3DPOOL_SYSTEMMEM;
//IDirect3DVertexBuffer9* buffer = nullptr; //IDirect3DVertexBuffer9* buffer = nullptr;
//HRESULT hr = pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, &buffer, NULL); //HRESULT hr = pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, &buffer, NULL);

View file

@ -26,7 +26,7 @@ public:
}; };
#define DECLARE_HOOK(type, callconv, name, ...) \ #define DECLARE_HOOK(type, callconv, name, ...) \
public: type(callconv* True##name)(__VA_ARGS__); \ public: type(callconv* True##name)(__VA_ARGS__) = name; \
private: static type callconv Hook##name(__VA_ARGS__); private: static type callconv Hook##name(__VA_ARGS__);
class MainContext class MainContext

View file

@ -8,9 +8,10 @@
#include "IDirect3DDevice9.h" #include "IDirect3DDevice9.h"
#include "IDirect3DVertexBuffer9.h" #include "IDirect3DVertexBuffer9.h"
#define IDirect3DVertexBuffer9_PrintLog(format, ...) //PrintLog(format, __VA_ARGS__); #define IDirect3DVertexBuffer9_PrintLog(format, ...) PrintLog(format, __VA_ARGS__);
HRESULT APIENTRY hkIDirect3DVertexBuffer9::QueryInterface(REFIID riid, void** ppvObj) { HRESULT APIENTRY hkIDirect3DVertexBuffer9::QueryInterface(REFIID riid, void** ppvObj) {
IDirect3DVertexBuffer9_PrintLog(__FUNCTION__);
if (ppvObj == nullptr) return E_POINTER; if (ppvObj == nullptr) return E_POINTER;
if (riid == __uuidof(IUnknown) || if (riid == __uuidof(IUnknown) ||
@ -32,6 +33,7 @@ ULONG APIENTRY hkIDirect3DVertexBuffer9::AddRef() {
} }
ULONG APIENTRY hkIDirect3DVertexBuffer9::Release() { ULONG APIENTRY hkIDirect3DVertexBuffer9::Release() {
IDirect3DVertexBuffer9_PrintLog(__FUNCTION__);
const LONG ref = _InterlockedDecrement(&m_refCount); const LONG ref = _InterlockedDecrement(&m_refCount);
if (ref == 0) if (ref == 0)
{ {
@ -52,12 +54,12 @@ HRESULT APIENTRY hkIDirect3DVertexBuffer9::GetDevice(IDirect3DDevice9** ppDevice
} }
HRESULT APIENTRY hkIDirect3DVertexBuffer9::SetPrivateData(REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) { HRESULT APIENTRY hkIDirect3DVertexBuffer9::SetPrivateData(REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
IDirect3DVertexBuffer9_PrintLog(__FUNCTION__); IDirect3DVertexBuffer9_PrintLog(__FUNCTION__ " %s", GUIDtoStringA(refguid));
return m_pWrapped->SetPrivateData(refguid, pData, SizeOfData, Flags); return m_pWrapped->SetPrivateData(refguid, pData, SizeOfData, Flags);
} }
HRESULT APIENTRY hkIDirect3DVertexBuffer9::GetPrivateData(REFGUID refguid, void* pData, DWORD* pSizeOfData) { HRESULT APIENTRY hkIDirect3DVertexBuffer9::GetPrivateData(REFGUID refguid, void* pData, DWORD* pSizeOfData) {
IDirect3DVertexBuffer9_PrintLog(__FUNCTION__); IDirect3DVertexBuffer9_PrintLog(__FUNCTION__ " %s", GUIDtoStringA(refguid));
return m_pWrapped->GetPrivateData(refguid, pData, pSizeOfData); return m_pWrapped->GetPrivateData(refguid, pData, pSizeOfData);
} }

View file

@ -6,21 +6,23 @@
interface hkIDirect3DVertexBuffer9 final : public IDirect3DVertexBuffer9 { interface hkIDirect3DVertexBuffer9 final : public IDirect3DVertexBuffer9 {
public: public:
// original interface /*** IUnknown methods ***/
STDMETHOD(QueryInterface)(REFIID riid, void** ppvObj); STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj);
STDMETHOD_(ULONG, AddRef)(); STDMETHOD_(ULONG, AddRef)(THIS);
STDMETHOD_(ULONG, Release)(); STDMETHOD_(ULONG, Release)(THIS);
STDMETHOD(GetDevice)(IDirect3DDevice9** ppDevice);
STDMETHOD(SetPrivateData)(REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags); /*** IDirect3DResource9 methods ***/
STDMETHOD(GetPrivateData)(REFGUID refguid, void* pData, DWORD* pSizeOfData); STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice);
STDMETHOD(FreePrivateData)(REFGUID refguid); STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
STDMETHOD_(DWORD, SetPriority)(DWORD PriorityNew); STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData);
STDMETHOD_(DWORD, GetPriority)(); STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid);
STDMETHOD_(void, PreLoad)(); STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew);
STDMETHOD_(D3DRESOURCETYPE, GetType)(); STDMETHOD_(DWORD, GetPriority)(THIS);
STDMETHOD(Lock)(UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags); STDMETHOD_(void, PreLoad)(THIS);
STDMETHOD(Unlock)(); STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS);
STDMETHOD(GetDesc)(D3DVERTEXBUFFER_DESC *pDesc); STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags);
STDMETHOD(Unlock)(THIS);
STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc);
public: public:
hkIDirect3DVertexBuffer9(IDirect3DDevice9* pIDirect3DDevice9, IDirect3DVertexBuffer9* pIDirect3DVertexBuffer9) hkIDirect3DVertexBuffer9(IDirect3DDevice9* pIDirect3DDevice9, IDirect3DVertexBuffer9* pIDirect3DVertexBuffer9)

View file

@ -45,6 +45,7 @@
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
<InterproceduralOptimization>true</InterproceduralOptimization> <InterproceduralOptimization>true</InterproceduralOptimization>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<SpectreMitigation>false</SpectreMitigation>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>