Mercurial > mm7
diff RenderStruct.h @ 2410:2d3c3d1dff0c
added RenderStruct.h
author | Ritor1 |
---|---|
date | Tue, 15 Jul 2014 15:44:45 +0600 |
parents | |
children | 1d04e48651d4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RenderStruct.h Tue Jul 15 15:44:45 2014 +0600 @@ -0,0 +1,348 @@ +#pragma once + +#include <cstdint> +#include <cstdio> + +#include "lib\legacy_dx\d3d.h" +#include "OSWindow.h" + +#include "VectorTypes.h" + + +#define ErrD3D(hr) \ + do \ + { \ + extern void ErrHR(HRESULT, const char *, const char *, const char *, int); \ + ErrHR(hr, "Direct3D", __FUNCTION__, __FILE__, __LINE__); \ + } while(0) + +struct Polygon; +struct Texture; +struct RGBTexture; +struct RenderBillboardTransform_local0; +struct ODMFace; + + +unsigned __int16 Color16(unsigned __int32 r, unsigned __int32 g, unsigned __int32 b); +unsigned __int32 Color32(unsigned __int16 color16); + +/* 119 */ +#pragma pack(push, 1) +struct RenderVertexSoft +{ + inline RenderVertexSoft(): + flt_2C(0.0f) + {} + + Vec3_float_ vWorldPosition; + Vec3_float_ vWorldViewPosition; + float vWorldViewProjX; + float vWorldViewProjY; + float _rhw; + float u; + float v; + float flt_2C; +}; +#pragma pack(pop) + + + +/* 112 */ +#pragma pack(push, 1) +struct RenderVertexD3D3 +{ + Vec3_float_ pos; + float rhw; + signed int diffuse; + unsigned int specular; + Vec2_float_ texcoord; +}; +#pragma pack(pop) + +class Sprite; +class SpriteFrame; + +/* 161 */ +#pragma pack(push, 1) +struct RenderBillboard +{ + int _screenspace_x_scaler_packedfloat; + int _screenspace_y_scaler_packedfloat; + float fov_x; + float fov_y; + union + { + int sZValue; + struct + { + unsigned __int16 object_pid; + signed __int16 actual_z; + }; + }; + int field_14_actor_id; + signed __int16 HwSpriteID; + __int16 uPalette; + __int16 uIndoorSectorID; + __int16 field_1E; + __int16 world_x; + __int16 world_y; + __int16 world_z; + __int16 uScreenSpaceX; + __int16 uScreenSpaceY; + unsigned __int16 dimming_level; + signed int sTintColor; + SpriteFrame *pSpriteFrame; + + inline float GetFloatZ() const + { + return (float)object_pid / 65535.0f + (float)actual_z; + } +}; +#pragma pack(pop) + + +#pragma pack(push, 1) +struct RenderD3D__DevInfo +{ + unsigned int bIsDeviceCompatible; + char *pName; + char *pDescription; + GUID *pGUID; + unsigned int uCaps; + char *pDriverName; + char *pDeviceDesc; + char *pDDraw4DevDesc; + GUID *pDirectDrawGUID; + int uVideoMem; +}; +#pragma pack(pop) + + + +#pragma pack(push, 1) +struct RenderD3D_D3DDevDesc +{ + int field_0; + int field_4; + int field_8; + int field_C; + int field_10; + char *pDriverName; + char *pDeviceDesc; + char *pDDraw4DevDesc; + GUID *pGUID; + unsigned int uVideoMem; +}; +#pragma pack(pop) + + + + + + + + + +/* 280 */ +#pragma pack(push, 1) +struct HWLTexture +{ + inline HWLTexture(): + field_0(0), field_4(0), field_8(0), + field_C(0), field_10(0), field_14(0) + {} + + int field_0; + int field_4; + int field_8; + int field_C; + int field_10; + int field_14; + int uBufferWidth; + int uBufferHeight; + int uAreaWidth; + int uAreaHeigth; + unsigned int uWidth; + unsigned int uHeight; + int uAreaX; + int uAreaY; + unsigned __int16 *pPixels; +}; +#pragma pack(pop) + + +/* 185 */ +#pragma pack(push, 1) +struct RenderHWLContainer +{ + RenderHWLContainer(); + bool Load(const wchar_t *pFilename); + bool Release(); + + HWLTexture *LoadTexture(const char *pName, int bMipMaps); + + FILE *pFile; + uint32_t uSignature; + unsigned int uDataOffset; + unsigned int uNumItems; + char *pSpriteNames[50000]; + int pSpriteOffsets[50000]; + int bDumpDebug; + int scale_hwls_to_half; +}; +#pragma pack(pop) + + + +/* 242 */ +#pragma pack(push, 1) +struct RenderBillboardD3D +{ + inline RenderBillboardD3D(): + opacity(Transparent), + field_90(-1), + sParentBillboardID(-1), + uNumVertices(4) + {} + + enum OpacityType: unsigned __int32 + { + Transparent = 0, + Opaque_1 = 1, + Opaque_2 = 2, + Opaque_3 = 3, + NoBlend = 0xFFFFFFFF + }; + + IDirect3DTexture2 *pTexture; + unsigned int uNumVertices; + RenderVertexD3D3 pQuads[4]; + float z_order; + OpacityType opacity; + int field_90; + int sZValue; + signed int sParentBillboardID; +}; +#pragma pack(pop) + + + + +#pragma pack(push, 1) +struct RenderD3D_aux +{ + RenderD3D__DevInfo *pInfo; + RenderD3D_D3DDevDesc *ptr_4; +}; +#pragma pack(pop) + + + +/* 183 */ +#pragma pack(push, 1) +class RenderD3D +{ +public: + RenderD3D(); + + void GetAvailableDevices(RenderD3D__DevInfo **pOutDevices); + void Release(); + bool CreateDevice(unsigned int uDeviceID, int bWindowed, OSWindow *window); + unsigned int GetDeviceCaps(); + void ClearTarget(unsigned int bClearColor, unsigned int uClearColor, unsigned int bClearDepth, float z_clear); + void Present(bool bForceBlit); + bool CreateTexture(unsigned int uTextureWidth, unsigned int uTextureHeight, IDirectDrawSurface4 **pOutSurface, IDirect3DTexture2 **pOutTexture, bool bAlphaChannel, bool bMipmaps, unsigned int uMinDeviceTexDim); + void HandleLostResources(); + + + unsigned int bWindowed; + int field_4; + int field_8; + HWND hWindow; + int field_10; + int field_14; + int field_18; + RenderD3D__DevInfo *pAvailableDevices; + IDirectDraw4 *pHost; + IDirect3D3 *pDirect3D; + IUnknown *pUnk; + IDirectDrawSurface4 *pBackBuffer; + IDirectDrawSurface4 *pFrontBuffer; + IDirectDrawSurface4 *pZBuffer; + IDirect3DDevice3 *pDevice; + IDirect3DViewport3 *pViewport; + int field_40; + int field_44; + char pErrorMessage[48]; + char field_78[208]; +}; +#pragma pack(pop) +extern struct RenderVertexD3D3 pVertices[50]; + +/* 182 */ +#pragma pack(push, 1) + +#pragma pack(pop) + +bool PauseGameDrawing(); + +extern struct IDirectDrawClipper *pDDrawClipper; +extern struct Render *pRenderer; // idb +extern struct pUnkTerrain *Unks; + + + +/* 248 */ +#pragma pack(push, 1) +struct RenderBillboardTransform_local0 +{ + void *pTarget; + int *pTargetZ; + int uScreenSpaceX; + int uScreenSpaceY; + int _screenspace_x_scaler_packedfloat; + int _screenspace_y_scaler_packedfloat; + char field_18[8]; + unsigned __int16 *pPalette; + unsigned __int16 *pPalette2; + union + { + int sZValue; + struct + { + unsigned short object_pid; + short zbuffer_depth; + }; + }; + unsigned int uFlags; // & 4 - mirror horizontally + unsigned int uTargetPitch; + unsigned int uViewportX; + unsigned int uViewportY; + unsigned int uViewportZ; + unsigned int uViewportW; + int field_44; + int sParentBillboardID; + int sTintColor; +}; +#pragma pack(pop) + + + + +extern int uNumDecorationsDrawnThisFrame; // weak +extern RenderBillboard pBillboardRenderList[500]; +extern unsigned int uNumBillboardsToDraw; +extern int uNumSpritesDrawnThisFrame; // weak + + + + +extern RenderVertexSoft array_507D30[50]; +extern RenderVertexSoft array_50AC10[50]; +extern RenderVertexSoft array_73D150[20]; + +extern RenderVertexD3D3 d3d_vertex_buffer[50]; + + +int ODM_NearClip(unsigned int uVertexID); // idb +int ODM_FarClip(unsigned int uNumVertices); \ No newline at end of file