This repository has been archived on 2022-06-27. You can view files and clone it, but cannot push or open issues or pull requests.
Xash3DArchive/vid_gl/r_mesh.h

115 lines
2.6 KiB
C
Raw Normal View History

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-13 22:00:00 +02:00
uint 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__*/