X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=model_shared.h;h=dd5d5e07ba5665d6dfa28345855af7f4ab653d54;hb=17f95319455e01172cfdd806c8b7bc97064203fc;hp=bd292ab094db1396a55e94742ac222881cdd56d5;hpb=f793475e7660ce8e1c6907df76469de94ecb59b8;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.h b/model_shared.h index bd292ab0..dd5d5e07 100644 --- a/model_shared.h +++ b/model_shared.h @@ -112,7 +112,7 @@ r_vertexgeneric_t; typedef struct r_vertexmesh_s { - // 80 bytes + // 88 bytes float vertex3f[3]; float color4f[4]; float texcoordtexture2f[2]; @@ -120,6 +120,8 @@ typedef struct r_vertexmesh_s float svector3f[3]; float tvector3f[3]; float normal3f[3]; + unsigned char skeletalindex4ub[4]; + unsigned char skeletalweight4ub[4]; } r_vertexmesh_t; @@ -129,6 +131,7 @@ typedef struct r_meshbuffer_s void *devicebuffer; // Direct3D size_t size; qboolean isindexbuffer; + qboolean isuniformbuffer; qboolean isdynamic; qboolean isindex16; char name[MAX_QPATH]; @@ -157,16 +160,22 @@ typedef struct surfmesh_s float *data_texcoordtexture2f; // float[verts*2] texcoords for surface texture float *data_texcoordlightmap2f; // float[verts*2] texcoords for lightmap texture float *data_lightmapcolor4f; + unsigned char *data_skeletalindex4ub; + unsigned char *data_skeletalweight4ub; int *data_lightmapoffsets; // index into surface's lightmap samples for vertex lighting + r_vertexmesh_t *data_vertexmesh; // interleaved arrays for D3D // vertex buffer object (stores geometry in video memory) r_meshbuffer_t *vbo_vertexbuffer; - size_t vbooffset_vertex3f; - size_t vbooffset_svector3f; - size_t vbooffset_tvector3f; - size_t vbooffset_normal3f; - size_t vbooffset_texcoordtexture2f; - size_t vbooffset_texcoordlightmap2f; - size_t vbooffset_lightmapcolor4f; + int vbooffset_vertex3f; + int vbooffset_svector3f; + int vbooffset_tvector3f; + int vbooffset_normal3f; + int vbooffset_texcoordtexture2f; + int vbooffset_texcoordlightmap2f; + int vbooffset_lightmapcolor4f; + int vbooffset_skeletalindex4ub; + int vbooffset_skeletalweight4ub; + int vbooffset_vertexmesh; // morph blending, these are zero if model is skeletal or static int num_morphframes; struct md3vertex_s *data_morphmd3vertex; @@ -183,9 +192,7 @@ typedef struct surfmesh_s qboolean isanimated; // vertex and index buffers for rendering - r_vertexmesh_t *vertexmesh; - r_meshbuffer_t *vertex3fbuffer; - r_meshbuffer_t *vertexmeshbuffer; + r_meshbuffer_t *vertexmesh_vertexbuffer; } surfmesh_t; @@ -217,10 +224,13 @@ typedef struct shadowmesh_s // used always int *element3i; r_meshbuffer_t *element3i_indexbuffer; - size_t element3i_bufferoffset; + int element3i_bufferoffset; unsigned short *element3s; r_meshbuffer_t *element3s_indexbuffer; - size_t element3s_bufferoffset; + int element3s_bufferoffset; + // vertex/index buffers for rendering + // (created by Mod_ShadowMesh_Finish if possible) + r_vertexmesh_t *vertexmesh; // usually NULL // used for shadow mapping cubemap side partitioning int sideoffsets[6], sidetotals[6]; // used for shadow mesh (NULL on light mesh) @@ -229,16 +239,12 @@ typedef struct shadowmesh_s // while building meshes shadowmeshvertexhash_t **vertexhashtable, *vertexhashentries; r_meshbuffer_t *vbo_vertexbuffer; - size_t vbooffset_vertex3f; - size_t vbooffset_svector3f; - size_t vbooffset_tvector3f; - size_t vbooffset_normal3f; - size_t vbooffset_texcoord2f; - // vertex/index buffers for rendering - // (created by Mod_ShadowMesh_Finish if possible) - r_vertexmesh_t *vertexmesh; // usually NULL - r_meshbuffer_t *vertex3fbuffer; - r_meshbuffer_t *vertexmeshbuffer; // usually NULL + int vbooffset_vertex3f; + int vbooffset_svector3f; + int vbooffset_tvector3f; + int vbooffset_normal3f; + int vbooffset_texcoord2f; + int vbooffset_vertexmesh; } shadowmesh_t; @@ -251,6 +257,7 @@ shadowmesh_t; #define Q3TEXTUREFLAG_REFLECTION 512 #define Q3TEXTUREFLAG_WATERSHADER 1024 #define Q3TEXTUREFLAG_CAMERA 2048 +#define Q3TEXTUREFLAG_TRANSPARENTSORT 4096 #define Q3PATHLENGTH 64 #define TEXTURE_MAXFRAMES 64 @@ -426,12 +433,19 @@ typedef enum dpoffsetmapping_technique_s OFFSETMAPPING_RELIEF // relief }dpoffsetmapping_technique_t; +typedef enum dptransparentsort_category_e +{ + TRANSPARENTSORT_SKY, + TRANSPARENTSORT_DISTANCE, + TRANSPARENTSORT_HUD, +}dptransparentsortcategory_t; typedef struct q3shaderinfo_s { char name[Q3PATHLENGTH]; #define Q3SHADERINFO_COMPARE_START surfaceparms int surfaceparms; + int surfaceflags; int textureflags; int numlayers; qboolean lighting; @@ -476,11 +490,14 @@ typedef struct q3shaderinfo_s // polygonoffset (only used if Q3TEXTUREFLAG_POLYGONOFFSET) float biaspolygonoffset, biaspolygonfactor; + // transparent sort category + dptransparentsortcategory_t transparentsort; + // gloss float specularscalemod; float specularpowermod; - // rtlightning ambient addition + // rtlighting ambient addition float rtlightambient; #define Q3SHADERINFO_COMPARE_END rtlightambient } @@ -617,6 +634,9 @@ typedef struct texture_s float offsetscale; float offsetbias; + // transparent sort category + dptransparentsortcategory_t transparentsort; + // gloss float specularscalemod; float specularpowermod; @@ -723,6 +743,10 @@ typedef struct model_brush_s { // true if this model is a HalfLife .bsp file qboolean ishlbsp; + // true if this model is a BSP2rmqe .bsp file (expanded 32bit bsp format for rmqe) + qboolean isbsp2rmqe; + // true if this model is a BSP2 .bsp file (expanded 32bit bsp format for DarkPlaces, others?) + qboolean isbsp2; // string of entity definitions (.map format) char *entities; @@ -798,7 +822,7 @@ typedef struct model_brush_s int (*FindBoxClusters)(struct model_s *model, const vec3_t mins, const vec3_t maxs, int maxclusters, int *clusterlist); void (*LightPoint)(struct model_s *model, const vec3_t p, vec3_t ambientcolor, vec3_t diffusecolor, vec3_t diffusenormal); void (*FindNonSolidLocation)(struct model_s *model, const vec3_t in, vec3_t out, vec_t radius); - mleaf_t *(*PointInLeaf)(struct model_s *model, const float *p); + mleaf_t *(*PointInLeaf)(struct model_s *model, const vec3_t p); // these are actually only found on brushq1, but NULL is handled gracefully void (*AmbientSoundLevelsForPoint)(struct model_s *model, const vec3_t p, unsigned char *out, int outsize); void (*RoundUpToHullSize)(struct model_s *cmodel, const vec3_t inmins, const vec3_t inmaxs, vec3_t outmins, vec3_t outmaxs); @@ -820,7 +844,7 @@ model_brush_t; typedef struct model_brushq1_s { - dmodel_t *submodels; + mmodel_t *submodels; int numvertexes; mvertex_t *vertexes; @@ -978,10 +1002,10 @@ typedef struct model_s // for skeletal models int num_bones; aliasbone_t *data_bones; - float num_posescale; // scaling factor from origin in poses6s format (includes divide by 32767) - float num_poseinvscale; // scaling factor to origin in poses6s format (includes multiply by 32767) + float num_posescale; // scaling factor from origin in poses7s format (includes divide by 32767) + float num_poseinvscale; // scaling factor to origin in poses7s format (includes multiply by 32767) int num_poses; - short *data_poses6s; // origin xyz, quat xyz, w implied negative, unit length, values normalized to +/-32767 range + short *data_poses7s; // origin xyz, quat xyzw, unit length, values normalized to +/-32767 range float *data_baseboneposeinverse; // textures of this model int num_textures;