mirror of
https://github.com/gwdevhub/gMod.git
synced 2026-07-18 16:39:31 +00:00
ab2d8cdb0a
* toggle use_folders on
* Rename pipelines
* its a strcpy :(
* add miniz, add xorstream, add non-working ziploader
* start integrating libzip (WIP)
* use ExternalProject test (doesnt work maybe?!)
* further work in integrating libzippp [WIP]
can't build libzip yet (neither manually nor in the vs build), as it doesn't find zlib
* LibZip build script
* make libzip build too
todo: specify cmake find_library to check the paths we install to
* prepare everything in cmake
* fix rebuilding of libzip/zlib
* fix stupid double quotes
* libzippp works
* Setup libzippp archive loading
* Remove allocation of new data when adding file to TextureServer
* Enable CI on dev
* Create LICENSE (#5)
* add mbedtls
* fix cmake (forgot to substitute, woops)
* fix %lu warnings for printing addresses
* enable debug messages, some formatting
* remove mbedtls, fix libzip for /MD(d)
* some code changes
* fix cmake logic, str replace min cmake version in libzip-src/CMakeLists.txt to 3.15
* linker errors in release
* c++ify a little
* remove unnecessary duplicate c++23 definition
* Fixes to gMod_XorStream when calculating stream length
* Fix loading tpf contents with password
* Implemented complete parsing
* Cleanup file loading
* Change to NI
* Revert "Change to NI"
This reverts commit 19b511d907.
* update XorStreamReader to read whole file, then xor
* delete a lot of unused code
* loading logic
* rename console window
* 1.5.4
* remove pointless mutex
* wtf is this code
---------
Co-authored-by: Alex Macocian <amacocian@yahoo.com>
136 lines
4.7 KiB
C++
136 lines
4.7 KiB
C++
#include "uMod_Main.h"
|
|
|
|
#ifndef PRE_MESSAGE
|
|
#define PRE_MESSAGE "uMod_IDirect3D9"
|
|
#endif
|
|
|
|
uMod_IDirect3D9::uMod_IDirect3D9(IDirect3D9* pOriginal, uMod_TextureServer* server)
|
|
{
|
|
Message(PRE_MESSAGE "::" PRE_MESSAGE "( %p, %p): %p\n", pOriginal, server, this);
|
|
m_pIDirect3D9 = pOriginal;
|
|
uMod_Server = server;
|
|
}
|
|
|
|
uMod_IDirect3D9::~uMod_IDirect3D9()
|
|
{
|
|
Message(PRE_MESSAGE "::~" PRE_MESSAGE "(): %p\n", this);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::QueryInterface(REFIID riid, void** ppvObj)
|
|
{
|
|
*ppvObj = nullptr;
|
|
|
|
// call this to increase AddRef at original object
|
|
// and to check if such an interface is there
|
|
|
|
const HRESULT hRes = m_pIDirect3D9->QueryInterface(riid, ppvObj);
|
|
|
|
if (hRes == NOERROR) // if OK, send our "fake" address
|
|
{
|
|
*ppvObj = this;
|
|
}
|
|
|
|
return hRes;
|
|
}
|
|
|
|
ULONG __stdcall uMod_IDirect3D9::AddRef()
|
|
{
|
|
return m_pIDirect3D9->AddRef();
|
|
}
|
|
|
|
ULONG __stdcall uMod_IDirect3D9::Release()
|
|
{
|
|
// call original routine
|
|
const ULONG count = m_pIDirect3D9->Release();
|
|
|
|
// in case no further Ref is there, the Original Object has deleted itself
|
|
if (count == 0) {
|
|
delete this;
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::RegisterSoftwareDevice(void* pInitializeFunction)
|
|
{
|
|
return m_pIDirect3D9->RegisterSoftwareDevice(pInitializeFunction);
|
|
}
|
|
|
|
UINT __stdcall uMod_IDirect3D9::GetAdapterCount()
|
|
{
|
|
return m_pIDirect3D9->GetAdapterCount();
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::GetAdapterIdentifier(UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier)
|
|
{
|
|
return m_pIDirect3D9->GetAdapterIdentifier(Adapter, Flags, pIdentifier);
|
|
}
|
|
|
|
UINT __stdcall uMod_IDirect3D9::GetAdapterModeCount(UINT Adapter, D3DFORMAT Format)
|
|
{
|
|
return m_pIDirect3D9->GetAdapterModeCount(Adapter, Format);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::EnumAdapterModes(UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode)
|
|
{
|
|
return m_pIDirect3D9->EnumAdapterModes(Adapter, Format, Mode, pMode);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::GetAdapterDisplayMode(UINT Adapter, D3DDISPLAYMODE* pMode)
|
|
{
|
|
return m_pIDirect3D9->GetAdapterDisplayMode(Adapter, pMode);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::CheckDeviceType(UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed)
|
|
{
|
|
return m_pIDirect3D9->CheckDeviceType(iAdapter, DevType, DisplayFormat, BackBufferFormat, bWindowed);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::CheckDeviceFormat(UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat)
|
|
{
|
|
return m_pIDirect3D9->CheckDeviceFormat(Adapter, DeviceType, AdapterFormat, Usage, RType, CheckFormat);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::CheckDeviceMultiSampleType(UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels)
|
|
{
|
|
return m_pIDirect3D9->CheckDeviceMultiSampleType(Adapter, DeviceType, SurfaceFormat, Windowed, MultiSampleType, pQualityLevels);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::CheckDepthStencilMatch(UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat)
|
|
{
|
|
return m_pIDirect3D9->CheckDepthStencilMatch(Adapter, DeviceType, AdapterFormat, RenderTargetFormat, DepthStencilFormat);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::CheckDeviceFormatConversion(UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat)
|
|
{
|
|
return m_pIDirect3D9->CheckDeviceFormatConversion(Adapter, DeviceType, SourceFormat, TargetFormat);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::GetDeviceCaps(UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps)
|
|
{
|
|
return m_pIDirect3D9->GetDeviceCaps(Adapter, DeviceType, pCaps);
|
|
}
|
|
|
|
HMONITOR __stdcall uMod_IDirect3D9::GetAdapterMonitor(UINT Adapter)
|
|
{
|
|
return m_pIDirect3D9->GetAdapterMonitor(Adapter);
|
|
}
|
|
|
|
HRESULT __stdcall uMod_IDirect3D9::CreateDevice(UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DDevice9** ppReturnedDeviceInterface)
|
|
{
|
|
Message(PRE_MESSAGE "::CreateDevice(): %p\n", this);
|
|
// we intercept this call and provide our own "fake" Device Object
|
|
const HRESULT hres = m_pIDirect3D9->CreateDevice(Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface);
|
|
|
|
int count = 1;
|
|
if (pPresentationParameters != nullptr) {
|
|
count = pPresentationParameters->BackBufferCount;
|
|
}
|
|
const auto pIDirect3DDevice9 = new uMod_IDirect3DDevice9(*ppReturnedDeviceInterface, uMod_Server, count);
|
|
|
|
// store our pointer (the fake one) for returning it to the calling program
|
|
*ppReturnedDeviceInterface = pIDirect3DDevice9;
|
|
|
|
return hres;
|
|
}
|