#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;
// 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;
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;
{
// true if this model is a HalfLife .bsp file
qboolean ishlbsp;
+ // true if this model is a BSP2 .bsp file (expanded 32bit bsp format for DarkPlaces, RMQ, 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;