typedef struct r_vertexmesh_s
{
- // 80 bytes
+ // 88 bytes
float vertex3f[3];
float color4f[4];
float texcoordtexture2f[2];
float svector3f[3];
float tvector3f[3];
float normal3f[3];
+ unsigned char skeletalindex4ub[4];
+ unsigned char skeletalweight4ub[4];
}
r_vertexmesh_t;
void *devicebuffer; // Direct3D
size_t size;
qboolean isindexbuffer;
+ qboolean isuniformbuffer;
qboolean isdynamic;
qboolean isindex16;
char name[MAX_QPATH];
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;
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;
// 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)
// 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;
#define Q3TEXTUREFLAG_REFLECTION 512
#define Q3TEXTUREFLAG_WATERSHADER 1024
#define Q3TEXTUREFLAG_CAMERA 2048
+#define Q3TEXTUREFLAG_TRANSPARENTSORT 4096
#define Q3PATHLENGTH 64
#define TEXTURE_MAXFRAMES 64
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;
// dp-specific additions:
// shadow control
+ qboolean dpnortlight;
qboolean dpshadow;
qboolean dpnoshadow;
// add collisions to all triangles of the surface
qboolean dpmeshcollisions;
+ // kill shader based on cvar checks
+ qboolean dpshaderkill;
+
// fake reflection
char dpreflectcube[Q3PATHLENGTH];
// offsetmapping
dpoffsetmapping_technique_t offsetmapping;
float offsetscale;
+ float offsetbias; // 0 is normal, 1 leads to alpha 0 being neutral and alpha 1 pushing "out"
// polygonoffset (only used if Q3TEXTUREFLAG_POLYGONOFFSET)
float biaspolygonoffset, biaspolygonfactor;
+ // transparent sort category
+ dptransparentsortcategory_t transparentsort;
+
// gloss
float specularscalemod;
float specularpowermod;
-#define Q3SHADERINFO_COMPARE_END specularpowermod
+
+ // rtlighting ambient addition
+ float rtlightambient;
+#define Q3SHADERINFO_COMPARE_END rtlightambient
}
q3shaderinfo_t;
char name[64];
int surfaceflags;
int supercontents;
- int surfaceparms;
int textureflags;
// reflection
// offsetmapping
dpoffsetmapping_technique_t offsetmapping;
float offsetscale;
+ float offsetbias;
+
+ // transparent sort category
+ dptransparentsortcategory_t transparentsort;
// gloss
float specularscalemod;
float specularpowermod;
+
+ // diffuse and ambient
+ float rtlightambient;
}
texture_t;
{
// 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;
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);
typedef struct model_brushq1_s
{
- dmodel_t *submodels;
+ mmodel_t *submodels;
int numvertexes;
mvertex_t *vertexes;
// 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;
// if set, the model contains light information (lightmap, or vertexlight)
qboolean lit;
+ float lightmapscale;
}
dp_model_t;
extern cvar_t r_mipskins;
extern cvar_t r_mipnormalmaps;
-typedef struct skeleton_s
-{
- const dp_model_t *model;
- matrix4x4_t *relativetransforms;
-}
-skeleton_t;
-
typedef struct skinfileitem_s
{
struct skinfileitem_s *next;