-
Автор темы
- #1
when i enable chams my game crashing
keyvalues:
#pragma once
#include "IAppSystem.hpp"
#define DECLARE_POINTER_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#define MAXSTUDIOSKINS 32
// These are given to FindMaterial to reference the texture groups that Show up on the
#define TEXTURE_GROUP_LIGHTMAP "Lightmaps"
#define TEXTURE_GROUP_WORLD "World textures"
#define TEXTURE_GROUP_MODEL "Model textures"
#define TEXTURE_GROUP_VGUI "VGUI textures"
#define TEXTURE_GROUP_PARTICLE "Particle textures"
#define TEXTURE_GROUP_DECAL "Decal textures"
#define TEXTURE_GROUP_SKYBOX "SkyBox textures"
#define TEXTURE_GROUP_CLIENT_EFFECTS "ClientEffect textures"
#define TEXTURE_GROUP_OTHER "Other textures"
#define TEXTURE_GROUP_PRECACHED "Precached"
#define TEXTURE_GROUP_CUBE_MAP "CubeMap textures"
#define TEXTURE_GROUP_RENDER_TARGET "RenderTargets"
#define TEXTURE_GROUP_UNACCOUNTED "Unaccounted textures"
//#define TEXTURE_GROUP_STATIC_VERTEX_BUFFER "Static Vertex"
#define TEXTURE_GROUP_STATIC_INDEX_BUFFER "Static Indices"
#define TEXTURE_GROUP_STATIC_VERTEX_BUFFER_DISP "Displacement Verts"
#define TEXTURE_GROUP_STATIC_VERTEX_BUFFER_COLOR "Lighting Verts"
#define TEXTURE_GROUP_STATIC_VERTEX_BUFFER_WORLD "World Verts"
#define TEXTURE_GROUP_STATIC_VERTEX_BUFFER_MODELS "Model Verts"
#define TEXTURE_GROUP_STATIC_VERTEX_BUFFER_OTHER "Other Verts"
#define TEXTURE_GROUP_DYNAMIC_INDEX_BUFFER "Dynamic Indices"
#define TEXTURE_GROUP_DYNAMIC_VERTEX_BUFFER "Dynamic Verts"
#define TEXTURE_GROUP_DEPTH_BUFFER "DepthBuffer"
#define TEXTURE_GROUP_VIEW_MODEL "ViewModel"
#define TEXTURE_GROUP_PIXEL_SHADERS "Pixel Shaders"
#define TEXTURE_GROUP_VERTEX_SHADERS "Vertex Shaders"
#define TEXTURE_GROUP_RENDER_TARGET_SURFACE "RenderTarget Surfaces"
#define TEXTURE_GROUP_MORPH_TARGETS "Morph Targets"
//-----------------------------------------------------------------------------
// forward declarations
//-----------------------------------------------------------------------------
class IMaterial;
class IMesh;
class IVertexBuffer;
class IIndexBuffer;
struct MaterialSystem_Config_t;
class VMatrix;
class matrix3x4_t;
class ITexture;
struct MaterialSystemHWID_t;
template <typename T>
static constexpr auto relativeToAbsolute(uintptr_t address) noexcept
{
return (T)(address + 4 + *reinterpret_cast<std::int32_t*>(address));
}
class KeyValues
{
public:
KeyValues* CreateFromString(const char* name, const char* value, uint8_t* pointer)
{
const auto keyValuesFromString = relativeToAbsolute<std::uintptr_t>((uintptr_t)pointer + 1);
KeyValues* keyValues;
__asm {
push 0
mov edx, value
mov ecx, name
call keyValuesFromString
add esp, 4
mov keyValues, eax
}
return keyValues;
}
KeyValues* findKey(const char* keyName, bool create, uint8_t* pointer)
{
KeyValues* (__thiscall * blueprintfn)(KeyValues * keyValues, const char* keyName, bool create);
const auto keyValuesSetString = relativeToAbsolute<decltype(blueprintfn)>((uintptr_t)pointer + 1);
return keyValuesSetString(this, keyName, create);
}
void setString(const char* keyName, const char* value, uint8_t* pointer, uint8_t* pointer2)
{
void(__thiscall * blueprintfn)(KeyValues * keyValues, const char* value);
const auto keyValuesSetString = relativeToAbsolute<decltype(blueprintfn)>((uintptr_t)pointer + 1);
if (const auto key = findKey(keyName, true, pointer2))
keyValuesSetString(key, value);
}
};
class IShader;
class IVertexTexture;
class IMorph;
class IMatRenderContext;
class ICallQueue;
struct MorphWeight_t;
class IFileList;
struct VertexStreamSpec_t;
struct ShaderStencilState_t;
struct MeshInstanceData_t;
class IClientMaterialSystem;
class CPaintMaterial;
class IPaintMapDataManager;
class IPaintMapTextureManager;
class GPUMemoryStats;
struct AspectRatioInfo_t;
struct CascadedShadowMappingState_t;
class IMaterialProxyFactory;
class ITexture;
class IMaterialSystemHardwareConfig;
class CShadowMgr;
enum CompiledVtfFlags
{
TEXTUREFLAGS_POINTSAMPLE = 0x00000001,
TEXTUREFLAGS_TRILINEAR = 0x00000002,
TEXTUREFLAGS_CLAMPS = 0x00000004,
TEXTUREFLAGS_CLAMPT = 0x00000008,
TEXTUREFLAGS_ANISOTROPIC = 0x00000010,
TEXTUREFLAGS_HINT_DXT5 = 0x00000020,
TEXTUREFLAGS_PWL_CORRECTED = 0x00000040,
TEXTUREFLAGS_NORMAL = 0x00000080,
TEXTUREFLAGS_NOMIP = 0x00000100,
TEXTUREFLAGS_NOLOD = 0x00000200,
TEXTUREFLAGS_ALL_MIPS = 0x00000400,
TEXTUREFLAGS_PROCEDURAL = 0x00000800,
TEXTUREFLAGS_ONEBITALPHA = 0x00001000,
TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000,
TEXTUREFLAGS_ENVMAP = 0x00004000,
TEXTUREFLAGS_RENDERTARGET = 0x00008000,
TEXTUREFLAGS_DEPTHRENDERTARGET = 0x00010000,
TEXTUREFLAGS_NODEBUGOVERRIDE = 0x00020000,
TEXTUREFLAGS_SINGLECOPY = 0x00040000,
TEXTUREFLAGS_PRE_SRGB = 0x00080000,
TEXTUREFLAGS_UNUSED_00100000 = 0x00100000,
TEXTUREFLAGS_UNUSED_00200000 = 0x00200000,
TEXTUREFLAGS_UNUSED_00400000 = 0x00400000,
TEXTUREFLAGS_NODEPTHBUFFER = 0x00800000,
TEXTUREFLAGS_UNUSED_01000000 = 0x01000000,
TEXTUREFLAGS_CLAMPU = 0x02000000,
TEXTUREFLAGS_VERTEXTEXTURE = 0x04000000,
TEXTUREFLAGS_SSBUMP = 0x08000000,
TEXTUREFLAGS_UNUSED_10000000 = 0x10000000,
TEXTUREFLAGS_BORDER = 0x20000000,
TEXTUREFLAGS_UNUSED_40000000 = 0x40000000,
TEXTUREFLAGS_UNUSED_80000000 = 0x80000000
};
enum StandardLightmap_t
{
MATERIAL_SYSTEM_LIGHTMAP_PAGE_WHITE = -1,
MATERIAL_SYSTEM_LIGHTMAP_PAGE_WHITE_BUMP = -2,
MATERIAL_SYSTEM_LIGHTMAP_PAGE_USER_DEFINED = -3
};
struct MaterialSystem_SortInfo_t
{
IMaterial *material;
int lightmapPageID;
};
enum MaterialThreadMode_t
{
MATERIAL_SINGLE_THREADED,
MATERIAL_QUEUED_SINGLE_THREADED,
MATERIAL_QUEUED_THREADED
};
enum MaterialContextType_t
{
MATERIAL_HARDWARE_CONTEXT,
MATERIAL_QUEUED_CONTEXT,
MATERIAL_NULL_CONTEXT
};
enum
{
MATERIAL_ADAPTER_NAME_LENGTH = 512
};
struct MaterialTextureInfo_t
{
int iExcludeInformation;
};
struct ApplicationPerformanceCountersInfo_t
{
float msMain;
float msMST;
float msGPU;
float msFlip;
float msTotal;
};
struct ApplicationInstantCountersInfo_t
{
uint32_t m_nCpuActivityMask;
uint32_t m_nDeferredWordsAllocated;
};
struct MaterialAdapterInfo_t
{
char m_pDriverName[MATERIAL_ADAPTER_NAME_LENGTH];
unsigned int m_VendorID;
unsigned int m_DeviceID;
unsigned int m_SubSysID;
unsigned int m_Revision;
int m_nDXSupportLevel; // This is the *preferred* dx support level
int m_nMinDXSupportLevel;
int m_nMaxDXSupportLevel;
unsigned int m_nDriverVersionHigh;
unsigned int m_nDriverVersionLow;
};
struct MaterialVideoMode_t
{
int m_Width; // if width and height are 0 and you select
int m_Height; // windowed mode, it'll use the window size
ImageFormat m_Format; // use ImageFormats (ignored for windowed mode)
int m_RefreshRate; // 0 == default (ignored for windowed mode)
};
enum HDRType_t
{
HDR_TYPE_NONE,
HDR_TYPE_INTEGER,
HDR_TYPE_FLOAT,
};
enum RestoreChangeFlags_t
{
MATERIAL_RESTORE_VERTEX_FORMAT_CHANGED = 0x1,
MATERIAL_RESTORE_RELEASE_MANAGED_RESOURCES = 0x2,
};
enum RenderTargetSizeMode_t
{
RT_SIZE_NO_CHANGE = 0,
RT_SIZE_DEFAULT = 1,
RT_SIZE_PICMIP = 2,
RT_SIZE_HDR = 3,
RT_SIZE_FULL_FRAME_BUFFER = 4,
RT_SIZE_OFFSCREEN = 5,
RT_SIZE_FULL_FRAME_BUFFER_ROUNDED_UP = 6
};
enum MaterialRenderTargetDepth_t
{
MATERIAL_RT_DEPTH_SHARED = 0x0,
MATERIAL_RT_DEPTH_SEPARATE = 0x1,
MATERIAL_RT_DEPTH_NONE = 0x2,
MATERIAL_RT_DEPTH_ONLY = 0x3,
};
typedef void(*MaterialBufferReleaseFunc_t)(int nChangeFlags); // see RestoreChangeFlags_t
typedef void(*MaterialBufferRestoreFunc_t)(int nChangeFlags); // see RestoreChangeFlags_t
typedef void(*ModeChangeCallbackFunc_t)(void);
typedef void(*EndFrameCleanupFunc_t)(void);
typedef bool(*EndFramePriorToNextContextFunc_t)(void);
typedef void(*OnLevelShutdownFunc_t)(void *pUserData);
typedef unsigned short MaterialHandle_t;
DECLARE_POINTER_HANDLE(MaterialLock_t);
class IMaterialSystem : public IAppSystem
{
public:
virtual CreateInterfaceFn Init(char const* pShaderAPIDLL, IMaterialProxyFactory *pMaterialProxyFactory, CreateInterfaceFn fileSystemFactory, CreateInterfaceFn cvarFactory = NULL) = 0;
virtual void SetShaderAPI(char const *pShaderAPIDLL) = 0;
virtual void SetAdapter(int nAdapter, int nFlags) = 0;
virtual void ModInit() = 0;
virtual void ModShutdown() = 0;
virtual void SetThreadMode(MaterialThreadMode_t mode, int nServiceThread = -1) = 0;
virtual MaterialThreadMode_t GetThreadMode() = 0;
virtual void ExecuteQueued() = 0;
virtual void OnDebugEvent(const char *pEvent) = 0;
virtual IMaterialSystemHardwareConfig* GetHardwareConfig(const char *pVersion, int *returnCode) = 0;
virtual void __unknown() = 0;
virtual bool UpdateConfig(bool bForceUpdate) = 0; //20
virtual bool OverrideConfig(const MaterialSystem_Config_t &config, bool bForceUpdate) = 0;
virtual const MaterialSystem_Config_t& GetCurrentConfigForVideoCard() const = 0;
virtual bool GetRecommendedConfigurationInfo(int nDXLevel, KeyValues * pKeyValues) = 0;
virtual int GetDisplayAdapterCount() const = 0;
virtual int GetCurrentAdapter() const = 0;
virtual void GetDisplayAdapterInfo(int adapter, MaterialAdapterInfo_t& info) const = 0;
virtual int GetModeCount(int adapter) const = 0;
virtual void GetModeInfo(int adapter, int mode, MaterialVideoMode_t& info) const = 0;
virtual void AddModeChangeCallBack(ModeChangeCallbackFunc_t func) = 0;
virtual void GetDisplayMode(MaterialVideoMode_t& mode) const = 0; //30
virtual bool SetMode(void* hwnd, const MaterialSystem_Config_t &config) = 0;
virtual bool SupportsMSAAMode(int nMSAAMode) = 0;
virtual const MaterialSystemHWID_t& GetVideoCardIdentifier(void) const = 0;
virtual void SpewDriverInfo() const = 0;
virtual void GetBackBufferDimensions(int &width, int &height) const = 0;
virtual ImageFormat GetBackBufferFormat() const = 0;
virtual const AspectRatioInfo_t& GetAspectRatioInfo() const = 0;
virtual bool SupportsHDRMode(HDRType_t nHDRModede) = 0;
virtual bool AddView(void* hwnd) = 0;
virtual void RemoveView(void* hwnd) = 0; //40
virtual void SetView(void* hwnd) = 0;
virtual void BeginFrame(float frameTime) = 0;
virtual void EndFrame() = 0;
virtual void Flush(bool flushHardware = false) = 0;
virtual unsigned int GetCurrentFrameCount() = 0;
virtual void SwapBuffers() = 0;
virtual void EvictManagedResources() = 0;
virtual void ReleaseResources(void) = 0;
virtual void ReacquireResources(void) = 0;
virtual void AddReleaseFunc(MaterialBufferReleaseFunc_t func) = 0; //50
virtual void RemoveReleaseFunc(MaterialBufferReleaseFunc_t func) = 0;
virtual void AddRestoreFunc(MaterialBufferRestoreFunc_t func) = 0;
virtual void RemoveRestoreFunc(MaterialBufferRestoreFunc_t func) = 0;
virtual void AddEndFrameCleanupFunc(EndFrameCleanupFunc_t func) = 0;
virtual void RemoveEndFrameCleanupFunc(EndFrameCleanupFunc_t func) = 0;
virtual void OnLevelShutdown() = 0;
virtual bool AddOnLevelShutdownFunc(OnLevelShutdownFunc_t func, void *pUserData) = 0;
virtual bool RemoveOnLevelShutdownFunc(OnLevelShutdownFunc_t func, void *pUserData) = 0;
virtual void OnLevelLoadingComplete() = 0;
virtual void ResetTempHWMemory(bool bExitingLevel = false) = 0; //60
virtual void HandleDeviceLost() = 0;
virtual int ShaderCount() const = 0;
virtual int GetShaders(int nFirstShader, int nMaxCount, IShader **ppShaderList) const = 0;
virtual int ShaderFlagCount() const = 0;
virtual const char* ShaderFlagName(int nIndex) const = 0;
virtual void GetShaderFallback(const char *pShaderName, char *pFallbackShader, int nFallbackLength) = 0;
virtual IMaterialProxyFactory* GetMaterialProxyFactory() = 0;
virtual void SetMaterialProxyFactory(IMaterialProxyFactory* pFactory) = 0;
virtual void EnableEditorMaterials() = 0;
virtual void EnableGBuffers() = 0; //70
virtual void SetInStubMode(bool bInStubMode) = 0;
virtual void DebugPrintUsedMaterials(const char *pSearchSubString, bool bVerbose) = 0;
virtual void DebugPrintUsedTextures(void) = 0;
virtual void ToggleSuppressMaterial(char const* pMaterialName) = 0;
virtual void ToggleDebugMaterial(char const* pMaterialName) = 0;
virtual bool UsingFastClipping(void) = 0;
virtual int StencilBufferBits(void) = 0; //number of bits per pixel in the stencil buffer
virtual void UncacheAllMaterials() = 0;
virtual void UncacheUnusedMaterials(bool bRecomputeStateSnapshots = false) = 0;
virtual void CacheUsedMaterials() = 0; //80
virtual void ReloadTextures() = 0;
virtual void ReloadMaterials(const char *pSubString = NULL) = 0;
virtual IMaterial* CreateMaterial(const char *pMaterialName, KeyValues *pVMTKeyValues) = 0;
virtual IMaterial* FindMaterial(char const* pMaterialName, const char *pTextureGroupName = nullptr, bool complain = true, const char *pComplainPrefix = NULL) = 0;
virtual void unk0() = 0;
virtual MaterialHandle_t FirstMaterial() const = 0;
virtual MaterialHandle_t NextMaterial(MaterialHandle_t h) const = 0;
virtual MaterialHandle_t InvalidMaterial() const = 0;
virtual IMaterial* GetMaterial(MaterialHandle_t h) const = 0;
virtual int GetNumMaterials() const = 0;
virtual ITexture* FindTexture(char const* pTextureName, const char *pTextureGroupName, bool complain = true) = 0;
virtual bool IsTextureLoaded(char const* pTextureName) const = 0;
virtual ITexture* CreateProceduralTexture(const char *pTextureName, const char *pTextureGroupName, int w, int h, ImageFormat fmt, int nFlags) = 0;
virtual void BeginRenderTargetAllocation() = 0;
virtual void EndRenderTargetAllocation() = 0; // Simulate an Alt-Tab in here, which causes a release/restore of all resources
virtual ITexture* CreateRenderTargetTexture(int w, int h, RenderTargetSizeMode_t sizeMode, ImageFormat format, MaterialRenderTargetDepth_t depth = MATERIAL_RT_DEPTH_SHARED) = 0;
virtual ITexture* CreateNamedRenderTargetTextureEx(const char *pRTName, int w, int h, RenderTargetSizeMode_t sizeMode, ImageFormat format, MaterialRenderTargetDepth_t depth = MATERIAL_RT_DEPTH_SHARED, unsigned int textureFlags = TEXTUREFLAGS_CLAMPS | TEXTUREFLAGS_CLAMPT, unsigned int renderTargetFlags = 0) = 0;
virtual ITexture* CreateNamedRenderTargetTexture(const char *pRTName, int w, int h, RenderTargetSizeMode_t sizeMode, ImageFormat format, MaterialRenderTargetDepth_t depth = MATERIAL_RT_DEPTH_SHARED, bool bClampTexCoords = true, bool bAutoMipMap = false) = 0;
virtual ITexture* CreateNamedRenderTargetTextureEx2(const char *pRTName, int w, int h, RenderTargetSizeMode_t sizeMode, ImageFormat format, MaterialRenderTargetDepth_t depth = MATERIAL_RT_DEPTH_SHARED, unsigned int textureFlags = TEXTUREFLAGS_CLAMPS | TEXTUREFLAGS_CLAMPT, unsigned int renderTargetFlags = 0) = 0;
};