2010-05-22 22:00:00 +02:00
|
|
|
|
//=======================================================================
|
|
|
|
|
// Copyright XashXT Group 2009 <20>
|
|
|
|
|
// r_mesh.h - generic mesh container
|
|
|
|
|
//=======================================================================
|
2009-07-12 22:00:00 +02:00
|
|
|
|
|
2010-05-22 22:00:00 +02:00
|
|
|
|
#ifndef R_MESH_H
|
|
|
|
|
#define R_MESH_H
|
2009-07-12 22:00:00 +02:00
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
2010-05-22 22:00:00 +02:00
|
|
|
|
MF_NONE = 0,
|
|
|
|
|
MF_NORMALS = BIT( 0 ),
|
|
|
|
|
MF_STCOORDS = BIT( 1 ),
|
|
|
|
|
MF_LMCOORDS = BIT( 2 ),
|
|
|
|
|
MF_COLORS = BIT( 3 ),
|
|
|
|
|
MF_ENABLENORMALS = BIT( 4 ),
|
|
|
|
|
MF_DEFORMVS = BIT( 5 ),
|
|
|
|
|
MF_SVECTORS = BIT( 6 ),
|
|
|
|
|
MF_TVECTORS = BIT( 7 ),
|
2009-07-12 22:00:00 +02:00
|
|
|
|
|
|
|
|
|
// global features
|
2010-05-22 22:00:00 +02:00
|
|
|
|
MF_NOCULL = BIT( 16 ),
|
|
|
|
|
MF_TRIFAN = BIT( 17 ),
|
|
|
|
|
MF_NONBATCHED = BIT( 18 ),
|
|
|
|
|
MF_KEEPLOCK = BIT( 19 )
|
2009-07-12 22:00:00 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
MB_MODEL,
|
|
|
|
|
MB_POLY,
|
2010-06-29 22:00:00 +02:00
|
|
|
|
MB_DECAL,
|
2009-07-12 22:00:00 +02:00
|
|
|
|
MB_CORONA,
|
2010-06-30 22:00:00 +02:00
|
|
|
|
MB_MAXTYPES = 4
|
2009-07-12 22:00:00 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
typedef struct mesh_s
|
|
|
|
|
{
|
2010-05-22 22:00:00 +02:00
|
|
|
|
int numVerts;
|
|
|
|
|
int numElems;
|
|
|
|
|
|
|
|
|
|
vec4_t *vertexArray;
|
2009-08-04 22:00:00 +02:00
|
|
|
|
vec4_t *normalsArray;
|
|
|
|
|
vec4_t *sVectorsArray;
|
2010-05-22 22:00:00 +02:00
|
|
|
|
vec4_t *tVectorsArray;
|
|
|
|
|
vec2_t *stCoordArray;
|
|
|
|
|
vec2_t *lmCoordArray;
|
|
|
|
|
rgba_t *colorsArray;
|
2009-08-04 22:00:00 +02:00
|
|
|
|
elem_t *elems;
|
2010-05-22 22:00:00 +02:00
|
|
|
|
|
|
|
|
|
struct mesh_s *next; // temporary chain of subdivided surfaces
|
2009-07-12 22:00:00 +02:00
|
|
|
|
} mesh_t;
|
|
|
|
|
|
2010-06-01 22:00:00 +02:00
|
|
|
|
#define MB_FOG2NUM( fog ) ((fog) ? ((((int)((fog) - r_worldbrushmodel->fogs))+1) << 2) : 0 )
|
|
|
|
|
#define MB_NUM2FOG( num, fog ) ((fog) = r_worldbrushmodel->fogs+(((num)>>2) & 0xFF), (fog) = ( (fog) == r_worldbrushmodel->fogs ? NULL : (fog)-1 ))
|
2009-07-12 22:00:00 +02:00
|
|
|
|
|
2009-07-28 22:00:00 +02:00
|
|
|
|
#define MB_ENTITY2NUM( ent ) ((int)((ent)-r_entities)<<20 )
|
2010-06-01 22:00:00 +02:00
|
|
|
|
#define MB_NUM2ENTITY( num, ent ) (ent = r_entities+(((num)>>20)&MAX_ENTITIES-1))
|
2009-07-12 22:00:00 +02:00
|
|
|
|
|
2010-06-01 22:00:00 +02:00
|
|
|
|
#define MB_SHADER2NUM( s ) ((s)->sort << 26 ) | ((s) - r_shaders )
|
|
|
|
|
#define MB_NUM2SHADER( num, s ) ((s) = r_shaders + ((num) & 0xFFF))
|
|
|
|
|
#define MB_NUM2SHADERSORT( num ) (((num) >> 26) & 0x1F )
|
2009-07-12 22:00:00 +02:00
|
|
|
|
|
|
|
|
|
#define MIN_RENDER_MESHES 2048
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
2009-08-04 22:00:00 +02:00
|
|
|
|
int shaderkey;
|
|
|
|
|
uint sortkey;
|
2010-05-22 22:00:00 +02:00
|
|
|
|
int infokey; // surface number or mesh number
|
2009-07-12 22:00:00 +02:00
|
|
|
|
union
|
|
|
|
|
{
|
2009-08-04 22:00:00 +02:00
|
|
|
|
int lastPoly;
|
2010-06-01 22:00:00 +02:00
|
|
|
|
uint dlightbits;
|
2009-09-01 22:00:00 +02:00
|
|
|
|
uint modhandle;
|
2010-07-01 22:00:00 +02:00
|
|
|
|
float placeTime; // decal createtime
|
2009-07-12 22:00:00 +02:00
|
|
|
|
};
|
2009-08-04 22:00:00 +02:00
|
|
|
|
uint shadowbits;
|
2009-07-12 22:00:00 +02:00
|
|
|
|
} meshbuffer_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
2009-08-04 22:00:00 +02:00
|
|
|
|
int num_opaque_meshes, max_opaque_meshes;
|
2009-07-12 22:00:00 +02:00
|
|
|
|
meshbuffer_t *meshbuffer_opaque;
|
|
|
|
|
|
2009-08-04 22:00:00 +02:00
|
|
|
|
int num_translucent_meshes, max_translucent_meshes;
|
2009-07-12 22:00:00 +02:00
|
|
|
|
meshbuffer_t *meshbuffer_translucent;
|
|
|
|
|
|
2009-08-04 22:00:00 +02:00
|
|
|
|
int num_portal_opaque_meshes;
|
|
|
|
|
int num_portal_translucent_meshes;
|
2009-07-12 22:00:00 +02:00
|
|
|
|
} meshlist_t;
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
SKYBOX_RIGHT,
|
|
|
|
|
SKYBOX_LEFT,
|
|
|
|
|
SKYBOX_FRONT,
|
|
|
|
|
SKYBOX_BACK,
|
|
|
|
|
SKYBOX_TOP,
|
|
|
|
|
SKYBOX_BOTTOM // not used for skydome, but is used for skybox
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
2010-02-07 22:00:00 +01:00
|
|
|
|
float skyHeight;
|
2009-08-07 22:00:00 +02:00
|
|
|
|
mesh_t *meshes;
|
|
|
|
|
vec2_t *sphereStCoords[6];
|
|
|
|
|
vec2_t *linearStCoords[6];
|
2009-07-12 22:00:00 +02:00
|
|
|
|
|
|
|
|
|
struct ref_shader_s *farboxShaders[6];
|
|
|
|
|
struct ref_shader_s *nearboxShaders[6];
|
|
|
|
|
} skydome_t;
|
|
|
|
|
|
|
|
|
|
#endif /*__R_MESH_H__*/
|