From 26db0b63b84b87b481f5449b77cda98efb28d1d9 Mon Sep 17 00:00:00 2001 From: superp00t Date: Sat, 30 Nov 2024 07:43:24 -0500 Subject: [PATCH] feat(profile): added listings of virtual functions for CGxDevice, CGxDeviceD3d --- .../ida/batch/import_data_types.idc | 80 ++- .../ida/batch/import_symbols.idc | 61 ++- .../3.3.5a-windows-386/include/gx/device.h | 37 +- profile/3.3.5a-windows-386/include/gx/query.h | 16 + profile/3.3.5a-windows-386/include/gx/types.h | 23 + profile/3.3.5a-windows-386/include/main.h | 2 + .../include/storm/array/float.h | 10 + .../3.3.5a-windows-386/symbol/gxbuf/func.sym | 1 + .../symbol/gxdevice/func.sym | 28 +- .../symbol/gxdeviced3d/func.sym | 87 ++- profile/3.3.5a-windows-386/symbol/main.sym | 111 ++-- .../3.3.5a-windows-386/symbol/storm/func.sym | 2 +- .../symbol/tempest/func.sym | 5 +- profile/3.3.5a-windows-386/x64dbg/game.dd32 | Bin 95503 -> 97238 bytes profile/3.3.5a-windows-386/x64dbg/types.json | 502 +++++++++++------- 15 files changed, 699 insertions(+), 266 deletions(-) create mode 100644 profile/3.3.5a-windows-386/include/gx/query.h create mode 100644 profile/3.3.5a-windows-386/include/storm/array/float.h create mode 100644 profile/3.3.5a-windows-386/symbol/gxbuf/func.sym diff --git a/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc b/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc index 73d30ff..3867d7c 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_data_types.idc @@ -19,9 +19,12 @@ static import_data_types() { apply_type(0x004B78A0, "int32_t __usercall func@(char* ext@, char* filename, int32_t a3, MipBits** mipBits, uint32_t* width, uint32_t* height, PIXEL_FORMAT* texFormat, int32_t* isOpaque@, uint32_t* alphaBits, PIXEL_FORMAT* dataFormat)"); apply_type(0x004B8070, "int32_t __usercall func@(char* ext@, char* filename@, int32_t a3, MipBits** mipBits, uint32_t* width, uint32_t* height, uint32_t* isOpaque, uint32_t* alphaBits, PIXEL_FORMAT* dataFormat)"); apply_type(0x004B81D0, "MipBits* func(const char* filename, uint32_t* width, uint32_t* height, PIXEL_FORMAT* dataFormat, int32_t* isOpaque, CStatus* status, uint32_t* alphaBits, int32_t a8)"); + apply_type(0x004C4B80, "void __thiscall func(TSGrowableArray_C3Vector* this, uint32_t count)"); apply_type(0x00532AF0, "CGxCaps* __thiscall func(CGxDevice* this)"); + apply_type(0x0057FDD0, "void __thiscall func(TSGrowableArray_C2Vector* this, uint32_t count)"); apply_type(0x006160B0, "int32_t __usercall func@(uint32_t** image@, MipBits* mipImages@, uint32_t width@, uint32_t height)"); apply_type(0x00616800, "void __stdcall func(CURSORMODE mode)"); + apply_type(0x00616CA0, "void __thiscall func(TSGrowableArray_CImVector* this, uint32_t count)"); apply_type(0x00681A60, "void __stdcall func()"); apply_type(0x00681AB0, "void __stdcall func(uint32_t indexCount, uint16_t* indices)"); apply_type(0x00681B00, "void __stdcall func(CGxBuf* buf, EGxVertexBufferFormat format)"); @@ -31,7 +34,7 @@ static import_data_types() { apply_type(0x00682400, "void __stdcall func(uint32_t vertexCount, C3Vector* pos, uint32_t posStride, C3Vector* normal, uint32_t normalStride, CImVector* color, uint32_t colorStride, C2Vector* tex0, uint32_t tex0Stride, C2Vector* tex1, uint32_t tex1Stride)"); apply_type(0x006828C0, "void __stdcall func(uint32_t vertexCount, C3Vector* pos, uint32_t posStride, C3Vector* normal, uint32_t normalStride, CImVector* color, uint32_t colorStride, uint8_t* bone, uint32_t boneStride, C2Vector* tex0, uint32_t tex0Stride, C2Vector* tex1, uint32_t tex1Stride)"); apply_type(0x00682CB0, "void __thiscall func(CGxDevice* this, int32_t (*windowProc)(void*, uint32_t, uintptr_t, intptr_t), CGxFormat* format)"); - apply_type(0x00682CD0, "void __thiscall func(CGxDevice* this, CGxFormat* format)"); + apply_type(0x00682CD0, "void __thiscall func(CGxDevice* this, uintptr_t hwnd, CGxFormat* format)"); apply_type(0x00682CF0, "void __thiscall func(CGxDevice* this)"); apply_type(0x00682D00, "void __thiscall func(CGxDevice* this, uint32_t baseMipLevel)"); apply_type(0x00682D20, "EGxApi __thiscall func(CGxDevice* this)"); @@ -43,6 +46,8 @@ static import_data_types() { apply_type(0x00682E50, "void __thiscall func(CGxDevice* this)"); apply_type(0x00682F10, "void __thiscall func(CGxDevice* this, CGxBuf* buf)"); apply_type(0x00682F40, "uint32_t __stdcall func(EGxPrim primType, uint32_t indexCount)"); + apply_type(0x00682F70, "void __thiscall func(CGxDevice* this, C3Vector* n)"); + apply_type(0x00682FA0, "void __thiscall func(CGxDevice* this, uint32_t tmu, C2Vector* t)"); apply_type(0x00683080, "void __thiscall func(CGxDevice* this, uint32_t whichLight, int32_t enable)"); apply_type(0x006830B0, "int32_t __thiscall func(CGxDevice* this, uint32_t app, uint32_t hw, uint32_t appDisables, uint32_t hwDisables, uint32_t flagPos, int32_t* enable)"); apply_type(0x00683100, "int32_t __thiscall func(CGxDevice* this, EGxMasterEnables state)"); @@ -62,11 +67,14 @@ static import_data_types() { apply_type(0x00684170, "void __thiscall func(CGxDevice* this, float gamma)"); apply_type(0x00684190, "int32_t __thiscall func(CGxDevice* this, CGxGammaRamp* ramp)"); apply_type(0x00684260, "void __thiscall func(CGxDevice* this, uint32_t* w, uint32_t* h, CImVector** pixels)"); + apply_type(0x006842A0, "void __thiscall func(CGxDevice* this, EGxBuffer buffer, CGxTex* texture, uint32_t plane)"); apply_type(0x00684360, "void __thiscall func(CGxDevice* this, CRect* rect)"); apply_type(0x006843B0, "void __thiscall func(CGxDevice* this)"); apply_type(0x006843E0, "void __thiscall func(CGxDevice* this)"); apply_type(0x00684410, "void __thiscall func(CGxDevice* this)"); apply_type(0x00684440, "void __thiscall func(CGxDevice* this, uint32_t a2, C4Plane* plane)"); + apply_type(0x00684590, "void __thiscall func(CGxDevice* this, CImVector* c)"); + apply_type(0x006845B0, "void __thiscall func(CGxDevice* this)"); apply_type(0x006847D0, "void __thiscall func(CGxDevice* this, uint32_t a2, CGxLight* light, C3Vector* pos)"); apply_type(0x00684850, "void __thiscall func(CGxDevice* this, EGxPoolTarget target, uint32_t itemSize, uint32_t itemCount)"); apply_type(0x006848A0, "void __thiscall func(CGxDevice* this, CGxTex* texId, CiRect* updateRect, int32_t immediate)"); @@ -77,12 +85,15 @@ static import_data_types() { apply_type(0x00684C20, "void __stdcall func(char* format, ...)"); apply_type(0x00684C40, "void __stdcall func(CGxCaps* caps)"); apply_type(0x00684D10, "void __stdcall func(CGxFormat* format)"); + apply_type(0x00684FE0, "void __thiscall func(CGxDevice* this, EGxOverride override, uint32_t value)"); apply_type(0x006853B0, "void __thiscall func(CGxDevice* this, DEVICERESTOREDCALLBACK fn)"); apply_type(0x006853D0, "int32_t __thiscall func(CGxDevice* this, DEVICERESTOREDCALLBACK fn)"); apply_type(0x00685460, "void __thiscall func(CGxDevice* this, TEXTURERECREATIONCALLBACK fn)"); apply_type(0x00685480, "int32_t __thiscall func(CGxDevice* this, TEXTURERECREATIONCALLBACK fn)"); apply_type(0x00685510, "void __thiscall func(CGxDevice* this, STEREOCHANGEDCALLBACK fn)"); apply_type(0x00685530, "int32_t __thiscall func(CGxDevice* this, STEREOCHANGEDCALLBACK fn)"); + apply_type(0x006855C0, "void __thiscall func(CGxDevice* this, EGxPrim primType)"); + apply_type(0x00685640, "void __thiscall func(CGxDevice* this, C3Vector* v)"); apply_type(0x00685970, "void __thiscall func(CGxDevice* this, EGxRenderState which)"); apply_type(0x006859E0, "void __thiscall func(CGxDevice* this, EGxRenderState which)"); apply_type(0x00685A70, "void __thiscall func(CGxDevice* this)"); @@ -93,17 +104,81 @@ static import_data_types() { apply_type(0x00685FB0, "void __thiscall func(CGxDevice* this)"); apply_type(0x00687660, "CGxBuf* __thiscall func(CGxDevice* this, CGxPool* pool, uint32_t itemSize, uint32_t itemCount, uint32_t index)"); apply_type(0x006876D0, "CGxPool* __thiscall func(CGxDevice* this, EGxPoolTarget target, EGxPoolUsage usage, uint32_t size, EGxPoolHintBits hint, char* name)"); + apply_type(0x006877C0, "void __thiscall func(CGxDevice* this, CGxQuery** query, EGxQueryType queryType)"); + apply_type(0x00687820, "void __thiscall func(CGxDevice* this, CGxShader** shader)"); + apply_type(0x00687980, "void __thiscall func(CGxDevice* this, CGxTex* texId)"); + apply_type(0x006879F0, "void __thiscall func(CGxDevice* this, CGxQuery** query)"); apply_type(0x00687A90, "void __thiscall func(CGxDevice* this)"); apply_type(0x00688340, "void __thiscall func(CGxDevice* this, CGxPool* pool)"); apply_type(0x00688690, "void __thiscall func(CGxDevice* this)"); + apply_type(0x00689040, "void __thiscall func(CGxDevice* this, C44Matrix* matrix)"); + apply_type(0x00689050, "void __thiscall func(CGxDevice* this, C44Matrix* matrix)"); apply_type(0x006890C0, "void __thiscall func(CGxDevice* this)"); - apply_type(0x00689690, "void __thiscall func(CGxDevice *this, uint8_t __flags)"); + apply_type(0x00689690, "void __thiscall func(CGxDevice* this, uint8_t __flags)"); apply_type(0x006897C0, "void __thiscall func(CGxDevice* this, CGxShader**, EGxShTarget, char*, char*, int32_t)"); apply_type(0x00689EF0, "CGxDevice* __stdcall func()"); apply_type(0x0068BF20, "CGxDevice* __stdcall func()"); apply_type(0x0068C220, "CGxDevice* __stdcall func()"); + apply_type(0x0068E450, "void __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x0068E4A0, "void __thiscall func(CGxDeviceD3d* this, uint32_t level)"); + apply_type(0x0068E4C0, "void __thiscall func(CGxDeviceD3d* this, float gamma)"); + apply_type(0x0068E570, "void __thiscall func(CGxDeviceD3d* this, char* buffer, uint32_t size)"); + apply_type(0x0068E720, "void __thiscall func(CGxDeviceD3d* this, CGxPool* this)"); + apply_type(0x0068E750, "void __thiscall func(CGxDeviceD3d* this, int32_t visible)"); + apply_type(0x0068E7E0, "void __thiscall func(CGxDeviceD3d* this, uint32_t x, uint32_t y)"); + apply_type(0x0068E810, "void __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x0068E900, "void __thiscall func(CGxDeviceD3d* this, CGxFormat* format)"); + apply_type(0x0068E980, "void __thiscall func(CGxDeviceD3d* this, float c)"); + apply_type(0x0068E9A0, "void __thiscall func(CGxDeviceD3d* this, float s)"); + apply_type(0x0068E9C0, "void __thiscall func(CGxDeviceD3d* this, CGxQuery** query, EGxQueryType queryType)"); + apply_type(0x0068EA10, "bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query)"); + apply_type(0x0068EA90, "bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query, EGxQueryParam param, uint32_t* data)"); + apply_type(0x0068F770, "void __thiscall func(CGxDeviceD3d* this, EGxBuffer buffer, CGxTex* texture, uint32_t plane)"); + apply_type(0x0068F900, "void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)"); + apply_type(0x0068F950, "void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, int32_t a2, CGxTex* a3, int32_t a4)"); + apply_type(0x0068FAE0, "int32_t __thiscall func(CGxDeviceD3d* this, CGxBuf* buf, uint32_t size)"); + apply_type(0x0068FCE0, "char* __thiscall func(CGxDeviceD3d* this, CGxBuf* buf)"); + apply_type(0x0068FD00, "void __thiscall func(CGxDeviceD3d* this, CGxBuf* buf, const void* data, uint32_t size, uint32_t offset)"); + apply_type(0x0068FD50, "void __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x0068FE80, "void __thiscall func(CGxDeviceD3d* this, uint8_t __flags)"); + apply_type(0x0068FED0, "void __thiscall func(CGxDeviceD3d* this, CiRect* rect, TSGrowableArray_CImVector* pixels)"); + apply_type(0x00690230, "void __thiscall func(CGxDeviceD3d* this, EGxWM wm, int32_t param1, int32_t param2)"); + apply_type(0x006904D0, "int32_t __thiscall func(CGxDeviceD3d* this, CGxFormat* format)"); + apply_type(0x006905F0, "void __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x00690750, "void __thiscall func(CGxDeviceD3d* this, int32_t (*windowProc)(void*, uint32_t, uintptr_t, intptr_t), CGxFormat* format)"); + apply_type(0x00690830, "void __thiscall func(CGxDeviceD3d* this, uintptr_t hwnd, CGxFormat* format)"); + apply_type(0x0069FE80, "void __thiscall func(CGxDeviceD3d* this, CGxGammaRamp* ramp)"); + apply_type(0x0069FED0, "void* __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x0069FF40, "void __thiscall func(CGxDeviceD3d* this, EGxOverride override, uint32_t value)"); + apply_type(0x0069FF80, "void __thiscall func(CGxDeviceD3d* this, CGxPool* pool, uint32_t size)"); + apply_type(0x006A00C0, "void __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x006A0110, "float __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x006A0120, "float __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x006A0130, "bool __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x006A0190, "bool __thiscall func(CGxDeviceD3d* this, CGxQuery** query)"); + apply_type(0x006A0240, "bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query)"); + apply_type(0x006A0310, "bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query, uint32_t* data)"); + apply_type(0x006A1950, "void __thiscall func(CGxDeviceD3d* this, CiRect* rect, TSGrowableArray_float* depths)"); + apply_type(0x006A2BB0, "void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)"); + apply_type(0x006A3070, "void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)"); + apply_type(0x006A30D0, "void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, CGxTex* a2, C2iVector* a3, C2iVector* a4, uint32_t a5, uint32_t a6)"); + apply_type(0x006A31E0, "void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, CGxTex* a2, CiRect* a3, CiRect* a4, uint32_t a5, uint32_t a6)"); + apply_type(0x006A3450, "void __thiscall func(CGxDeviceD3d* this, uint32_t mask)"); + apply_type(0x006A3620, "void __thiscall func(CGxDeviceD3d* this, CGxBatch* batch)"); + apply_type(0x006A4C30, "void __thiscall func(CGxDeviceD3d* this, EGxRenderState rs)"); + apply_type(0x006A5A00, "void __thiscall func(CGxDeviceD3d* this, CRect* dst)"); apply_type(0x006A5A30, "void __thiscall func(CGxDeviceD3d* this)"); + apply_type(0x006A5D50, "void __thiscall func(CGxDeviceD3d* this, CGxShader* shader, const char* a2, const char* a3)"); + apply_type(0x006A5E10, "void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)"); apply_type(0x006A5EF0, "void __thiscall func(CGxDevice* this, CGxTex* texId, uint32_t* width, uint32_t* height, uint32_t* baseMip, uint32_t* mipCount)"); + apply_type(0x006A74B0, "void __thiscall func(CGxDeviceD3d* this, uint32_t mask, CImVector color)"); + apply_type(0x006A9920, "void __thiscall func(CGxDeviceD3d* this, CRect* dst)"); + apply_type(0x006A9B40, "void __thiscall func(CGxDeviceD3d* this, C44Matrix* matrix)"); + apply_type(0x006A9E00, "void __thiscall func(CGxDeviceD3d* this, C44Matrix* matrix)"); + apply_type(0x006AA070, "void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)"); + apply_type(0x006AA0D0, "void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)"); + apply_type(0x006AA130, "void __thiscall func(CGxShader** shaders, EGxShTarget target, char* a3, char* a4, int32_t permutations)"); + apply_type(0x006AA190, "void __thiscall func(CGxDeviceD3d* this, CGxShader** shader)"); apply_type(0x006AA3B0, "int32_t __thiscall func(CTgaFile* this)"); apply_type(0x006AA3E0, "uint32_t __thiscall func(CTgaFile* this)"); apply_type(0x006AA420, "void __thiscall func(CTgaFile* this, uint8_t* pAlphaData, uint8_t* pNoAlphaData, uint8_t* alpha)"); @@ -187,6 +262,7 @@ static import_data_types() { apply_type(0x0077C720, "void __stdcall func(BigBuffer* a, BigBuffer* b, BigBuffer* c, BigBuffer* d, BigStack* stack)"); apply_type(0x0077C980, "void __stdcall func(BigData* a, BigData* b, BigData* c, BigData* d)"); apply_type(0x00819EA0, "void __stdcall func(int32_t function, FrameScript_Object* object, int32_t args, char* args_fmt, FrameScript_EventObject* eventObject)"); + apply_type(0x0086E200, "void __thiscall func(TSExplicitList_CGxBuf* this, CGxBuf* ptr)"); apply_type(0x0095F3A0, "void __thiscall func(CSimpleModel* this)"); apply_type(0x0095F420, "FrameScript_Object__ScriptIx* __thiscall func(CSimpleModel* this, char* name, FrameScript_Object__ScriptData* data)"); apply_type(0x0095F4D0, "void __stdcall func(CM2Model* model, void* arg)"); diff --git a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc index 3a26732..d57407d 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc @@ -189,6 +189,7 @@ static import_symbols() { set_name(0x004C33C0, "C44Matrix__Rotate"); set_name(0x004C3420, "C3Vector__Normalize_1"); set_name(0x004C3600, "C3Vector__Normalize_2"); + set_name(0x004C4B80, "TSGrowableArray_C3Vector__SetCount"); set_name(0x004C51B0, "C33Matrix__operator_assign_C33Matrix"); set_name(0x004D7F60, "CGlueMgr__SetCurrentAccount"); set_name(0x004D80C0, "CGlueMgr__DisplayLoginStatus"); @@ -1081,6 +1082,7 @@ static import_symbols() { set_name(0x0057F1B0, "Script_GetTrackingInfo"); set_name(0x0057F380, "Script_SetTracking"); set_name(0x0057F4F0, "Script_GetTrackingTexture"); + set_name(0x0057FDD0, "TSGrowableArray_C2Vector__SetCount"); set_name(0x005841D0, "Script_GetMerchantNumItems"); set_name(0x00584200, "Script_GetMerchantItemLink"); set_name(0x005842D0, "Script_GetMerchantItemMaxStack"); @@ -2092,6 +2094,7 @@ static import_symbols() { set_name(0x006163B0, "CursorInitialize"); set_name(0x00616800, "CursorSetMode"); set_name(0x00616AD0, "GxXformPush_EGxXform_C44Matrix"); + set_name(0x00616CA0, "TSGrowableArray_CImVector__SetCount"); set_name(0x00632050, "nullsub_4"); set_name(0x00653A10, "nullsub_5"); set_name(0x00681290, "GxDevCreate"); @@ -2109,8 +2112,8 @@ static import_symbols() { set_name(0x00682400, "GxPrimVertexPtr@2"); set_name(0x006828C0, "GxPrimLockVertexPtrs"); set_name(0x00682A00, "GxScenePresent"); - set_name(0x00682CB0, "CGxDevice__DeviceCreate_WindowProc_CGxFormat"); - set_name(0x00682CD0, "CGxDevice__DeviceCreate_CGxFormat"); + set_name(0x00682CB0, "CGxDevice__DeviceCreate"); + set_name(0x00682CD0, "CGxDevice__DeviceCreate@2"); set_name(0x00682CF0, "CGxDevice__DeviceDestroy"); set_name(0x00682D00, "CGxDevice__DeviceSetBaseMipLevel"); set_name(0x00682D20, "CGxDevice__DeviceApi"); @@ -2122,6 +2125,8 @@ static import_symbols() { set_name(0x00682E50, "CGxDevice__ScenePresent"); set_name(0x00682F10, "CGxDevice__PrimIndexPtr"); set_name(0x00682F40, "CGxDevice__PrimCalcCount"); + set_name(0x00682F70, "CGxDevice__PrimNormal"); + set_name(0x00682FA0, "CGxDevice__PrimTexCoord"); set_name(0x00683080, "CGxDevice__LightEnable"); set_name(0x006830B0, "CGxDevice__NeedsUpdate"); set_name(0x00683100, "CGxDevice__MasterEnable"); @@ -2138,14 +2143,17 @@ static import_symbols() { set_name(0x00683650, "CGxDevice__CursorLock"); set_name(0x00683660, "CGxDevice__CursorSetDepth"); set_name(0x006840F0, "CGxDevice__DeviceSetFormat"); - set_name(0x00684170, "CGxDevice__DeviceSetGamma_float"); - set_name(0x00684190, "CGxDevice__DeviceSetGamma_CGxGammaRamp"); + set_name(0x00684170, "CGxDevice__DeviceSetGamma"); + set_name(0x00684190, "CGxDevice__DeviceSetGamma@2"); set_name(0x00684260, "CGxDevice__DeviceReadScreenShot"); + set_name(0x006842A0, "CGxDevice__DeviceSetRenderTarget"); set_name(0x00684360, "CGxDevice__DeviceSetDefWindow"); set_name(0x006843B0, "CGxDevice__NotifyOnDeviceRestored"); set_name(0x006843E0, "CGxDevice__NotifyOnTextureRecreation"); set_name(0x00684410, "CGxDevice__NotifyOnStereoChanged"); set_name(0x00684440, "CGxDevice__ClipPlaneSet"); + set_name(0x00684590, "CGxDevice__PrimColor"); + set_name(0x006845B0, "CGxDevice__PrimDrawElements"); set_name(0x006847D0, "CGxDevice__LightSet"); set_name(0x00684850, "CGxDevice__BufStream"); set_name(0x006848A0, "CGxDevice__TexMarkForUpdate"); @@ -2156,12 +2164,15 @@ static import_symbols() { set_name(0x00684C20, "CGxDevice__Log"); set_name(0x00684C40, "CGxDevice__Log_CGxCaps"); set_name(0x00684D10, "CGxDevice__Log_CGxFormat"); + set_name(0x00684FE0, "CGxDevice__DeviceOverride"); set_name(0x006853B0, "CGxDevice__AddDeviceRestoredCallback"); set_name(0x006853D0, "CGxDevice__RemoveDeviceRestoredCallback"); set_name(0x00685460, "CGxDevice__AddTextureRecreationCallback"); set_name(0x00685480, "CGxDevice__RemoveTextureRecreationCallback"); set_name(0x00685510, "CGxDevice__AddStereoChangedCallback"); set_name(0x00685530, "CGxDevice__RemoveStereoChangedCallback"); + set_name(0x006855C0, "CGxDevice__PrimBegin"); + set_name(0x00685640, "CGxDevice__PrimVertex"); set_name(0x00685970, "CGxDevice__IRsDirty"); set_name(0x006859E0, "CGxDevice__IRsForceUpdate_EGxRenderState"); set_name(0x00685A70, "CGxDevice__IRsForceUpdate"); @@ -2172,9 +2183,15 @@ static import_symbols() { set_name(0x00685FB0, "CGxDevice__RsPop"); set_name(0x00687660, "CGxDevice__BufCreate"); set_name(0x006876D0, "CGxDevice__PoolCreate"); + set_name(0x006877C0, "CGxDevice__QueryCreate"); + set_name(0x00687820, "CGxDevice__ShaderDestroy"); + set_name(0x00687980, "CGxDevice__TexDestroy"); + set_name(0x006879F0, "CGxDevice__QueryDestroy"); set_name(0x00687A90, "CGxDevice__ICursorDraw"); set_name(0x00688340, "CGxDevice__PoolDestroy"); set_name(0x00688690, "CGxDevice__CGxDevice"); + set_name(0x00689040, "CGxDevice__XformSetProjection"); + set_name(0x00689050, "CGxDevice__XformSetView"); set_name(0x006890C0, "CGxDevice__destructor"); set_name(0x00689690, "CGxDevice__scalar_deleting_destructor"); set_name(0x006897C0, "CGxDevice__ShaderCreate"); @@ -2185,34 +2202,65 @@ static import_symbols() { set_name(0x0068C220, "CGxDevice__NewD3d9Ex"); set_name(0x0068E180, "CGxDeviceD3d__ICreateD3dIB"); set_name(0x0068E250, "CGxDeviceD3d__ISetPresentParms"); + set_name(0x0068E450, "CGxDeviceD3d__DeviceEvictResources"); + set_name(0x0068E4A0, "CGxDeviceD3d__DeviceSetBaseMipLevel"); + set_name(0x0068E4C0, "CGxDeviceD3d__DeviceSetGamma"); + set_name(0x0068E570, "CGxDeviceD3d__LogCrashInfo"); set_name(0x0068E720, "CGxDeviceD3d__PoolDestroy"); set_name(0x0068E750, "CGxDeviceD3d__CursorSetVisible"); + set_name(0x0068E7E0, "CGxDeviceD3d__CursorUnlock"); set_name(0x0068E810, "CGxDeviceD3d__ICursorDraw"); set_name(0x0068E900, "CGxDeviceD3d__ICursorCreate"); + set_name(0x0068E980, "CGxDeviceD3d__StereoSetConvergence"); + set_name(0x0068E9A0, "CGxDeviceD3d__StereoSetSeparation"); + set_name(0x0068E9C0, "CGxDeviceD3d__QueryCreate"); + set_name(0x0068EA10, "CGxDeviceD3d__QueryBegin"); + set_name(0x0068EA90, "CGxDeviceD3d__QueryGetParam"); set_name(0x0068EBB0, "CGxDeviceD3d__ICreateWindow"); set_name(0x0068ED80, "CGxDeviceD3d__ILoadD3dLib"); set_name(0x0068EE20, "CGxDeviceD3d__ISetCaps"); set_name(0x0068F3D0, "CGxDeviceD3d__ICreateD3dDevice"); + set_name(0x0068F770, "CGxDeviceD3d__DeviceSetRenderTarget"); + set_name(0x0068F900, "CGxDeviceD3d__DeviceResolveDepthBuffer"); + set_name(0x0068F950, "CGxDeviceD3d__DeviceCopyTex"); set_name(0x0068FA60, "CGxDeviceD3d__IBufUnlock"); set_name(0x0068FAE0, "CGxDeviceD3d__BufUnlock"); set_name(0x0068FB10, "CGxDeviceD3d__IBufLock"); set_name(0x0068FCE0, "CGxDeviceD3d__BufLock"); set_name(0x0068FD00, "CGxDeviceD3d__BufData"); set_name(0x0068FD50, "CGxDeviceD3d__CGxDeviceD3d"); + set_name(0x0068FE80, "CGxDeviceD3d__scalar_deleting_destructor"); + set_name(0x0068FED0, "CGxDeviceD3d__DeviceReadPixels"); set_name(0x00690150, "CGxDeviceD3d__IReleaseD3dResources"); set_name(0x00690230, "CGxDeviceD3d__DeviceWM"); set_name(0x006904D0, "CGxDeviceD3d__DeviceSetFormat"); + set_name(0x006905F0, "CGxDeviceD3d__DeviceDestroy"); set_name(0x00690680, "CGxDeviceD3d__ICreateD3d"); - set_name(0x00690750, "CGxDeviceD3d__DeviceCreate_WindowProc_CGxFormat"); + set_name(0x00690750, "CGxDeviceD3d__DeviceCreate"); + set_name(0x00690830, "CGxDeviceD3d__DeviceCreate@2"); set_name(0x0069FB00, "CGxDeviceD3d__ICreateD3dVB"); set_name(0x0069FB70, "CGxDeviceD3d__CreatePoolAPI"); set_name(0x0069FE10, "CGxDeviceD3d__ICursorClip"); + set_name(0x0069FE80, "CGxDeviceD3d__DeviceSetGamma@2"); + set_name(0x0069FED0, "CGxDeviceD3d__DeviceWindow"); + set_name(0x0069FF40, "CGxDeviceD3d__DeviceOverride"); + set_name(0x0069FF80, "CGxDeviceD3d__PoolSizeSet"); set_name(0x006A00C0, "CGxDeviceD3d__ICursorDestroy"); + set_name(0x006A0110, "CGxDeviceD3d__StereoGetConvergence"); + set_name(0x006A0120, "CGxDeviceD3d__StereoGetSeparation"); + set_name(0x006A0130, "CGxDeviceD3d__StereoEnabled"); + set_name(0x006A0190, "CGxDeviceD3d__QueryDestroy"); + set_name(0x006A0240, "CGxDeviceD3d__QueryEnd"); + set_name(0x006A0310, "CGxDeviceD3d__QueryGetData"); set_name(0x006A0360, "CGxDeviceD3d__WindowProcD3d"); + set_name(0x006A1950, "CGxDeviceD3d__DeviceReadDepths"); set_name(0x006A1A90, "CGxDeviceD3d9Ex__CGxDeviceD3d9Ex"); + set_name(0x006A2BB0, "CGxDeviceD3d__TexDestroy"); set_name(0x006A2C00, "CGxDeviceD3d__ITexCreate"); set_name(0x006A2D80, "CGxDeviceD3d__ITexUpload"); set_name(0x006A3070, "CGxDeviceD3d__ITexMarkAsUpdated"); + set_name(0x006A30D0, "CGxDeviceD3d__TexCopy"); + set_name(0x006A31E0, "CGxDeviceD3d__TexStretch"); set_name(0x006A3350, "CGxDeviceD3d__ISceneBegin"); set_name(0x006A3420, "CGxDeviceD3d__ISceneEnd"); set_name(0x006A3450, "CGxDeviceD3d__ScenePresent"); @@ -2233,6 +2281,7 @@ static import_symbols() { set_name(0x006A5A00, "CGxDeviceD3d__CapsWindowSize"); set_name(0x006A5A30, "CGxDeviceD3d__IXformSetWorld"); set_name(0x006A5C70, "CGxDeviceD3d__IBindPixelShader"); + set_name(0x006A5D50, "CGxDeviceD3d__IShaderReload"); set_name(0x006A5E10, "CGxDeviceD3d__IShaderCreate"); set_name(0x006A5EF0, "CGxDevice__ITexWHDStartEnd"); set_name(0x006A74B0, "CGxDeviceD3d__SceneClear"); @@ -2243,6 +2292,7 @@ static import_symbols() { set_name(0x006AA070, "CGxDeviceD3d__IShaderCreatePixel"); set_name(0x006AA0D0, "CGxDeviceD3d__IShaderCreateVertex"); set_name(0x006AA130, "CGxDeviceD3d__ShaderCreate"); + set_name(0x006AA190, "CGxDeviceD3d__ShaderDestroy"); set_name(0x006AA2F0, "CGxDeviceD3d__IBindVertexShader"); set_name(0x006AA350, "CTgaFile__ColorMapEntryBytes"); set_name(0x006AA380, "CTgaFile__ColorMapBytes"); @@ -2544,6 +2594,7 @@ static import_symbols() { set_name(0x0086C6A0, "OsGuiGetWindow"); set_name(0x0086D0A0, "OsIMEInitialize"); set_name(0x0086D0C0, "OsIMEDestroy"); + set_name(0x0086E200, "TSExplicitList_CGxBuf__LinkToTail"); set_name(0x0086F5A0, "OsCallSetContext"); set_name(0x0086F760, "OsCallInitialize"); set_name(0x0086F880, "OsCallInitializeContext"); diff --git a/profile/3.3.5a-windows-386/include/gx/device.h b/profile/3.3.5a-windows-386/include/gx/device.h index f6ac61f..97ac1db 100644 --- a/profile/3.3.5a-windows-386/include/gx/device.h +++ b/profile/3.3.5a-windows-386/include/gx/device.h @@ -23,11 +23,13 @@ #include "gx/matrix_stack.h" #include "gx/buffer.h" #include "gx/texture.h" +#include "gx/query.h" DECLARE_STRUCT(CGxAppRenderState); DECLARE_STRUCT(CGxPushedRenderState); DECLARE_STRUCT(ShaderConstants); DECLARE_STRUCT(CGxDevice); +DECLARE_STRUCT(CGxDevice__TextureTarget); DECLARE_STRUCT(CGxDevice__vtable); typedef void (*DEVICERESTOREDCALLBACK)(); @@ -59,6 +61,12 @@ struct ShaderConstants { uint32_t unk2; }; +struct CGxDevice__TextureTarget { + CGxTex* m_texture; + uint32_t m_plane; + void* m_apiSpecific; +}; + // 84 functions struct CGxDevice__vtable { // void ITexMarkAsUpdated(CGxTex* texId); @@ -84,7 +92,7 @@ struct CGxDevice__vtable { void* v_fn_7_NotifyOnStereoChanged; // void `scalar deleting destructor'(uint32_t __flags) void* v_fn_8_scalar_deleting_destructor; - // int32_t DeviceCreate(const CGxFormat& format); + // int32_t DeviceCreate(uintptr_t hwnd, const CGxFormat& format); void* v_fn_9_DeviceCreate; // int32_t DeviceCreate(long (*windowProc)(void*, uint32_t, uint32_t, int32_t), CGxFormat const& format); void* v_fn_10_DeviceCreate; @@ -96,7 +104,7 @@ struct CGxDevice__vtable { void* v_fn_13_DeviceSetFormat; // void DeviceSetBaseMipLevel(uint32_t mipLevel); void* v_fn_14_DeviceSetBaseMipLevel; - // void DeviceSetGamma(CGxGammaRamp const& ramp); + // void DeviceSetGamma(const CGxGammaRamp& ramp); void* v_fn_15_DeviceSetGamma; // void DeviceSetGamma(float gamma); void* v_fn_16_DeviceSetGamma; @@ -167,7 +175,7 @@ struct CGxDevice__vtable { void* v_fn_40_XformSetProjection; // void XformSetView(const C44Matrix& matrix); void* v_fn_41_XformSetView; - // void Draw(CGxBatch*, int32_t); + // void Draw(CGxBatch* batch, int32_t indexed); void* v_fn_42_Draw; // void PrimBegin(EGxPrim primType); void* v_fn_43_PrimBegin; @@ -201,7 +209,7 @@ struct CGxDevice__vtable { void* v_fn_57_TexCreate; // void TexDestroy(CGxTex* texId); void* v_fn_58_TexDestroy; - // int32_t TexCopy(CGxTex* a1, CGxTex* a2, const C2iVector& a3, const C2iVector& a4, const C2iVector& a5, uint32_t a6); + // int32_t TexCopy(CGxTex* a1, CGxTex* a2, const C2iVector& a3, const C2iVector& a4, uint32_t a5, uint32_t a6); void* v_fn_59_TexCopy; // bool TexStretch(CGxTex* a1, CGxTex* a2, const CiRect* a3, const CiRect* a4, uint32_t a5, uint32_t a6); void* v_fn_60_TexStretch; @@ -209,7 +217,7 @@ struct CGxDevice__vtable { void* v_fn_61_TexSetCacheSize; // void QueryCreate(CGxQuery*& query, EGxQueryType queryType); void* v_fn_62_QueryCreate; - // bool QueryDestroy(CGxQuery* query); + // bool QueryDestroy(CGxQuery*& query); void* v_fn_63_QueryDestroy; // bool QueryBegin(CGxQuery* query); void* v_fn_64_QueryBegin; @@ -219,10 +227,10 @@ struct CGxDevice__vtable { void* v_fn_66_QueryGetParam; // bool QueryGetData(CGxQuery* query, uint32_t* data); void* v_fn_67_QueryGetData; - // void ShaderCreate(CGxShader*[] shaders, EGxShTarget target, const char* a3, const char* a4, int32_t permutations); + // void ShaderCreate(CGxShader*[] shaders[], EGxShTarget target, const char* a3, const char* a4, int32_t permutations); void* v_fn_68_ShaderCreate; - // void ShaderRelease(CGxShader*& shader); - void* v_fn_69_ShaderRelease; + // void ShaderDestroy(CGxShader*& shader); + void* v_fn_69_ShaderDestroy; // void ShaderConstantsSet(EGxShTarget target, uint32_t index, const float* constraints, uint32_t count); void* v_fn_70_ShaderConstantsSet; // void IShaderReload(CGxShader* shader, const char* a2, const char* a3); @@ -237,7 +245,7 @@ struct CGxDevice__vtable { void* v_fn_75_CursorUnlock; // void StereoSetConvergence(float c); void* v_fn_76_StereoSetConvergence; - // double StereoGetConvergence(); + // float StereoGetConvergence(); void* v_fn_77_StereoGetConvergence; // void StereoSetSeparation(float s); void* v_fn_78_StereoSetSeparation; @@ -261,7 +269,8 @@ struct CGxDevice { TSGrowableArray_uint32_t m_stackOffsets; // 0x18 (size: 0x14) TSGrowableArray_EGxRenderState m_dirtyStates; // 0x2C (size: 0x14) EGxPrim m_primType; - uint32_t m_unk38[2]; // m_indexLocked-m_vertexLocked? + int32_t m_indexLocked; + int32_t m_vertexLocked; int32_t m_inBeginEnd; C3Vector m_primVertex; C2Vector m_primTexCoord[8]; @@ -329,7 +338,7 @@ struct CGxDevice { uint32_t unk28C8; uint32_t unk28CC; uint32_t unk28D0; - uint32_t unk28D4; + uint8_t unk28D4; uint32_t unk28D8; uint32_t unk28DC; uint32_t unk28E0; @@ -337,13 +346,15 @@ struct CGxDevice { uint32_t unk28E8; TSFixedArray_CGxAppRenderState m_appRenderStates; TSFixedArray_CGxStateBom m_hwRenderStates; - uint32_t unk2904[12]; // 0x2904 (size 0x30) + uint32_t unk2904[3]; // 0x2904 (size 0xC) + CGxDevice__TextureTarget m_textureTarget[2]; + TSExplicitList_CGxQuery m_queryList; // 0x2928 int32_t m_scrShotClick; // 0x2934 uint32_t m_scrShotWidth; // 0x2938 uint32_t m_scrShotHeight; // 0x293C TSGrowableArray_CImVector m_scrShotPixels; // 0x2940 int32_t m_cursorVisible; - int32_t m_hardwareCursor; // 0x2954 (size 0x4) + int32_t m_hwCursor; // 0x2954 (size 0x4) uint32_t m_cursorHotspotX; uint32_t m_cursorHotspotY; uint32_t m_cursor[1024]; // 0x2960 (size 0x4) diff --git a/profile/3.3.5a-windows-386/include/gx/query.h b/profile/3.3.5a-windows-386/include/gx/query.h new file mode 100644 index 0000000..a731656 --- /dev/null +++ b/profile/3.3.5a-windows-386/include/gx/query.h @@ -0,0 +1,16 @@ +#ifndef GX_QUERY_H +#define GX_QUERY_H + +DECLARE_STRUCT(CGxQuery); + +#include "storm/list.h" +#include "gx/types.h" + +STORM_TS_LIST(CGxQuery); +struct CGxQuery { + void* m_apiSpecific; + EGxQueryType m_type; + TSLink_CGxQuery m_link; +}; + +#endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/include/gx/types.h b/profile/3.3.5a-windows-386/include/gx/types.h index 08208bb..1e768c8 100644 --- a/profile/3.3.5a-windows-386/include/gx/types.h +++ b/profile/3.3.5a-windows-386/include/gx/types.h @@ -9,16 +9,19 @@ DECLARE_ENUM(BlitAlpha); DECLARE_ENUM(BlitFormat); DECLARE_ENUM(EGxApi); DECLARE_ENUM(EGxBlend); +DECLARE_ENUM(EGxBuffer); DECLARE_ENUM(EGxColorFormat); DECLARE_ENUM(EGxFontHJusts); DECLARE_ENUM(EGxFontVJusts); DECLARE_ENUM(EGxMasterEnables); +DECLARE_ENUM(EGxOverride); DECLARE_ENUM(EGxPrim); DECLARE_ENUM(EGxPrimMask); DECLARE_ENUM(EGxRenderState); DECLARE_ENUM(EGxShPS); DECLARE_ENUM(EGxShTarget); DECLARE_ENUM(EGxShVS); +DECLARE_ENUM(EGxQueryType); DECLARE_ENUM(EGxTexCommand); DECLARE_ENUM(EGxTexFilter); DECLARE_ENUM(EGxTexFormat); @@ -86,6 +89,12 @@ enum EGxBlend { GxBlends_Last = 12 }; +enum EGxBuffer { + GxBuffers_Color = 0, + GxBuffers_Depth = 1, + GxBuffers_Last = 2 +}; + enum EGxColorFormat { GxCF_argb = 0, GxCF_rgba = 1, @@ -119,6 +128,19 @@ enum EGxMasterEnables { GxMasterEnables_Last = 9 }; +enum EGxOverride { + GxOverride_PixelShader = 0, + GxOverride_Unk1 = 1, + GxOverride_Unk2 = 2, + GxOverride_Unk3 = 3, + GxOverride_Unk4 = 4, + GxOverride_Unk5 = 5, + GxOverride_Unk6 = 6, + GxOverride_Unk7 = 7, + GxOverride_Unk8 = 8, + GxOverrides_Last = 9 +}; + enum EGxPrim { GxPrim_Points = 0, GxPrim_Lines = 1, @@ -322,6 +344,7 @@ enum EGxTexWrapMode { enum EGxQueryType { GxQueryType_Occlusion = 0, + // TODO }; enum EGxXform { diff --git a/profile/3.3.5a-windows-386/include/main.h b/profile/3.3.5a-windows-386/include/main.h index 3071e63..79102c9 100644 --- a/profile/3.3.5a-windows-386/include/main.h +++ b/profile/3.3.5a-windows-386/include/main.h @@ -53,6 +53,7 @@ #include "gx/types.h" #include "gx/batch.h" #include "gx/d3d9.h" +#include "gx/query.h" #include "m2/cache.h" #include "m2/data.h" @@ -107,6 +108,7 @@ #include "storm/array/pointer_to_void.h" #include "storm/array/uint8_t.h" #include "storm/array/uint32_t.h" +#include "storm/array/float.h" #include "storm/queue/timer_priority_uint32_t.h" diff --git a/profile/3.3.5a-windows-386/include/storm/array/float.h b/profile/3.3.5a-windows-386/include/storm/array/float.h new file mode 100644 index 0000000..9e0c57a --- /dev/null +++ b/profile/3.3.5a-windows-386/include/storm/array/float.h @@ -0,0 +1,10 @@ +#ifndef STORM_ARRAY_FLOAT_H +#define STORM_ARRAY_FLOAT_H + +#include "system/types.h" + +#include "storm/array.h" + +STORM_TS_GROWABLE_ARRAY(float); + +#endif \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/gxbuf/func.sym b/profile/3.3.5a-windows-386/symbol/gxbuf/func.sym new file mode 100644 index 0000000..214ba6e --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/gxbuf/func.sym @@ -0,0 +1 @@ +TSExplicitList_CGxBuf__LinkToTail 0086E200 f end=0086E25F type="void __thiscall func(TSExplicitList_CGxBuf* this, CGxBuf* ptr)" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym b/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym index 5f971c0..fe373dd 100644 --- a/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym +++ b/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym @@ -1,10 +1,11 @@ CGxDevice__RsPush 00409670 f end=004096CC type="void __thiscall func(CGxDevice* this)" CGxDevice__Caps 00532AF0 f end=00532AF7 type="CGxCaps* __thiscall func(CGxDevice* this)" ; public: class CGxCaps const & __thiscall CGxDevice::Caps(void)const -CGxDevice__DeviceCreate_WindowProc_CGxFormat 00682CB0 f end=00682CCB type="void __thiscall func(CGxDevice* this, int32_t (*windowProc)(void*, uint32_t, uintptr_t, intptr_t), CGxFormat* format)" -CGxDevice__DeviceCreate_CGxFormat 00682CD0 f end=00682CF0 type="void __thiscall func(CGxDevice* this, CGxFormat* format)" +CGxDevice__DeviceCreate 00682CB0 f end=00682CCB type="void __thiscall func(CGxDevice* this, int32_t (*windowProc)(void*, uint32_t, uintptr_t, intptr_t), CGxFormat* format)" +CGxDevice__DeviceCreate 00682CD0 f end=00682CF0 type="void __thiscall func(CGxDevice* this, uintptr_t hwnd, CGxFormat* format)" CGxDevice__DeviceDestroy 00682CF0 f end=00682CFB type="void __thiscall func(CGxDevice* this)" CGxDevice__DeviceSetBaseMipLevel 00682D00 f end=00682D10 type="void __thiscall func(CGxDevice* this, uint32_t baseMipLevel)" CGxDevice__DeviceApi 00682D20 f end=00682D27 type="EGxApi __thiscall func(CGxDevice* this)" +CGxDevice__DeviceTakeScreenShot 00682D30 f end=00682D3B type="void __thiscall func(CGxDevice* this)" CGxDevice__IDevIsWindowed 00682D40 f end=00682D48 type="int32_t __thiscall func(CGxDevice* this)" CGxDevice__DeviceCurWindow 00682D70 f end=00682D76 type="CRect* __thiscall func(CGxDevice* this)" CGxDevice__CapsIsWindowVisible 00682DC0 f end=00682DE7 type="int32_t __thiscall func(CGxDevice* this, int32_t a2)" @@ -12,6 +13,8 @@ CGxDevice__CapsHasContext 00682E20 f end=00682E47 type="int32_t __thiscall func( CGxDevice__ScenePresent 00682E50 f end=00682E66 type="void __thiscall func(CGxDevice* this)" CGxDevice__PrimIndexPtr 00682F10 f end=00682F3C type="void __thiscall func(CGxDevice* this, CGxBuf* buf)" CGxDevice__PrimCalcCount 00682F40 f end=00682F66 type="uint32_t __stdcall func(EGxPrim primType, uint32_t indexCount)" +CGxDevice__PrimNormal 00682F70 f end=00682F9E type="void __thiscall func(CGxDevice* this, C3Vector* n)" +CGxDevice__PrimTexCoord 00682FA0 f end=00682FCB type="void __thiscall func(CGxDevice* this, uint32_t tmu, C2Vector* t)" CGxDevice__LightEnable 00683080 f end=006830A4 type="void __thiscall func(CGxDevice* this, uint32_t whichLight, int32_t enable)" CGxDevice__NeedsUpdate 006830B0 f end=006830F9 type="int32_t __thiscall func(CGxDevice* this, uint32_t app, uint32_t hw, uint32_t appDisables, uint32_t hwDisables, uint32_t flagPos, int32_t* enable)" CGxDevice__MasterEnable 00683100 f end=00683121 type="int32_t __thiscall func(CGxDevice* this, EGxMasterEnables state)" @@ -28,13 +31,17 @@ CGxDevice__CursorSetVisible 00683640 f end=00683650 type="void __thiscall func(C CGxDevice__CursorLock 00683650 f end=00683657 type="uint32_t* __thiscall func(CGxDevice* this)" CGxDevice__CursorSetDepth 00683660 f end=00683670 type="void __thiscall func(CGxDevice* this, float depth)" CGxDevice__DeviceSetFormat 006840F0 f end=0068416C type="int32_t __thiscall func(CGxDevice* this, CGxFormat* format)" -CGxDevice__DeviceSetGamma_float 00684170 f end=00684189 type="void __thiscall func(CGxDevice* this, float gamma)" -CGxDevice__DeviceSetGamma_CGxGammaRamp 00684190 f end=006841AF type="int32_t __thiscall func(CGxDevice* this, CGxGammaRamp* ramp)" +CGxDevice__DeviceSetGamma 00684170 f end=00684189 type="void __thiscall func(CGxDevice* this, float gamma)" +CGxDevice__DeviceSetGamma 00684190 f end=006841AF type="int32_t __thiscall func(CGxDevice* this, CGxGammaRamp* ramp)" +CGxDevice__DeviceReadScreenShot 00684260 f end=0068429E type="void __thiscall func(CGxDevice* this, uint32_t* w, uint32_t* h, CImVector** pixels)" +CGxDevice__DeviceSetRenderTarget 006842A0 f end=0068435D type="void __thiscall func(CGxDevice* this, EGxBuffer buffer, CGxTex* texture, uint32_t plane)" CGxDevice__DeviceSetDefWindow 00684360 f end=006843B0 type="void __thiscall func(CGxDevice* this, CRect* rect)" CGxDevice__NotifyOnDeviceRestored 006843B0 f end=006843D9 type="void __thiscall func(CGxDevice* this)" CGxDevice__NotifyOnTextureRecreation 006843E0 f end=00684409 type="void __thiscall func(CGxDevice* this)" CGxDevice__NotifyOnStereoChanged 00684410 f end=00684439 type="void __thiscall func(CGxDevice* this)" CGxDevice__ClipPlaneSet 00684440 f end=006844B9 type="void __thiscall func(CGxDevice* this, uint32_t a2, C4Plane* plane)" +CGxDevice__PrimColor 00684590 f end=006845AC type="void __thiscall func(CGxDevice* this, CImVector* c)" +CGxDevice__PrimDrawElements 006845B0 f end=0068461D type="void __thiscall func(CGxDevice* this)" CGxDevice__LightSet 006847D0 f end=00684843 type="void __thiscall func(CGxDevice* this, uint32_t a2, CGxLight* light, C3Vector* pos)" CGxDevice__BufStream 00684850 f end=0068489F type="void __thiscall func(CGxDevice* this, EGxPoolTarget target, uint32_t itemSize, uint32_t itemCount)" CGxDevice__TexMarkForUpdate 006848A0 f end=000684900 type="void __thiscall func(CGxDevice* this, CGxTex* texId, CiRect* updateRect, int32_t immediate)" @@ -45,12 +52,15 @@ CGxDevice__CursorUnlock 00684B50 f end=00684B99 type="void __thiscall func(CGxDe CGxDevice__Log 00684C20 f end=00684C3E type="void __stdcall func(char* format, ...)" CGxDevice__Log_CGxCaps 00684C40 f end=00684D07 type="void __stdcall func(CGxCaps* caps)" ; CGxDevice::Log(CGxCaps const&) const CGxDevice__Log_CGxFormat 00684D10 f end=00684D6C type="void __stdcall func(CGxFormat* format)" +CGxDevice__DeviceOverride 00684FE0 f end=00685036 type="void __thiscall func(CGxDevice* this, EGxOverride override, uint32_t value)" CGxDevice__AddDeviceRestoredCallback 006853B0 f end=006853C6 type="void __thiscall func(CGxDevice* this, DEVICERESTOREDCALLBACK fn)" CGxDevice__RemoveDeviceRestoredCallback 006853D0 f end=0068545C type="int32_t __thiscall func(CGxDevice* this, DEVICERESTOREDCALLBACK fn)" CGxDevice__AddTextureRecreationCallback 00685460 f end=00685476 type="void __thiscall func(CGxDevice* this, TEXTURERECREATIONCALLBACK fn)" CGxDevice__RemoveTextureRecreationCallback 00685480 f end=0068550C type="int32_t __thiscall func(CGxDevice* this, TEXTURERECREATIONCALLBACK fn)" CGxDevice__AddStereoChangedCallback 00685510 f end=00685526 type="void __thiscall func(CGxDevice* this, STEREOCHANGEDCALLBACK fn)" CGxDevice__RemoveStereoChangedCallback 00685530 f end=006855BC type="int32_t __thiscall func(CGxDevice* this, STEREOCHANGEDCALLBACK fn)" +CGxDevice__PrimBegin 006855C0 f end=00685638 type="void __thiscall func(CGxDevice* this, EGxPrim primType)" +CGxDevice__PrimVertex 00685640 f end=00685961 type="void __thiscall func(CGxDevice* this, C3Vector* v)" CGxDevice__IRsDirty 00685970 f end=006859DB type="void __thiscall func(CGxDevice* this, EGxRenderState which)" CGxDevice__IRsForceUpdate_EGxRenderState 006859E0 f end=00685A65 type="void __thiscall func(CGxDevice* this, EGxRenderState which)" ; CGxDevice::IRsForceUpdate(EGxRenderState) CGxDevice__IRsForceUpdate 00685A70 f end=00685B4E type="void __thiscall func(CGxDevice* this)" ; CGxDevice::IRsForceUpdate() @@ -61,15 +71,19 @@ CGxDevice__RsSet_pointer_to_void 00685F50 f end=00685FB0 type="void __thiscall f CGxDevice__RsPop 00685FB0 f end=00686116 type="void __thiscall func(CGxDevice* this)" CGxDevice__BufCreate 00687660 f end=006876C9 type="CGxBuf* __thiscall func(CGxDevice* this, CGxPool* pool, uint32_t itemSize, uint32_t itemCount, uint32_t index)" CGxDevice__PoolCreate 006876D0 f end=0068773F type="CGxPool* __thiscall func(CGxDevice* this, EGxPoolTarget target, EGxPoolUsage usage, uint32_t size, EGxPoolHintBits hint, char* name)" +CGxDevice__QueryCreate 006877C0 f end=00687811 type="void __thiscall func(CGxDevice* this, CGxQuery** query, EGxQueryType queryType)" +CGxDevice__ShaderDestroy 00687820 f end=00687862 type="void __thiscall func(CGxDevice* this, CGxShader** shader)" +CGxDevice__TexDestroy 00687980 f end=006879E1 type="void __thiscall func(CGxDevice* this, CGxTex* texId)" +CGxDevice__QueryDestroy 006879F0 f end=00687A8E type="void __thiscall func(CGxDevice* this, CGxQuery** query)" CGxDevice__ICursorDraw 00687A90 f end=00687FCA type="void __thiscall func(CGxDevice* this)" CGxDevice__PoolDestroy 00688340 f end=00688372 type="void __thiscall func(CGxDevice* this, CGxPool* pool)" CGxDevice__CGxDevice 00688690 f end=0068903F type="void __thiscall func(CGxDevice* this)" +CGxDevice__XformSetProjection 00689040 f end=0068904F type="void __thiscall func(CGxDevice* this, C44Matrix* matrix)" +CGxDevice__XformSetView 00689050 f end=006890C0 type="void __thiscall func(CGxDevice* this, C44Matrix* matrix)" CGxDevice__destructor 006890C0 f end=00689460 type="void __thiscall func(CGxDevice* this)" -CGxDevice__scalar_deleting_destructor 00689690 f end=006896BB type="void __thiscall func(CGxDevice *this, uint8_t __flags)" +CGxDevice__scalar_deleting_destructor 00689690 f end=006896BB type="void __thiscall func(CGxDevice* this, uint8_t __flags)" CGxDevice__ShaderCreate 006897C0 f end=00689A49 type="void __thiscall func(CGxDevice* this, CGxShader**, EGxShTarget, char*, char*, int32_t)" CGxDevice__NewD3d 00689EF0 f end=00689F14 type="CGxDevice* __stdcall func()" CGxDevice__NewOpenGl 0068BF20 f end=0068BF44 type="CGxDevice* __stdcall func()" CGxDevice__NewD3d9Ex 0068C220 f end=0068C244 type="CGxDevice* __stdcall func()" CGxDevice__ITexWHDStartEnd 006A5EF0 f end=006A5FDF type="void __thiscall func(CGxDevice* this, CGxTex* texId, uint32_t* width, uint32_t* height, uint32_t* baseMip, uint32_t* mipCount)" -CGxDevice__DeviceTakeScreenShot 00682D30 f end=00682D3B type="void __thiscall func(CGxDevice* this)" -CGxDevice__DeviceReadScreenShot 00684260 f end=0068429E type="void __thiscall func(CGxDevice* this, uint32_t* w, uint32_t* h, CImVector** pixels)" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/gxdeviced3d/func.sym b/profile/3.3.5a-windows-386/symbol/gxdeviced3d/func.sym index d184bd6..2b35d81 100644 --- a/profile/3.3.5a-windows-386/symbol/gxdeviced3d/func.sym +++ b/profile/3.3.5a-windows-386/symbol/gxdeviced3d/func.sym @@ -1,34 +1,67 @@ CGxDeviceD3d__ICreateD3dIB 0068E180 f end=0068E1E8 CGxDeviceD3d__ISetPresentParms 0068E250 f end=0068E448 -CGxDeviceD3d__PoolDestroy 0068E720 f end=0068E742 -CGxDeviceD3d__CursorSetVisible 0068E750 f end=0068E7D6 -CGxDeviceD3d__ICursorDraw 0068E810 f end=0068E8F2 -CGxDeviceD3d__ICursorCreate 0068E900 f end=0068E975 +CGxDeviceD3d__DeviceEvictResources 0068E450 f end=0068E49E type="void __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__DeviceSetBaseMipLevel 0068E4A0 f end=0068E4BD type="void __thiscall func(CGxDeviceD3d* this, uint32_t level)" +CGxDeviceD3d__DeviceSetGamma 0068E4C0 f end=0068E507 type="void __thiscall func(CGxDeviceD3d* this, float gamma)" +CGxDeviceD3d__LogCrashInfo 0068E570 f end=0068E719 type="void __thiscall func(CGxDeviceD3d* this, char* buffer, uint32_t size)" +CGxDeviceD3d__PoolDestroy 0068E720 f end=0068E742 type="void __thiscall func(CGxDeviceD3d* this, CGxPool* this)" +CGxDeviceD3d__CursorSetVisible 0068E750 f end=0068E7D6 type="void __thiscall func(CGxDeviceD3d* this, int32_t visible)" +CGxDeviceD3d__CursorUnlock 0068E7E0 f end=0068E804 type="void __thiscall func(CGxDeviceD3d* this, uint32_t x, uint32_t y)" +CGxDeviceD3d__ICursorDraw 0068E810 f end=0068E8F2 type="void __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__ICursorCreate 0068E900 f end=0068E975 type="void __thiscall func(CGxDeviceD3d* this, CGxFormat* format)" +CGxDeviceD3d__StereoSetConvergence 0068E980 f end=0068E99A type="void __thiscall func(CGxDeviceD3d* this, float c)" +CGxDeviceD3d__StereoSetSeparation 0068E9A0 f end=0068E9BA type="void __thiscall func(CGxDeviceD3d* this, float s)" +CGxDeviceD3d__QueryCreate 0068E9C0 f end=0068EA0A type="void __thiscall func(CGxDeviceD3d* this, CGxQuery** query, EGxQueryType queryType)" +CGxDeviceD3d__QueryBegin 0068EA10 f end=0068EA81 type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query)" +CGxDeviceD3d__QueryGetParam 0068EA90 f end=0068EB1D type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query, EGxQueryParam param, uint32_t* data)" CGxDeviceD3d__ICreateWindow 0068EBB0 f end=0068ED78 CGxDeviceD3d__ILoadD3dLib 0068ED80 f end=0068EE13 CGxDeviceD3d__ISetCaps 0068EE20 f end=0068F36D CGxDeviceD3d__ICreateD3dDevice 0068F3D0 f end=0068F692 +CGxDeviceD3d__DeviceSetRenderTarget 0068F770 f end=0068F8F2 type="void __thiscall func(CGxDeviceD3d* this, EGxBuffer buffer, CGxTex* texture, uint32_t plane)" +CGxDeviceD3d__DeviceResolveDepthBuffer 0068F900 f end=0068F94A type="void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)" +CGxDeviceD3d__DeviceCopyTex 0068F950 f end=0068FA5E type="void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, int32_t a2, CGxTex* a3, int32_t a4)" CGxDeviceD3d__IBufUnlock 0068FA60 f end=0068FADC -CGxDeviceD3d__BufUnlock 0068FAE0 f end=0068FB07 +CGxDeviceD3d__BufUnlock 0068FAE0 f end=0068FB07 type="int32_t __thiscall func(CGxDeviceD3d* this, CGxBuf* buf, uint32_t size)" CGxDeviceD3d__IBufLock 0068FB10 f end=0068FCDC -CGxDeviceD3d__BufLock 0068FCE0 f end=0068FCFE -CGxDeviceD3d__BufData 0068FD00 f end=0068FD49 -CGxDeviceD3d__CGxDeviceD3d 0068FD50 f end=0068FE80 -CGxDeviceD3d__DeviceWM 00690230 f end=0069038D -CGxDeviceD3d__DeviceSetFormat 006904D0 f end=006905E8 +CGxDeviceD3d__BufLock 0068FCE0 f end=0068FCFE type="char* __thiscall func(CGxDeviceD3d* this, CGxBuf* buf)" +CGxDeviceD3d__BufData 0068FD00 f end=0068FD49 type="void __thiscall func(CGxDeviceD3d* this, CGxBuf* buf, const void* data, uint32_t size, uint32_t offset)" +CGxDeviceD3d__CGxDeviceD3d 0068FD50 f end=0068FE80 type="void __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__scalar_deleting_destructor 0068FE80 f end=0068FEC8 type="void __thiscall func(CGxDeviceD3d* this, uint8_t __flags)" +CGxDeviceD3d__DeviceReadPixels 0068FED0 f end=00690144 type="void __thiscall func(CGxDeviceD3d* this, CiRect* rect, TSGrowableArray_CImVector* pixels)" +CGxDeviceD3d__IReleaseD3dResources 00690150 f end=00690223 +CGxDeviceD3d__DeviceWM 00690230 f end=0069038D type="void __thiscall func(CGxDeviceD3d* this, EGxWM wm, int32_t param1, int32_t param2)" +CGxDeviceD3d__DeviceSetFormat 006904D0 f end=006905E8 type="int32_t __thiscall func(CGxDeviceD3d* this, CGxFormat* format)" +CGxDeviceD3d__DeviceDestroy 006905F0 f end=00690679 type="void __thiscall func(CGxDeviceD3d* this)" CGxDeviceD3d__ICreateD3d 00690680 f end=00690742 -CGxDeviceD3d__DeviceCreate_WindowProc_CGxFormat 00690750 f end=00690821 +CGxDeviceD3d__DeviceCreate 00690750 f end=00690821 type="void __thiscall func(CGxDeviceD3d* this, int32_t (*windowProc)(void*, uint32_t, uintptr_t, intptr_t), CGxFormat* format)" +CGxDeviceD3d__DeviceCreate 00690830 f end=00690897 type="void __thiscall func(CGxDeviceD3d* this, uintptr_t hwnd, CGxFormat* format)" CGxDeviceD3d__ICreateD3dVB 0069FB00 f end=0069FB68 CGxDeviceD3d__CreatePoolAPI 0069FB70 f end=0069FBB8 -CGxDeviceD3d__ICursorDestroy 006A00C0 f end=006A0102 +CGxDeviceD3d__ICursorClip 0069FE10 f end=0069FE57 ; UC (invented name) +CGxDeviceD3d__DeviceSetGamma 0069FE80 f end=0069FEC4 type="void __thiscall func(CGxDeviceD3d* this, CGxGammaRamp* ramp)" +CGxDeviceD3d__DeviceWindow 0069FED0 f end=0069FED7 type="void* __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__DeviceOverride 0069FF40 f end=0069FF7F type="void __thiscall func(CGxDeviceD3d* this, EGxOverride override, uint32_t value)" +CGxDeviceD3d__PoolSizeSet 0069FF80 f end=0069FFCD type="void __thiscall func(CGxDeviceD3d* this, CGxPool* pool, uint32_t size)" +CGxDeviceD3d__ICursorDestroy 006A00C0 f end=006A0102 type="void __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__StereoGetConvergence 006A0110 f end=006A0117 type="float __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__StereoGetSeparation 006A0120 f end=006A0127 type="float __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__StereoEnabled 006A0130 f end=006A013D type="bool __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__QueryDestroy 006A0190 f end=006A01C0 type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery** query)" +CGxDeviceD3d__QueryEnd 006A0240 f end=006A0272 type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query)" +CGxDeviceD3d__QueryGetData 006A0310 f end=006A035F type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query, uint32_t* data)" CGxDeviceD3d__WindowProcD3d 006A0360 f end=006A0834 +CGxDeviceD3d__DeviceReadDepths 006A1950 f end=006A19C4 type="void __thiscall func(CGxDeviceD3d* this, CiRect* rect, TSGrowableArray_float* depths)" +CGxDeviceD3d__TexDestroy 006A2BB0 f end=006A2BF1 type="void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)" CGxDeviceD3d__ITexCreate 006A2C00 f end=006A2D7E CGxDeviceD3d__ITexUpload 006A2D80 f end=006A3062 -CGxDeviceD3d__ITexMarkAsUpdated 006A3070 f end=006A30CF +CGxDeviceD3d__ITexMarkAsUpdated 006A3070 f end=006A30CF type="void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)" +CGxDeviceD3d__TexCopy 006A30D0 f end=006A31D6 type="void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, CGxTex* a2, C2iVector* a3, C2iVector* a4, uint32_t a5, uint32_t a6)" +CGxDeviceD3d__TexStretch 006A31E0 f end=006A3349 type="void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, CGxTex* a2, CiRect* a3, CiRect* a4, uint32_t a5, uint32_t a6)" CGxDeviceD3d__ISceneBegin 006A3350 f end=006A3417 CGxDeviceD3d__ISceneEnd 006A3420 f end=006A3449 -CGxDeviceD3d__ScenePresent 006A3450 f end=006A3611 -CGxDeviceD3d__Draw 006A3620 f end=006A3716 +CGxDeviceD3d__ScenePresent 006A3450 f end=006A3611 type="void __thiscall func(CGxDeviceD3d* this, uint32_t mask)" +CGxDeviceD3d__Draw 006A3620 f end=006A3716 type="void __thiscall func(CGxDeviceD3d* this, CGxBatch* batch)" CGxDeviceD3d__IStateSyncEnables 006A3810 f end=006A386E CGxDeviceD3d__ISetVertexBuffer 006A39E0 f end=006A3A59 CGxDeviceD3d__IStateSetD3DDefaults 006A3A60 f end=006A3C34 @@ -38,22 +71,22 @@ CGxDeviceD3d__ISetAlphaOp 006A41F0 f end=006A424C CGxDeviceD3d__IStateSyncMaterial 006A4700 f end=006A4846 CGxDeviceD3d__IStateSyncXforms 006A4850 f end=006A48FE CGxDeviceD3d__ISetTexture 006A4900 f end=006A4AB3 -CGxDeviceD3d__IRsSendToHw 006A4C30 f end=006A5499 +CGxDeviceD3d__IRsSendToHw 006A4C30 f end=006A5499 type="void __thiscall func(CGxDeviceD3d* this, EGxRenderState rs)" CGxDeviceD3d__ICreateD3dVertexDecl 006A5540 f end=006A5677 CGxDeviceD3d__IStateSyncVertexPtrs 006A5700 f end=006A5934 CGxDeviceD3d__IStateSync 006A5940 f end=006A59f5 -CGxDeviceD3d__CapsWindowSize 006A5A00 f end=006A5A25 +CGxDeviceD3d__CapsWindowSize 006A5A00 f end=006A5A25 type="void __thiscall func(CGxDeviceD3d* this, CRect* dst)" CGxDeviceD3d__IXformSetWorld 006A5A30 f end=006A5A92 type="void __thiscall func(CGxDeviceD3d* this)" CGxDeviceD3d__IBindPixelShader 006A5C70 f end=006A5D48 -CGxDeviceD3d__IShaderCreate 006A5E10 f end=006A5E36 -CGxDeviceD3d__SceneClear 006A74B0 f end=006A7538 -CGxDeviceD3d__CapsWindowSizeInScreenCoords 006A9920 f end=006A99D4 -CGxDeviceD3d__XformSetProjection 006A9B40 f end=006A9D88 -CGxDeviceD3d__XformSetView 006A9E00 f end=006A9E09 +CGxDeviceD3d__IShaderReload 006A5D50 f end=006A5E07 type="void __thiscall func(CGxDeviceD3d* this, CGxShader* shader, const char* a2, const char* a3)" +CGxDeviceD3d__IShaderCreate 006A5E10 f end=006A5E36 type="void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)" +CGxDeviceD3d__SceneClear 006A74B0 f end=006A7538 type="void __thiscall func(CGxDeviceD3d* this, uint32_t mask, CImVector color)" +CGxDeviceD3d__CapsWindowSizeInScreenCoords 006A9920 f end=006A99D4 type="void __thiscall func(CGxDeviceD3d* this, CRect* dst)" +CGxDeviceD3d__XformSetProjection 006A9B40 f end=006A9D88 type="void __thiscall func(CGxDeviceD3d* this, C44Matrix* matrix)" +CGxDeviceD3d__XformSetView 006A9E00 f end=006A9E09 type="void __thiscall func(CGxDeviceD3d* this, C44Matrix* matrix)" CGxDeviceD3d__IShaderConstantsFlush 006A9FE0 f end=006AA06D -CGxDeviceD3d__IShaderCreatePixel 006AA070 f end=006AA0C5 -CGxDeviceD3d__IShaderCreateVertex 006AA0D0 f end=006AA125 -CGxDeviceD3d__ShaderCreate 006AA130 f end=006AA18A +CGxDeviceD3d__IShaderCreatePixel 006AA070 f end=006AA0C5 type="void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)" +CGxDeviceD3d__IShaderCreateVertex 006AA0D0 f end=006AA125 type="void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)" +CGxDeviceD3d__ShaderCreate 006AA130 f end=006AA18A type="void __thiscall func(CGxShader** shaders, EGxShTarget target, char* a3, char* a4, int32_t permutations)" +CGxDeviceD3d__ShaderDestroy 006AA190 f end=006AA207 type="void __thiscall func(CGxDeviceD3d* this, CGxShader** shader)" CGxDeviceD3d__IBindVertexShader 006AA2F0 f end=006AA346 -CGxDeviceD3d__IReleaseD3dResources 00690150 f end=00690223 -CGxDeviceD3d__ICursorClip 0069FE10 f end=0069FE57 ; UC (invented name) \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/main.sym b/profile/3.3.5a-windows-386/symbol/main.sym index 9fce952..7122194 100644 --- a/profile/3.3.5a-windows-386/symbol/main.sym +++ b/profile/3.3.5a-windows-386/symbol/main.sym @@ -185,6 +185,7 @@ C44Matrix__RotateAroundZ 004C3380 f C44Matrix__Rotate 004C33C0 f C3Vector__Normalize_1 004C3420 f C3Vector__Normalize_2 004C3600 f +TSGrowableArray_C3Vector__SetCount 004C4B80 f end=004C4C75 type="void __thiscall func(TSGrowableArray_C3Vector* this, uint32_t count)" C33Matrix__operator_assign_C33Matrix 004C51B0 f CGlueMgr__SetCurrentAccount 004D7F60 f end=004D7F82 CGlueMgr__DisplayLoginStatus 004D80C0 f end=004D8200 @@ -1077,6 +1078,7 @@ Script_GetNumTrackingTypes 0057F170 f end=0057F1AE Script_GetTrackingInfo 0057F1B0 f end=0057F37A Script_SetTracking 0057F380 f end=0057F4F0 Script_GetTrackingTexture 0057F4F0 f end=0057F5CE +TSGrowableArray_C2Vector__SetCount 0057FDD0 f end=0057FE93 type="void __thiscall func(TSGrowableArray_C2Vector* this, uint32_t count)" Script_GetMerchantNumItems 005841D0 f end=005841F2 Script_GetMerchantItemLink 00584200 f end=005842C4 Script_GetMerchantItemMaxStack 005842D0 f end=00584389 @@ -2088,6 +2090,7 @@ UpdateCursor 006162C0 f end=006163AD CursorInitialize 006163B0 f end=006164A5 CursorSetMode 00616800 f end=0061682E type="void __stdcall func(CURSORMODE mode)" GxXformPush_EGxXform_C44Matrix 00616AD0 f end=00616AE8 +TSGrowableArray_CImVector__SetCount 00616CA0 f end=00616D07 type="void __thiscall func(TSGrowableArray_CImVector* this, uint32_t count)" nullsub_4 00632050 f nullsub_5 00653A10 f GxDevCreate 00681290 f end=00681301 @@ -2105,8 +2108,8 @@ GxPrimLockIndexPtr 006823A0 f end=006823F8 type="void __stdcall func(EGxPrim pri GxPrimVertexPtr 00682400 f end=00682781 type="void __stdcall func(uint32_t vertexCount, C3Vector* pos, uint32_t posStride, C3Vector* normal, uint32_t normalStride, CImVector* color, uint32_t colorStride, C2Vector* tex0, uint32_t tex0Stride, C2Vector* tex1, uint32_t tex1Stride)" ; this is one of the functions named 'GxPrimVertexPtr' that uses the fixed-function pipeline GxPrimLockVertexPtrs 006828C0 f end=006828FE type="void __stdcall func(uint32_t vertexCount, C3Vector* pos, uint32_t posStride, C3Vector* normal, uint32_t normalStride, CImVector* color, uint32_t colorStride, uint8_t* bone, uint32_t boneStride, C2Vector* tex0, uint32_t tex0Stride, C2Vector* tex1, uint32_t tex1Stride)" GxScenePresent 00682A00 f end=00682A33 -CGxDevice__DeviceCreate_WindowProc_CGxFormat 00682CB0 f end=00682CCB type="void __thiscall func(CGxDevice* this, int32_t (*windowProc)(void*, uint32_t, uintptr_t, intptr_t), CGxFormat* format)" -CGxDevice__DeviceCreate_CGxFormat 00682CD0 f end=00682CF0 type="void __thiscall func(CGxDevice* this, CGxFormat* format)" +CGxDevice__DeviceCreate 00682CB0 f end=00682CCB type="void __thiscall func(CGxDevice* this, int32_t (*windowProc)(void*, uint32_t, uintptr_t, intptr_t), CGxFormat* format)" +CGxDevice__DeviceCreate 00682CD0 f end=00682CF0 type="void __thiscall func(CGxDevice* this, uintptr_t hwnd, CGxFormat* format)" CGxDevice__DeviceDestroy 00682CF0 f end=00682CFB type="void __thiscall func(CGxDevice* this)" CGxDevice__DeviceSetBaseMipLevel 00682D00 f end=00682D10 type="void __thiscall func(CGxDevice* this, uint32_t baseMipLevel)" CGxDevice__DeviceApi 00682D20 f end=00682D27 type="EGxApi __thiscall func(CGxDevice* this)" @@ -2118,6 +2121,8 @@ CGxDevice__CapsHasContext 00682E20 f end=00682E47 type="int32_t __thiscall func( CGxDevice__ScenePresent 00682E50 f end=00682E66 type="void __thiscall func(CGxDevice* this)" CGxDevice__PrimIndexPtr 00682F10 f end=00682F3C type="void __thiscall func(CGxDevice* this, CGxBuf* buf)" CGxDevice__PrimCalcCount 00682F40 f end=00682F66 type="uint32_t __stdcall func(EGxPrim primType, uint32_t indexCount)" +CGxDevice__PrimNormal 00682F70 f end=00682F9E type="void __thiscall func(CGxDevice* this, C3Vector* n)" +CGxDevice__PrimTexCoord 00682FA0 f end=00682FCB type="void __thiscall func(CGxDevice* this, uint32_t tmu, C2Vector* t)" CGxDevice__LightEnable 00683080 f end=006830A4 type="void __thiscall func(CGxDevice* this, uint32_t whichLight, int32_t enable)" CGxDevice__NeedsUpdate 006830B0 f end=006830F9 type="int32_t __thiscall func(CGxDevice* this, uint32_t app, uint32_t hw, uint32_t appDisables, uint32_t hwDisables, uint32_t flagPos, int32_t* enable)" CGxDevice__MasterEnable 00683100 f end=00683121 type="int32_t __thiscall func(CGxDevice* this, EGxMasterEnables state)" @@ -2134,14 +2139,17 @@ CGxDevice__CursorSetVisible 00683640 f end=00683650 type="void __thiscall func(C CGxDevice__CursorLock 00683650 f end=00683657 type="uint32_t* __thiscall func(CGxDevice* this)" CGxDevice__CursorSetDepth 00683660 f end=00683670 type="void __thiscall func(CGxDevice* this, float depth)" CGxDevice__DeviceSetFormat 006840F0 f end=0068416C type="int32_t __thiscall func(CGxDevice* this, CGxFormat* format)" -CGxDevice__DeviceSetGamma_float 00684170 f end=00684189 type="void __thiscall func(CGxDevice* this, float gamma)" -CGxDevice__DeviceSetGamma_CGxGammaRamp 00684190 f end=006841AF type="int32_t __thiscall func(CGxDevice* this, CGxGammaRamp* ramp)" +CGxDevice__DeviceSetGamma 00684170 f end=00684189 type="void __thiscall func(CGxDevice* this, float gamma)" +CGxDevice__DeviceSetGamma 00684190 f end=006841AF type="int32_t __thiscall func(CGxDevice* this, CGxGammaRamp* ramp)" CGxDevice__DeviceReadScreenShot 00684260 f end=0068429E type="void __thiscall func(CGxDevice* this, uint32_t* w, uint32_t* h, CImVector** pixels)" +CGxDevice__DeviceSetRenderTarget 006842A0 f end=0068435D type="void __thiscall func(CGxDevice* this, EGxBuffer buffer, CGxTex* texture, uint32_t plane)" CGxDevice__DeviceSetDefWindow 00684360 f end=006843B0 type="void __thiscall func(CGxDevice* this, CRect* rect)" CGxDevice__NotifyOnDeviceRestored 006843B0 f end=006843D9 type="void __thiscall func(CGxDevice* this)" CGxDevice__NotifyOnTextureRecreation 006843E0 f end=00684409 type="void __thiscall func(CGxDevice* this)" CGxDevice__NotifyOnStereoChanged 00684410 f end=00684439 type="void __thiscall func(CGxDevice* this)" CGxDevice__ClipPlaneSet 00684440 f end=006844B9 type="void __thiscall func(CGxDevice* this, uint32_t a2, C4Plane* plane)" +CGxDevice__PrimColor 00684590 f end=006845AC type="void __thiscall func(CGxDevice* this, CImVector* c)" +CGxDevice__PrimDrawElements 006845B0 f end=0068461D type="void __thiscall func(CGxDevice* this)" CGxDevice__LightSet 006847D0 f end=00684843 type="void __thiscall func(CGxDevice* this, uint32_t a2, CGxLight* light, C3Vector* pos)" CGxDevice__BufStream 00684850 f end=0068489F type="void __thiscall func(CGxDevice* this, EGxPoolTarget target, uint32_t itemSize, uint32_t itemCount)" CGxDevice__TexMarkForUpdate 006848A0 f end=000684900 type="void __thiscall func(CGxDevice* this, CGxTex* texId, CiRect* updateRect, int32_t immediate)" @@ -2152,12 +2160,15 @@ CGxDevice__CursorUnlock 00684B50 f end=00684B99 type="void __thiscall func(CGxDe CGxDevice__Log 00684C20 f end=00684C3E type="void __stdcall func(char* format, ...)" CGxDevice__Log_CGxCaps 00684C40 f end=00684D07 type="void __stdcall func(CGxCaps* caps)" ; CGxDevice::Log(CGxCaps const&) const CGxDevice__Log_CGxFormat 00684D10 f end=00684D6C type="void __stdcall func(CGxFormat* format)" +CGxDevice__DeviceOverride 00684FE0 f end=00685036 type="void __thiscall func(CGxDevice* this, EGxOverride override, uint32_t value)" CGxDevice__AddDeviceRestoredCallback 006853B0 f end=006853C6 type="void __thiscall func(CGxDevice* this, DEVICERESTOREDCALLBACK fn)" CGxDevice__RemoveDeviceRestoredCallback 006853D0 f end=0068545C type="int32_t __thiscall func(CGxDevice* this, DEVICERESTOREDCALLBACK fn)" CGxDevice__AddTextureRecreationCallback 00685460 f end=00685476 type="void __thiscall func(CGxDevice* this, TEXTURERECREATIONCALLBACK fn)" CGxDevice__RemoveTextureRecreationCallback 00685480 f end=0068550C type="int32_t __thiscall func(CGxDevice* this, TEXTURERECREATIONCALLBACK fn)" CGxDevice__AddStereoChangedCallback 00685510 f end=00685526 type="void __thiscall func(CGxDevice* this, STEREOCHANGEDCALLBACK fn)" CGxDevice__RemoveStereoChangedCallback 00685530 f end=006855BC type="int32_t __thiscall func(CGxDevice* this, STEREOCHANGEDCALLBACK fn)" +CGxDevice__PrimBegin 006855C0 f end=00685638 type="void __thiscall func(CGxDevice* this, EGxPrim primType)" +CGxDevice__PrimVertex 00685640 f end=00685961 type="void __thiscall func(CGxDevice* this, C3Vector* v)" CGxDevice__IRsDirty 00685970 f end=006859DB type="void __thiscall func(CGxDevice* this, EGxRenderState which)" CGxDevice__IRsForceUpdate_EGxRenderState 006859E0 f end=00685A65 type="void __thiscall func(CGxDevice* this, EGxRenderState which)" ; CGxDevice::IRsForceUpdate(EGxRenderState) CGxDevice__IRsForceUpdate 00685A70 f end=00685B4E type="void __thiscall func(CGxDevice* this)" ; CGxDevice::IRsForceUpdate() @@ -2168,11 +2179,17 @@ CGxDevice__RsSet_pointer_to_void 00685F50 f end=00685FB0 type="void __thiscall f CGxDevice__RsPop 00685FB0 f end=00686116 type="void __thiscall func(CGxDevice* this)" CGxDevice__BufCreate 00687660 f end=006876C9 type="CGxBuf* __thiscall func(CGxDevice* this, CGxPool* pool, uint32_t itemSize, uint32_t itemCount, uint32_t index)" CGxDevice__PoolCreate 006876D0 f end=0068773F type="CGxPool* __thiscall func(CGxDevice* this, EGxPoolTarget target, EGxPoolUsage usage, uint32_t size, EGxPoolHintBits hint, char* name)" +CGxDevice__QueryCreate 006877C0 f end=00687811 type="void __thiscall func(CGxDevice* this, CGxQuery** query, EGxQueryType queryType)" +CGxDevice__ShaderDestroy 00687820 f end=00687862 type="void __thiscall func(CGxDevice* this, CGxShader** shader)" +CGxDevice__TexDestroy 00687980 f end=006879E1 type="void __thiscall func(CGxDevice* this, CGxTex* texId)" +CGxDevice__QueryDestroy 006879F0 f end=00687A8E type="void __thiscall func(CGxDevice* this, CGxQuery** query)" CGxDevice__ICursorDraw 00687A90 f end=00687FCA type="void __thiscall func(CGxDevice* this)" CGxDevice__PoolDestroy 00688340 f end=00688372 type="void __thiscall func(CGxDevice* this, CGxPool* pool)" CGxDevice__CGxDevice 00688690 f end=0068903F type="void __thiscall func(CGxDevice* this)" +CGxDevice__XformSetProjection 00689040 f end=0068904F type="void __thiscall func(CGxDevice* this, C44Matrix* matrix)" +CGxDevice__XformSetView 00689050 f end=006890C0 type="void __thiscall func(CGxDevice* this, C44Matrix* matrix)" CGxDevice__destructor 006890C0 f end=00689460 type="void __thiscall func(CGxDevice* this)" -CGxDevice__scalar_deleting_destructor 00689690 f end=006896BB type="void __thiscall func(CGxDevice *this, uint8_t __flags)" +CGxDevice__scalar_deleting_destructor 00689690 f end=006896BB type="void __thiscall func(CGxDevice* this, uint8_t __flags)" CGxDevice__ShaderCreate 006897C0 f end=00689A49 type="void __thiscall func(CGxDevice* this, CGxShader**, EGxShTarget, char*, char*, int32_t)" CGxShader__Valid 00689A50 f end=00689A6F CGxDevice__NewD3d 00689EF0 f end=00689F14 type="CGxDevice* __stdcall func()" @@ -2181,38 +2198,69 @@ CGxDevice__NewOpenGl 0068BF20 f end=0068BF44 type="CGxDevice* __stdcall func()" CGxDevice__NewD3d9Ex 0068C220 f end=0068C244 type="CGxDevice* __stdcall func()" CGxDeviceD3d__ICreateD3dIB 0068E180 f end=0068E1E8 CGxDeviceD3d__ISetPresentParms 0068E250 f end=0068E448 -CGxDeviceD3d__PoolDestroy 0068E720 f end=0068E742 -CGxDeviceD3d__CursorSetVisible 0068E750 f end=0068E7D6 -CGxDeviceD3d__ICursorDraw 0068E810 f end=0068E8F2 -CGxDeviceD3d__ICursorCreate 0068E900 f end=0068E975 +CGxDeviceD3d__DeviceEvictResources 0068E450 f end=0068E49E type="void __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__DeviceSetBaseMipLevel 0068E4A0 f end=0068E4BD type="void __thiscall func(CGxDeviceD3d* this, uint32_t level)" +CGxDeviceD3d__DeviceSetGamma 0068E4C0 f end=0068E507 type="void __thiscall func(CGxDeviceD3d* this, float gamma)" +CGxDeviceD3d__LogCrashInfo 0068E570 f end=0068E719 type="void __thiscall func(CGxDeviceD3d* this, char* buffer, uint32_t size)" +CGxDeviceD3d__PoolDestroy 0068E720 f end=0068E742 type="void __thiscall func(CGxDeviceD3d* this, CGxPool* this)" +CGxDeviceD3d__CursorSetVisible 0068E750 f end=0068E7D6 type="void __thiscall func(CGxDeviceD3d* this, int32_t visible)" +CGxDeviceD3d__CursorUnlock 0068E7E0 f end=0068E804 type="void __thiscall func(CGxDeviceD3d* this, uint32_t x, uint32_t y)" +CGxDeviceD3d__ICursorDraw 0068E810 f end=0068E8F2 type="void __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__ICursorCreate 0068E900 f end=0068E975 type="void __thiscall func(CGxDeviceD3d* this, CGxFormat* format)" +CGxDeviceD3d__StereoSetConvergence 0068E980 f end=0068E99A type="void __thiscall func(CGxDeviceD3d* this, float c)" +CGxDeviceD3d__StereoSetSeparation 0068E9A0 f end=0068E9BA type="void __thiscall func(CGxDeviceD3d* this, float s)" +CGxDeviceD3d__QueryCreate 0068E9C0 f end=0068EA0A type="void __thiscall func(CGxDeviceD3d* this, CGxQuery** query, EGxQueryType queryType)" +CGxDeviceD3d__QueryBegin 0068EA10 f end=0068EA81 type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query)" +CGxDeviceD3d__QueryGetParam 0068EA90 f end=0068EB1D type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query, EGxQueryParam param, uint32_t* data)" CGxDeviceD3d__ICreateWindow 0068EBB0 f end=0068ED78 CGxDeviceD3d__ILoadD3dLib 0068ED80 f end=0068EE13 CGxDeviceD3d__ISetCaps 0068EE20 f end=0068F36D CGxDeviceD3d__ICreateD3dDevice 0068F3D0 f end=0068F692 +CGxDeviceD3d__DeviceSetRenderTarget 0068F770 f end=0068F8F2 type="void __thiscall func(CGxDeviceD3d* this, EGxBuffer buffer, CGxTex* texture, uint32_t plane)" +CGxDeviceD3d__DeviceResolveDepthBuffer 0068F900 f end=0068F94A type="void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)" +CGxDeviceD3d__DeviceCopyTex 0068F950 f end=0068FA5E type="void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, int32_t a2, CGxTex* a3, int32_t a4)" CGxDeviceD3d__IBufUnlock 0068FA60 f end=0068FADC -CGxDeviceD3d__BufUnlock 0068FAE0 f end=0068FB07 +CGxDeviceD3d__BufUnlock 0068FAE0 f end=0068FB07 type="int32_t __thiscall func(CGxDeviceD3d* this, CGxBuf* buf, uint32_t size)" CGxDeviceD3d__IBufLock 0068FB10 f end=0068FCDC -CGxDeviceD3d__BufLock 0068FCE0 f end=0068FCFE -CGxDeviceD3d__BufData 0068FD00 f end=0068FD49 -CGxDeviceD3d__CGxDeviceD3d 0068FD50 f end=0068FE80 +CGxDeviceD3d__BufLock 0068FCE0 f end=0068FCFE type="char* __thiscall func(CGxDeviceD3d* this, CGxBuf* buf)" +CGxDeviceD3d__BufData 0068FD00 f end=0068FD49 type="void __thiscall func(CGxDeviceD3d* this, CGxBuf* buf, const void* data, uint32_t size, uint32_t offset)" +CGxDeviceD3d__CGxDeviceD3d 0068FD50 f end=0068FE80 type="void __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__scalar_deleting_destructor 0068FE80 f end=0068FEC8 type="void __thiscall func(CGxDeviceD3d* this, uint8_t __flags)" +CGxDeviceD3d__DeviceReadPixels 0068FED0 f end=00690144 type="void __thiscall func(CGxDeviceD3d* this, CiRect* rect, TSGrowableArray_CImVector* pixels)" CGxDeviceD3d__IReleaseD3dResources 00690150 f end=00690223 -CGxDeviceD3d__DeviceWM 00690230 f end=0069038D -CGxDeviceD3d__DeviceSetFormat 006904D0 f end=006905E8 +CGxDeviceD3d__DeviceWM 00690230 f end=0069038D type="void __thiscall func(CGxDeviceD3d* this, EGxWM wm, int32_t param1, int32_t param2)" +CGxDeviceD3d__DeviceSetFormat 006904D0 f end=006905E8 type="int32_t __thiscall func(CGxDeviceD3d* this, CGxFormat* format)" +CGxDeviceD3d__DeviceDestroy 006905F0 f end=00690679 type="void __thiscall func(CGxDeviceD3d* this)" CGxDeviceD3d__ICreateD3d 00690680 f end=00690742 -CGxDeviceD3d__DeviceCreate_WindowProc_CGxFormat 00690750 f end=00690821 +CGxDeviceD3d__DeviceCreate 00690750 f end=00690821 type="void __thiscall func(CGxDeviceD3d* this, int32_t (*windowProc)(void*, uint32_t, uintptr_t, intptr_t), CGxFormat* format)" +CGxDeviceD3d__DeviceCreate 00690830 f end=00690897 type="void __thiscall func(CGxDeviceD3d* this, uintptr_t hwnd, CGxFormat* format)" CGxDeviceD3d__ICreateD3dVB 0069FB00 f end=0069FB68 CGxDeviceD3d__CreatePoolAPI 0069FB70 f end=0069FBB8 CGxDeviceD3d__ICursorClip 0069FE10 f end=0069FE57 ; UC (invented name) -CGxDeviceD3d__ICursorDestroy 006A00C0 f end=006A0102 +CGxDeviceD3d__DeviceSetGamma 0069FE80 f end=0069FEC4 type="void __thiscall func(CGxDeviceD3d* this, CGxGammaRamp* ramp)" +CGxDeviceD3d__DeviceWindow 0069FED0 f end=0069FED7 type="void* __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__DeviceOverride 0069FF40 f end=0069FF7F type="void __thiscall func(CGxDeviceD3d* this, EGxOverride override, uint32_t value)" +CGxDeviceD3d__PoolSizeSet 0069FF80 f end=0069FFCD type="void __thiscall func(CGxDeviceD3d* this, CGxPool* pool, uint32_t size)" +CGxDeviceD3d__ICursorDestroy 006A00C0 f end=006A0102 type="void __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__StereoGetConvergence 006A0110 f end=006A0117 type="float __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__StereoGetSeparation 006A0120 f end=006A0127 type="float __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__StereoEnabled 006A0130 f end=006A013D type="bool __thiscall func(CGxDeviceD3d* this)" +CGxDeviceD3d__QueryDestroy 006A0190 f end=006A01C0 type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery** query)" +CGxDeviceD3d__QueryEnd 006A0240 f end=006A0272 type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query)" +CGxDeviceD3d__QueryGetData 006A0310 f end=006A035F type="bool __thiscall func(CGxDeviceD3d* this, CGxQuery* query, uint32_t* data)" CGxDeviceD3d__WindowProcD3d 006A0360 f end=006A0834 +CGxDeviceD3d__DeviceReadDepths 006A1950 f end=006A19C4 type="void __thiscall func(CGxDeviceD3d* this, CiRect* rect, TSGrowableArray_float* depths)" CGxDeviceD3d9Ex__CGxDeviceD3d9Ex 006A1A90 f end=006A1C24 +CGxDeviceD3d__TexDestroy 006A2BB0 f end=006A2BF1 type="void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)" CGxDeviceD3d__ITexCreate 006A2C00 f end=006A2D7E CGxDeviceD3d__ITexUpload 006A2D80 f end=006A3062 -CGxDeviceD3d__ITexMarkAsUpdated 006A3070 f end=006A30CF +CGxDeviceD3d__ITexMarkAsUpdated 006A3070 f end=006A30CF type="void __thiscall func(CGxDeviceD3d* this, CGxTex* texId)" +CGxDeviceD3d__TexCopy 006A30D0 f end=006A31D6 type="void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, CGxTex* a2, C2iVector* a3, C2iVector* a4, uint32_t a5, uint32_t a6)" +CGxDeviceD3d__TexStretch 006A31E0 f end=006A3349 type="void __thiscall func(CGxDeviceD3d* this, CGxTex* a1, CGxTex* a2, CiRect* a3, CiRect* a4, uint32_t a5, uint32_t a6)" CGxDeviceD3d__ISceneBegin 006A3350 f end=006A3417 CGxDeviceD3d__ISceneEnd 006A3420 f end=006A3449 -CGxDeviceD3d__ScenePresent 006A3450 f end=006A3611 -CGxDeviceD3d__Draw 006A3620 f end=006A3716 +CGxDeviceD3d__ScenePresent 006A3450 f end=006A3611 type="void __thiscall func(CGxDeviceD3d* this, uint32_t mask)" +CGxDeviceD3d__Draw 006A3620 f end=006A3716 type="void __thiscall func(CGxDeviceD3d* this, CGxBatch* batch)" CGxDeviceD3d__IStateSyncEnables 006A3810 f end=006A386E CGxDeviceD3d__ISetVertexBuffer 006A39E0 f end=006A3A59 CGxDeviceD3d__IStateSetD3DDefaults 006A3A60 f end=006A3C34 @@ -2222,23 +2270,25 @@ CGxDeviceD3d__ISetAlphaOp 006A41F0 f end=006A424C CGxDeviceD3d__IStateSyncMaterial 006A4700 f end=006A4846 CGxDeviceD3d__IStateSyncXforms 006A4850 f end=006A48FE CGxDeviceD3d__ISetTexture 006A4900 f end=006A4AB3 -CGxDeviceD3d__IRsSendToHw 006A4C30 f end=006A5499 +CGxDeviceD3d__IRsSendToHw 006A4C30 f end=006A5499 type="void __thiscall func(CGxDeviceD3d* this, EGxRenderState rs)" CGxDeviceD3d__ICreateD3dVertexDecl 006A5540 f end=006A5677 CGxDeviceD3d__IStateSyncVertexPtrs 006A5700 f end=006A5934 CGxDeviceD3d__IStateSync 006A5940 f end=006A59f5 -CGxDeviceD3d__CapsWindowSize 006A5A00 f end=006A5A25 +CGxDeviceD3d__CapsWindowSize 006A5A00 f end=006A5A25 type="void __thiscall func(CGxDeviceD3d* this, CRect* dst)" CGxDeviceD3d__IXformSetWorld 006A5A30 f end=006A5A92 type="void __thiscall func(CGxDeviceD3d* this)" CGxDeviceD3d__IBindPixelShader 006A5C70 f end=006A5D48 -CGxDeviceD3d__IShaderCreate 006A5E10 f end=006A5E36 +CGxDeviceD3d__IShaderReload 006A5D50 f end=006A5E07 type="void __thiscall func(CGxDeviceD3d* this, CGxShader* shader, const char* a2, const char* a3)" +CGxDeviceD3d__IShaderCreate 006A5E10 f end=006A5E36 type="void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)" CGxDevice__ITexWHDStartEnd 006A5EF0 f end=006A5FDF type="void __thiscall func(CGxDevice* this, CGxTex* texId, uint32_t* width, uint32_t* height, uint32_t* baseMip, uint32_t* mipCount)" -CGxDeviceD3d__SceneClear 006A74B0 f end=006A7538 -CGxDeviceD3d__CapsWindowSizeInScreenCoords 006A9920 f end=006A99D4 -CGxDeviceD3d__XformSetProjection 006A9B40 f end=006A9D88 -CGxDeviceD3d__XformSetView 006A9E00 f end=006A9E09 +CGxDeviceD3d__SceneClear 006A74B0 f end=006A7538 type="void __thiscall func(CGxDeviceD3d* this, uint32_t mask, CImVector color)" +CGxDeviceD3d__CapsWindowSizeInScreenCoords 006A9920 f end=006A99D4 type="void __thiscall func(CGxDeviceD3d* this, CRect* dst)" +CGxDeviceD3d__XformSetProjection 006A9B40 f end=006A9D88 type="void __thiscall func(CGxDeviceD3d* this, C44Matrix* matrix)" +CGxDeviceD3d__XformSetView 006A9E00 f end=006A9E09 type="void __thiscall func(CGxDeviceD3d* this, C44Matrix* matrix)" CGxDeviceD3d__IShaderConstantsFlush 006A9FE0 f end=006AA06D -CGxDeviceD3d__IShaderCreatePixel 006AA070 f end=006AA0C5 -CGxDeviceD3d__IShaderCreateVertex 006AA0D0 f end=006AA125 -CGxDeviceD3d__ShaderCreate 006AA130 f end=006AA18A +CGxDeviceD3d__IShaderCreatePixel 006AA070 f end=006AA0C5 type="void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)" +CGxDeviceD3d__IShaderCreateVertex 006AA0D0 f end=006AA125 type="void __thiscall func(CGxDeviceD3d* this, CGxShader* shader)" +CGxDeviceD3d__ShaderCreate 006AA130 f end=006AA18A type="void __thiscall func(CGxShader** shaders, EGxShTarget target, char* a3, char* a4, int32_t permutations)" +CGxDeviceD3d__ShaderDestroy 006AA190 f end=006AA207 type="void __thiscall func(CGxDeviceD3d* this, CGxShader** shader)" CGxDeviceD3d__IBindVertexShader 006AA2F0 f end=006AA346 CTgaFile__ColorMapEntryBytes 006AA350 f end=006AA379 ; UC CTgaFile__ColorMapBytes 006AA380 f end=006AA3B0 @@ -2540,6 +2590,7 @@ OsGetExePath 0086BEA0 f end=0086BEBE OsGuiGetWindow 0086C6A0 f end=0086C6CE OsIMEInitialize 0086D0A0 f end=0086D0B8 OsIMEDestroy 0086D0C0 f end=0086D0Df +TSExplicitList_CGxBuf__LinkToTail 0086E200 f end=0086E25F type="void __thiscall func(TSExplicitList_CGxBuf* this, CGxBuf* ptr)" OsCallSetContext 0086F5A0 f end=0086F5EA OsCallInitialize 0086F760 f end=0086F875 OsCallInitializeContext 0086F880 f end=0086F902 diff --git a/profile/3.3.5a-windows-386/symbol/storm/func.sym b/profile/3.3.5a-windows-386/symbol/storm/func.sym index a5f9eaa..cd2b55a 100644 --- a/profile/3.3.5a-windows-386/symbol/storm/func.sym +++ b/profile/3.3.5a-windows-386/symbol/storm/func.sym @@ -71,4 +71,4 @@ Square 0077C330 f end=0077C69F type="void __stdcall func(BigBuffer* a, BigBuffer SBigDel 0077C6A0 f end=0077C6F6 type="void __stdcall func(BigData* num)" SBigMul 0077C700 f end=0077C71F type="void __stdcall func(BigData* a, BigData* b, BigData* c)" PowMod 0077C720 f end=0077C97B type="void __stdcall func(BigBuffer* a, BigBuffer* b, BigBuffer* c, BigBuffer* d, BigStack* stack)" -SBigPowMod 0077C980 f end=0077C9A4 type="void __stdcall func(BigData* a, BigData* b, BigData* c, BigData* d)" +SBigPowMod 0077C980 f end=0077C9A4 type="void __stdcall func(BigData* a, BigData* b, BigData* c, BigData* d)" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/tempest/func.sym b/profile/3.3.5a-windows-386/symbol/tempest/func.sym index 145938d..57cb1d8 100644 --- a/profile/3.3.5a-windows-386/symbol/tempest/func.sym +++ b/profile/3.3.5a-windows-386/symbol/tempest/func.sym @@ -20,4 +20,7 @@ C44Matrix__RotateAroundZ 004C3380 f C44Matrix__Rotate 004C33C0 f C3Vector__Normalize_1 004C3420 f C3Vector__Normalize_2 004C3600 f -C33Matrix__operator_assign_C33Matrix 004C51B0 f \ No newline at end of file +C33Matrix__operator_assign_C33Matrix 004C51B0 f +TSGrowableArray_C3Vector__SetCount 004C4B80 f end=004C4C75 type="void __thiscall func(TSGrowableArray_C3Vector* this, uint32_t count)" +TSGrowableArray_CImVector__SetCount 00616CA0 f end=00616D07 type="void __thiscall func(TSGrowableArray_CImVector* this, uint32_t count)" +TSGrowableArray_C2Vector__SetCount 0057FDD0 f end=0057FE93 type="void __thiscall func(TSGrowableArray_C2Vector* this, uint32_t count)" \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/x64dbg/game.dd32 b/profile/3.3.5a-windows-386/x64dbg/game.dd32 index 0c431f38cb3f9baedcc65facfddaa4cc732ba128..a06f03bdb335bf1cbcd364db3a503c2d4791031c 100644 GIT binary patch delta 36085 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 diff --git a/profile/3.3.5a-windows-386/x64dbg/types.json b/profile/3.3.5a-windows-386/x64dbg/types.json index 52512c9..9d99492 100644 --- a/profile/3.3.5a-windows-386/x64dbg/types.json +++ b/profile/3.3.5a-windows-386/x64dbg/types.json @@ -72,6 +72,10 @@ "type": "int", "name": "EGxBlend" }, + { + "type": "int", + "name": "EGxBuffer" + }, { "type": "int", "name": "EGxColorFormat" @@ -88,6 +92,10 @@ "type": "int", "name": "EGxMasterEnables" }, + { + "type": "int", + "name": "EGxOverride" + }, { "type": "int", "name": "EGxPoolHintBits" @@ -108,6 +116,10 @@ "type": "int", "name": "EGxPrimMask" }, + { + "type": "int", + "name": "EGxQueryType" + }, { "type": "int", "name": "EGxRenderState" @@ -428,6 +440,10 @@ "type": "TSList_CGxPool", "name": "TSExplicitList_CGxPool" }, + { + "type": "TSList_CGxQuery", + "name": "TSExplicitList_CGxQuery" + }, { "type": "TSList_CShaderEffect", "name": "TSExplicitList_CShaderEffect" @@ -948,6 +964,27 @@ } ] }, + { + "name": "CGxDevice__TextureTarget", + "size": 12, + "members": [ + { + "type": "CGxTex*", + "name": "m_texture", + "offset": 0 + }, + { + "type": "uint32_t", + "name": "m_plane", + "offset": 4 + }, + { + "type": "void*", + "name": "m_apiSpecific", + "offset": 8 + } + ] + }, { "name": "CGxDevice__vtable", "size": 336, @@ -1299,7 +1336,7 @@ }, { "type": "void*", - "name": "v_fn_69_ShaderRelease", + "name": "v_fn_69_ShaderDestroy", "offset": 276 }, { @@ -9765,6 +9802,32 @@ } ] }, + { + "name": "TSGrowableArray_float", + "size": 16, + "members": [ + { + "type": "uint32_t", + "name": "m_alloc", + "offset": 0 + }, + { + "type": "uint32_t", + "name": "m_count", + "offset": 4 + }, + { + "type": "float*", + "name": "m_data", + "offset": 8 + }, + { + "type": "uint32_t", + "name": "m_chunk", + "offset": 12 + } + ] + }, { "name": "TSGrowableArray_pointer_to_EvtTimer", "size": 16, @@ -10033,6 +10096,22 @@ } ] }, + { + "name": "TSLink_CGxQuery", + "size": 8, + "members": [ + { + "type": "TSLink_CGxQuery*", + "name": "m_prevlink", + "offset": 0 + }, + { + "type": "CGxQuery*", + "name": "m_next", + "offset": 4 + } + ] + }, { "name": "TSLink_CGxShader", "size": 8, @@ -13930,6 +14009,38 @@ } ] }, + { + "name": "CGxQuery", + "size": 16, + "members": [ + { + "type": "void*", + "name": "m_apiSpecific", + "offset": 0 + }, + { + "type": "EGxQueryType", + "name": "m_type", + "offset": 4 + }, + { + "type": "TSLink_CGxQuery", + "name": "m_link", + "offset": 8 + } + ] + }, + { + "name": "TSLinkedNode_CGxQuery", + "size": 8, + "members": [ + { + "type": "TSLink_CGxQuery", + "name": "m_link", + "offset": 0 + } + ] + }, { "name": "TSHashObject_CGxShader_HASHKEY_STRI", "size": 24, @@ -14842,6 +14953,22 @@ } ] }, + { + "name": "TSList_CGxQuery", + "size": 12, + "members": [ + { + "type": "ptrdiff_t", + "name": "m_linkoffset", + "offset": 0 + }, + { + "type": "TSLink_CGxQuery", + "name": "m_terminator", + "offset": 4 + } + ] + }, { "name": "TSList_CShaderEffect", "size": 12, @@ -18201,6 +18328,179 @@ } ] }, + { + "name": "BATCHEDRENDERFONTDESC", + "size": 40, + "members": [ + { + "type": "TSHashObject_BATCHEDRENDERFONTDESC_HASHKEY_PTR", + "name": "b_base", + "offset": 0 + }, + { + "type": "CGxFont*", + "name": "m_face", + "offset": 24 + }, + { + "type": "TSExplicitList_CGxString", + "name": "m_strings", + "offset": 28 + } + ] + }, + { + "name": "TEXTURECACHEROW", + "size": 16, + "members": [ + { + "type": "uint32_t", + "name": "widestFreeSlot", + "offset": 0 + }, + { + "type": "TSExplicitList_CHARCODEDESC", + "name": "glyphList", + "offset": 4 + } + ] + }, + { + "name": "CGxFont", + "size": 592, + "members": [ + { + "type": "TSLinkedNode_CGxFont", + "name": "b_base", + "offset": 0 + }, + { + "type": "TSExplicitList_CGxString", + "name": "m_strings", + "offset": 8 + }, + { + "type": "TSHashTable_CHARCODEDESC_HASHKEY_NONE", + "name": "m_activeCharacters", + "offset": 20 + }, + { + "type": "TSHashTable_KERNNODE_KERNINGHASHKEY", + "name": "m_kernInfo", + "offset": 60 + }, + { + "type": "TSExplicitList_CHARCODEDESC", + "name": "m_activeCharacterCache", + "offset": 100 + }, + { + "type": "HFACE", + "name": "m_faceHandle", + "offset": 112 + }, + { + "type": "char", + "name": "m_fontName", + "arrsize": 260, + "offset": 116 + }, + { + "type": "uint32_t", + "name": "m_cellHeight", + "offset": 376 + }, + { + "type": "uint32_t", + "name": "m_baseline", + "offset": 380 + }, + { + "type": "uint32_t", + "name": "m_flags", + "offset": 384 + }, + { + "type": "float", + "name": "float184", + "offset": 388 + }, + { + "type": "float", + "name": "m_pixelsPerUnit", + "offset": 392 + }, + { + "type": "TEXTURECACHE", + "name": "m_textureCache", + "arrsize": 8, + "offset": 396 + }, + { + "type": "uint32_t", + "name": "m_pixelSize", + "offset": 588 + } + ] + }, + { + "name": "CGxStringBatch", + "size": 52, + "members": [ + { + "type": "TSLinkedNode_CGxStringBatch", + "name": "b_base", + "offset": 0 + }, + { + "type": "TSHashTable_BATCHEDRENDERFONTDESC_HASHKEY_PTR", + "name": "m_fontBatch", + "offset": 8 + }, + { + "type": "uint32_t", + "name": "m_flags", + "offset": 48 + } + ] + }, + { + "name": "CFrameStrataNode", + "size": 264, + "members": [ + { + "type": "TSExplicitList_CSimpleFrame", + "name": "pendingFrames", + "offset": 0 + }, + { + "type": "TSExplicitList_CSimpleFrame", + "name": "frames", + "offset": 12 + }, + { + "type": "CSimpleFrame*", + "name": "pendingFrame", + "offset": 24 + }, + { + "type": "CRenderBatch", + "name": "batches", + "arrsize": 5, + "offset": 28 + }, + { + "type": "int32_t", + "name": "batchDirty", + "offset": 248 + }, + { + "type": "TSExplicitList_CRenderBatch", + "name": "renderList", + "offset": 252 + } + ] + }, { "name": "CGxDevice", "size": 14696, @@ -18231,11 +18531,15 @@ "offset": 52 }, { - "type": "uint32_t", - "name": "m_unk38", - "arrsize": 2, + "type": "int32_t", + "name": "m_indexLocked", "offset": 56 }, + { + "type": "int32_t", + "name": "m_vertexLocked", + "offset": 60 + }, { "type": "int32_t", "name": "m_inBeginEnd", @@ -18538,7 +18842,7 @@ "offset": 10448 }, { - "type": "uint32_t", + "type": "uint8_t", "name": "unk28D4", "offset": 10452 }, @@ -18580,9 +18884,20 @@ { "type": "uint32_t", "name": "unk2904", - "arrsize": 12, + "arrsize": 3, "offset": 10500 }, + { + "type": "CGxDevice__TextureTarget", + "name": "m_textureTarget", + "arrsize": 2, + "offset": 10512 + }, + { + "type": "TSExplicitList_CGxQuery", + "name": "m_queryList", + "offset": 10536 + }, { "type": "int32_t", "name": "m_scrShotClick", @@ -18610,7 +18925,7 @@ }, { "type": "int32_t", - "name": "m_hardwareCursor", + "name": "m_hwCursor", "offset": 10580 }, { @@ -18641,179 +18956,6 @@ } ] }, - { - "name": "BATCHEDRENDERFONTDESC", - "size": 40, - "members": [ - { - "type": "TSHashObject_BATCHEDRENDERFONTDESC_HASHKEY_PTR", - "name": "b_base", - "offset": 0 - }, - { - "type": "CGxFont*", - "name": "m_face", - "offset": 24 - }, - { - "type": "TSExplicitList_CGxString", - "name": "m_strings", - "offset": 28 - } - ] - }, - { - "name": "TEXTURECACHEROW", - "size": 16, - "members": [ - { - "type": "uint32_t", - "name": "widestFreeSlot", - "offset": 0 - }, - { - "type": "TSExplicitList_CHARCODEDESC", - "name": "glyphList", - "offset": 4 - } - ] - }, - { - "name": "CGxFont", - "size": 592, - "members": [ - { - "type": "TSLinkedNode_CGxFont", - "name": "b_base", - "offset": 0 - }, - { - "type": "TSExplicitList_CGxString", - "name": "m_strings", - "offset": 8 - }, - { - "type": "TSHashTable_CHARCODEDESC_HASHKEY_NONE", - "name": "m_activeCharacters", - "offset": 20 - }, - { - "type": "TSHashTable_KERNNODE_KERNINGHASHKEY", - "name": "m_kernInfo", - "offset": 60 - }, - { - "type": "TSExplicitList_CHARCODEDESC", - "name": "m_activeCharacterCache", - "offset": 100 - }, - { - "type": "HFACE", - "name": "m_faceHandle", - "offset": 112 - }, - { - "type": "char", - "name": "m_fontName", - "arrsize": 260, - "offset": 116 - }, - { - "type": "uint32_t", - "name": "m_cellHeight", - "offset": 376 - }, - { - "type": "uint32_t", - "name": "m_baseline", - "offset": 380 - }, - { - "type": "uint32_t", - "name": "m_flags", - "offset": 384 - }, - { - "type": "float", - "name": "float184", - "offset": 388 - }, - { - "type": "float", - "name": "m_pixelsPerUnit", - "offset": 392 - }, - { - "type": "TEXTURECACHE", - "name": "m_textureCache", - "arrsize": 8, - "offset": 396 - }, - { - "type": "uint32_t", - "name": "m_pixelSize", - "offset": 588 - } - ] - }, - { - "name": "CGxStringBatch", - "size": 52, - "members": [ - { - "type": "TSLinkedNode_CGxStringBatch", - "name": "b_base", - "offset": 0 - }, - { - "type": "TSHashTable_BATCHEDRENDERFONTDESC_HASHKEY_PTR", - "name": "m_fontBatch", - "offset": 8 - }, - { - "type": "uint32_t", - "name": "m_flags", - "offset": 48 - } - ] - }, - { - "name": "CFrameStrataNode", - "size": 264, - "members": [ - { - "type": "TSExplicitList_CSimpleFrame", - "name": "pendingFrames", - "offset": 0 - }, - { - "type": "TSExplicitList_CSimpleFrame", - "name": "frames", - "offset": 12 - }, - { - "type": "CSimpleFrame*", - "name": "pendingFrame", - "offset": 24 - }, - { - "type": "CRenderBatch", - "name": "batches", - "arrsize": 5, - "offset": 28 - }, - { - "type": "int32_t", - "name": "batchDirty", - "offset": 248 - }, - { - "type": "TSExplicitList_CRenderBatch", - "name": "renderList", - "offset": 252 - } - ] - }, { "name": "M2Attachment", "size": 40,