95 lines
2.2 KiB
C
95 lines
2.2 KiB
C
#ifndef __TERRAIn_TYPES__
|
|
#define __TERRAIn_TYPES__
|
|
|
|
#include "../eterlib/GrpVertexBuffer.h"
|
|
#include "../eterlib/GrpIndexBuffer.h"
|
|
|
|
#define TERRAIN_PATCHSIZE 16
|
|
#define TERRAIN_SIZE 128
|
|
#define TERRAIN_PATCHCOUNT TERRAIN_SIZE/TERRAIN_PATCHSIZE
|
|
#define MAXTERRAINTEXTURES 256
|
|
|
|
typedef struct
|
|
{
|
|
long Active;
|
|
long NeedsUpdate;
|
|
LPDIRECT3DTEXTURE8 pd3dTexture;
|
|
} TTerainSplat;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD TileCount[MAXTERRAINTEXTURES];
|
|
DWORD PatchTileCount[TERRAIN_PATCHCOUNT*TERRAIN_PATCHCOUNT][MAXTERRAINTEXTURES];
|
|
TTerainSplat Splats[MAXTERRAINTEXTURES];
|
|
bool m_bNeedsUpdate;
|
|
} TTerrainSplatPatch;
|
|
|
|
typedef struct
|
|
{
|
|
char used;
|
|
short mat;
|
|
|
|
CGraphicVertexBuffer vb;
|
|
CGraphicIndexBuffer ib;
|
|
long VertexSize;
|
|
|
|
short NumIndices;
|
|
|
|
float minx, maxx;
|
|
float miny, maxy;
|
|
float minz, maxz;
|
|
} TERRAIN_VBUFFER;
|
|
|
|
typedef struct
|
|
{
|
|
char name[19];
|
|
float ambi_r, ambi_g, ambi_b, ambi_a; /* Ambient Color */
|
|
float diff_r, diff_g, diff_b, diff_a; /* Diffuse Color */
|
|
float spec_r, spec_g, spec_b, spec_a; /* Specular Color */
|
|
float spec_power; /* Specular power */
|
|
} PR_MATERIAL;
|
|
|
|
typedef struct
|
|
{
|
|
/* Public Settings */
|
|
float PageUVLength;
|
|
long SquaresPerTexture; /* Heightfield squares per texture (128 texels) */
|
|
long SplatTilesX; /* Number of splat textures across map */
|
|
long SplatTilesY; /* Number of splat textures down map */
|
|
long DisableWrapping;
|
|
long DisableShadow;
|
|
long ShadowMode;
|
|
long OutsideVisible;
|
|
D3DXVECTOR3 SunLocation;
|
|
} TTerrainGlobals;
|
|
|
|
/* Converts a floating point number to an integer by truncation, using
|
|
the FISTP instruction */
|
|
#define PR_FLOAT_TO_INTASM __asm \
|
|
{ \
|
|
__asm fld PR_FCNV \
|
|
__asm fistp PR_ICNV \
|
|
}
|
|
|
|
#define PR_FLOAT_TO_FIXED(inreal, outint) \
|
|
{ \
|
|
PR_FCNV = (inreal) * 65536.0f; \
|
|
PR_FLOAT_TO_INTASM; \
|
|
(outint) = PR_ICNV; \
|
|
}
|
|
|
|
#define PR_FLOAT_TO_INT(inreal, outint) \
|
|
{ \
|
|
PR_FCNV = (inreal); \
|
|
PR_FLOAT_TO_INTASM; \
|
|
(outint) = PR_ICNV > PR_FCNV ? PR_ICNV - 1 : PR_ICNV; \
|
|
}
|
|
|
|
#define PR_FLOAT_ADD_TO_INT(inreal, outint) \
|
|
{ \
|
|
PR_FCNV = (inreal); \
|
|
PR_FLOAT_TO_INTASM; \
|
|
(outint) += PR_ICNV; \
|
|
}
|
|
|
|
#endif //__TERRAIn_TYPES__
|