427 lines
8.5 KiB
C
427 lines
8.5 KiB
C
#ifndef GFXWORLD_H
|
|
#define GFXWORLD_H
|
|
|
|
#include "xgfximage.h"
|
|
#include "gfxlightdef.h"
|
|
#include "xmodel.h"
|
|
|
|
struct GfxStreamingAabbTree
|
|
{
|
|
unsigned __int16 firstItem;
|
|
unsigned __int16 itemCount;
|
|
unsigned __int16 firstChild;
|
|
unsigned __int16 childCount;
|
|
float mins[3];
|
|
float maxs[3];
|
|
};
|
|
|
|
struct GfxWorldStreamInfo
|
|
{
|
|
int aabbTreeCount;
|
|
GfxStreamingAabbTree *aabbTrees;
|
|
int leafRefCount;
|
|
int *leafRefs;
|
|
};
|
|
|
|
struct GfxWorldVertex
|
|
{
|
|
float xyz[3];
|
|
float binormalSign;
|
|
GfxColor color;
|
|
float texCoord[2];
|
|
float lmapCoord[2];
|
|
PackedUnitVec normal;
|
|
PackedUnitVec tangent;
|
|
};
|
|
|
|
struct GfxWorldVertexData
|
|
{
|
|
GfxWorldVertex *vertices;
|
|
D3DVertexBuffer worldVb;
|
|
};
|
|
|
|
struct GfxWorldVertexLayerData
|
|
{
|
|
unsigned __int8 *data;
|
|
D3DVertexBuffer layerVb;
|
|
};
|
|
|
|
struct SunLightParseParams
|
|
{
|
|
char name[64];
|
|
float ambientScale;
|
|
float ambientColor[3];
|
|
float diffuseFraction;
|
|
float sunLight;
|
|
float sunColor[3];
|
|
float diffuseColor[3];
|
|
bool diffuseColorHasBeenSet;
|
|
float angles[3];
|
|
};
|
|
|
|
struct GfxLight
|
|
{
|
|
unsigned __int8 type;
|
|
unsigned __int8 canUseShadowMap;
|
|
unsigned __int8 unused[2];
|
|
float color[3];
|
|
float dir[3];
|
|
float origin[3];
|
|
float radius;
|
|
float cosHalfFovOuter;
|
|
float cosHalfFovInner;
|
|
int exponent;
|
|
unsigned int spotShadowIndex;
|
|
XGfxLightDef *def;
|
|
};
|
|
|
|
struct GfxReflectionProbe
|
|
{
|
|
float origin[3];
|
|
GfxImage *reflectionImage;
|
|
};
|
|
|
|
struct GfxWorldDpvsPlanes
|
|
{
|
|
int cellCount;
|
|
CPlane *planes;
|
|
unsigned __int16 *nodes;
|
|
unsigned int *sceneEntCellBits;
|
|
};
|
|
|
|
struct GfxAabbTree
|
|
{
|
|
float mins[3];
|
|
float maxs[3];
|
|
unsigned __int16 childCount;
|
|
unsigned __int16 surfaceCount;
|
|
unsigned __int16 startSurfIndex;
|
|
unsigned __int16 smodelIndexCount;
|
|
unsigned __int16 *smodelIndexes;
|
|
int childrenOffset;
|
|
};
|
|
|
|
struct GfxPortal;
|
|
struct GfxPortalWritable
|
|
{
|
|
bool isQueued;
|
|
bool isAncestor;
|
|
unsigned __int8 recursionDepth;
|
|
unsigned __int8 hullPointCount;
|
|
float (*hullPoints)[2];
|
|
GfxPortal *queuedParent;
|
|
};
|
|
|
|
struct DpvsPlane
|
|
{
|
|
float coeffs[4];
|
|
unsigned __int8 side[3];
|
|
unsigned __int8 pad;
|
|
};
|
|
|
|
struct GfxCell;
|
|
struct GfxPortal
|
|
{
|
|
GfxPortalWritable writable;
|
|
DpvsPlane plane;
|
|
GfxCell *cell;
|
|
float (*vertices)[3];
|
|
unsigned __int8 vertexCount;
|
|
float hullAxis[2][3];
|
|
};
|
|
|
|
struct GfxCell
|
|
{
|
|
float mins[3];
|
|
float maxs[3];
|
|
int aabbTreeCount;
|
|
GfxAabbTree *aabbTree;
|
|
int portalCount;
|
|
GfxPortal *portals;
|
|
int cullGroupCount;
|
|
int *cullGroups;
|
|
unsigned __int8 reflectionProbeCount;
|
|
unsigned __int8 *reflectionProbes;
|
|
};
|
|
|
|
struct GfxLightmapArray
|
|
{
|
|
GfxImage *primary;
|
|
GfxImage *secondary;
|
|
};
|
|
|
|
struct GfxLightGridEntry
|
|
{
|
|
unsigned __int16 colorsIndex;
|
|
unsigned __int8 primaryLightIndex;
|
|
unsigned __int8 needsTrace;
|
|
};
|
|
|
|
struct GfxLightGridColors
|
|
{
|
|
unsigned __int8 rgb[56][3];
|
|
};
|
|
|
|
struct GfxLightGrid
|
|
{
|
|
bool hasLightRegions;
|
|
unsigned int sunPrimaryLightIndex;
|
|
unsigned __int16 mins[3];
|
|
unsigned __int16 maxs[3];
|
|
unsigned int rowAxis;
|
|
unsigned int colAxis;
|
|
unsigned __int16 *rowDataStart;
|
|
unsigned int rawRowDataSize;
|
|
unsigned __int8 *rawRowData;
|
|
unsigned int entryCount;
|
|
GfxLightGridEntry *entries;
|
|
unsigned int colorCount;
|
|
GfxLightGridColors *colors;
|
|
};
|
|
|
|
struct GfxBrushModelWritable
|
|
{
|
|
float mins[3];
|
|
float maxs[3];
|
|
};
|
|
|
|
struct GfxBrushModel
|
|
{
|
|
GfxBrushModelWritable writable;
|
|
float bounds[2][3];
|
|
unsigned int surfaceCount;
|
|
unsigned int startSurfIndex;
|
|
};
|
|
|
|
struct MaterialMemory
|
|
{
|
|
Material *material;
|
|
int memory;
|
|
};
|
|
|
|
struct sunflare_t
|
|
{
|
|
bool hasValidData;
|
|
Material *spriteMaterial;
|
|
Material *flareMaterial;
|
|
float spriteSize;
|
|
float flareMinSize;
|
|
float flareMinDot;
|
|
float flareMaxSize;
|
|
float flareMaxDot;
|
|
float flareMaxAlpha;
|
|
int flareFadeInTime;
|
|
int flareFadeOutTime;
|
|
float blindMinDot;
|
|
float blindMaxDot;
|
|
float blindMaxDarken;
|
|
int blindFadeInTime;
|
|
int blindFadeOutTime;
|
|
float glareMinDot;
|
|
float glareMaxDot;
|
|
float glareMaxLighten;
|
|
int glareFadeInTime;
|
|
int glareFadeOutTime;
|
|
float sunFxPosition[3];
|
|
};
|
|
|
|
struct XModelDrawInfo
|
|
{
|
|
unsigned __int16 lod;
|
|
unsigned __int16 surfId;
|
|
};
|
|
|
|
struct GfxSceneDynModel
|
|
{
|
|
XModelDrawInfo info;
|
|
unsigned __int16 dynEntId;
|
|
};
|
|
|
|
struct BModelDrawInfo
|
|
{
|
|
unsigned __int16 surfId;
|
|
};
|
|
|
|
struct GfxSceneDynBrush
|
|
{
|
|
BModelDrawInfo info;
|
|
unsigned __int16 dynEntId;
|
|
};
|
|
|
|
struct GfxShadowGeometry
|
|
{
|
|
unsigned __int16 surfaceCount;
|
|
unsigned __int16 smodelCount;
|
|
unsigned __int16 *sortedSurfIndex;
|
|
unsigned __int16 *smodelIndex;
|
|
};
|
|
|
|
struct GfxLightRegionAxis
|
|
{
|
|
float dir[3];
|
|
float midPoint;
|
|
float halfSize;
|
|
};
|
|
|
|
struct GfxLightRegionHull
|
|
{
|
|
float kdopMidPoint[9];
|
|
float kdopHalfSize[9];
|
|
unsigned int axisCount;
|
|
GfxLightRegionAxis *axis;
|
|
};
|
|
|
|
struct GfxLightRegion
|
|
{
|
|
unsigned int hullCount;
|
|
GfxLightRegionHull *hulls;
|
|
};
|
|
|
|
struct GfxStaticModelInst
|
|
{
|
|
float mins[3];
|
|
float maxs[3];
|
|
GfxColor groundLighting;
|
|
};
|
|
|
|
struct srfTriangles_t
|
|
{
|
|
int vertexLayerData;
|
|
int firstVertex;
|
|
unsigned __int16 vertexCount;
|
|
unsigned __int16 triCount;
|
|
int baseIndex;
|
|
float topMipMins[3];
|
|
float topMipMaxs[3];
|
|
};
|
|
|
|
struct GfxSurface
|
|
{
|
|
srfTriangles_t tris;
|
|
Material *material;
|
|
unsigned __int8 lightmapIndex;
|
|
unsigned __int8 reflectionProbeIndex;
|
|
unsigned __int8 primaryLightIndex;
|
|
bool castsSunShadow;
|
|
float bounds[2][3];
|
|
};
|
|
|
|
struct GfxCullGroup
|
|
{
|
|
float mins[3];
|
|
float maxs[3];
|
|
int surfaceCount;
|
|
int startSurfIndex;
|
|
};
|
|
|
|
struct GfxPackedPlacement
|
|
{
|
|
float origin[3];
|
|
PackedUnitVec axis[3];
|
|
float scale;
|
|
};
|
|
|
|
struct GfxStaticModelDrawInst
|
|
{
|
|
float cullDist;
|
|
GfxPackedPlacement placement;
|
|
Model *model;
|
|
unsigned __int8 reflectionProbeIndex;
|
|
unsigned __int8 primaryLightIndex;
|
|
unsigned __int16 lightingHandle;
|
|
unsigned __int8 flags;
|
|
};
|
|
|
|
struct GfxWorldDpvsStatic
|
|
{
|
|
unsigned int smodelCount;
|
|
unsigned int staticSurfaceCount;
|
|
unsigned int litSurfsBegin;
|
|
unsigned int litSurfsEnd;
|
|
unsigned int decalSurfsBegin;
|
|
unsigned int decalSurfsEnd;
|
|
unsigned int emissiveSurfsBegin;
|
|
unsigned int emissiveSurfsEnd;
|
|
unsigned int smodelVisDataCount;
|
|
unsigned int surfaceVisDataCount;
|
|
unsigned __int8 *smodelVisData[3];
|
|
unsigned __int8 *surfaceVisData[3];
|
|
unsigned int *lodData;
|
|
unsigned __int16 *sortedSurfIndex;
|
|
GfxStaticModelInst *smodelInsts;
|
|
GfxSurface *surfaces;
|
|
GfxCullGroup *cullGroups;
|
|
GfxStaticModelDrawInst *smodelDrawInsts;
|
|
GfxDrawSurfFields *surfaceMaterials;
|
|
unsigned int *surfaceCastsSunShadow;
|
|
volatile int usageCount;
|
|
};
|
|
|
|
struct GfxWorldDpvsDynamic
|
|
{
|
|
unsigned int dynEntClientWordCount[2];
|
|
unsigned int dynEntClientCount[2];
|
|
unsigned int *dynEntCellBits[2];
|
|
unsigned __int8 *dynEntVisData[2][3];
|
|
};
|
|
|
|
struct GfxWorld
|
|
{
|
|
const char *name;
|
|
const char *baseName;
|
|
int planeCount;
|
|
int nodeCount;
|
|
int indexCount;
|
|
unsigned __int16 *indices;
|
|
D3DIndexBuffer indexBuffer;
|
|
int surfaceCount;
|
|
GfxWorldStreamInfo streamInfo;
|
|
int skySurfCount;
|
|
int *skyStartSurfs;
|
|
GfxImage *skyImage;
|
|
unsigned __int8 skySamplerState;
|
|
unsigned int vertexCount;
|
|
GfxWorldVertexData vd;
|
|
unsigned int vertexLayerDataSize;
|
|
GfxWorldVertexLayerData vld;
|
|
SunLightParseParams sunParse;
|
|
GfxLight *sunLight;
|
|
float sunColorFromBsp[3];
|
|
unsigned int sunPrimaryLightIndex;
|
|
unsigned int primaryLightCount;
|
|
int cullGroupCount;
|
|
unsigned int reflectionProbeCount;
|
|
GfxReflectionProbe *reflectionProbes;
|
|
GfxTexture *reflectionProbeTextures;
|
|
GfxWorldDpvsPlanes dpvsPlanes;
|
|
int cellBitsCount;
|
|
GfxCell *cells;
|
|
int lightmapCount;
|
|
GfxLightmapArray *lightmaps;
|
|
GfxLightGrid lightGrid;
|
|
GfxTexture *lightmapPrimaryTextures;
|
|
GfxTexture *lightmapSecondaryTextures;
|
|
int modelCount;
|
|
GfxBrushModel *models;
|
|
float mins[3];
|
|
float maxs[3];
|
|
unsigned int checksum;
|
|
int materialMemoryCount;
|
|
MaterialMemory *materialMemory;
|
|
sunflare_t sun;
|
|
float outdoorLookupMatrix[4][4];
|
|
GfxImage *outdoorImage;
|
|
unsigned int *cellCasterBits;
|
|
GfxSceneDynModel *sceneDynModel;
|
|
GfxSceneDynBrush *sceneDynBrush;
|
|
unsigned int *primaryLightEntityShadowVis;
|
|
unsigned int *primaryLightDynEntShadowVis[2];
|
|
unsigned __int8 *nonSunPrimaryLightForModelDynEnt;
|
|
GfxShadowGeometry *shadowGeom;
|
|
GfxLightRegion *lightRegion;
|
|
GfxWorldDpvsStatic dpvs;
|
|
GfxWorldDpvsDynamic dpvsDyn;
|
|
};
|
|
|
|
#endif // GFXWORLD_H
|