// TODO: support these features more directly
#define Q3TEXTUREFLAG_TWOSIDED 1
#define Q3TEXTUREFLAG_NOPICMIP 16
+#define Q3TEXTUREFLAG_POLYGONOFFSET 32
+#define Q3TEXTUREFLAG_REFLECTION 256
+#define Q3TEXTUREFLAG_WATERSHADER 512
#define Q3PATHLENGTH 64
#define TEXTURE_MAXFRAMES 64
q3shaderinfo_layer_t layers[Q3SHADER_MAXLAYERS];
char skyboxname[Q3PATHLENGTH];
q3shaderinfo_deform_t deforms[Q3MAXDEFORMS];
+
+ vec3_t reflectcolor, refractcolor;
+ float reflectfactor; // amount of reflection (1.0 = full, can't be larger)
+ float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies; note that reflection distort is not configurable because that's what the bumpmap should do)
}
q3shaderinfo_t;
// current PolygonOffset values for rendering this material
float currentpolygonfactor;
float currentpolygonoffset;
+ float basepolygonfactor;
+ float basepolygonoffset;
// textures to use when rendering this material
skinframe_t *currentskinframe;
int supercontents;
int surfaceparms;
int textureflags;
+
+ // reflection
+ vec3_t reflectcolor, refractcolor;
+ float reflectfactor; // amount of reflection (1.0 = full, can't be larger)
+ float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies; note that reflection distort is not configurable because that's what the bumpmap should do)
}
texture_t;
int (*SuperContentsFromNativeContents)(struct model_s *model, int nativecontents);
int (*NativeContentsFromSuperContents)(struct model_s *model, int supercontents);
unsigned char *(*GetPVS)(struct model_s *model, const vec3_t p);
- int (*FatPVS)(struct model_s *model, const vec3_t org, vec_t radius, unsigned char *pvsbuffer, int pvsbufferlength);
+ int (*FatPVS)(struct model_s *model, const vec3_t org, vec_t radius, unsigned char *pvsbuffer, int pvsbufferlength, qboolean merge);
int (*BoxTouchingPVS)(struct model_s *model, const unsigned char *pvs, const vec3_t mins, const vec3_t maxs);
int (*BoxTouchingLeafPVS)(struct model_s *model, const unsigned char *pvs, const vec3_t mins, const vec3_t maxs);
int (*BoxTouchingVisibleLeafs)(struct model_s *model, const unsigned char *visibleleafs, const vec3_t mins, const vec3_t maxs);
int *surfedges;
int numclipnodes;
- dclipnode_t *clipnodes;
+ mclipnode_t *clipnodes;
hull_t hulls[MAX_MAP_HULLS];
const char *modeldatatypestring;
// draw the model's sky polygons (only used by brush models)
void(*DrawSky)(struct entity_render_s *ent);
+ // draw refraction/reflection textures for the model's water polygons (only used by brush models)
+ void(*DrawAddWaterPlanes)(struct entity_render_s *ent);
// draw the model using lightmap/dlight shading
void(*Draw)(struct entity_render_s *ent);
// draw the model to the depth buffer (no color rendering at all)
void(*DrawDepth)(struct entity_render_s *ent);
+ // draw any enabled debugging effects on this model (such as showing triangles, normals, collision brushes...)
+ void(*DrawDebug)(struct entity_render_s *ent);
// gathers info on which clusters and surfaces are lit by light, as well as calculating a bounding box
void(*GetLightInfo)(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, vec3_t outmins, vec3_t outmaxs, int *outleaflist, unsigned char *outleafpvs, int *outnumleafspointer, int *outsurfacelist, unsigned char *outsurfacepvs, int *outnumsurfacespointer, unsigned char *outshadowtrispvs, unsigned char *outlighttrispvs);
// compile a shadow volume for the model based on light source
// a lot of model formats use the Q1BSP code, so here are the prototypes...
struct entity_render_s;
+void R_Q1BSP_DrawAddWaterPlanes(struct entity_render_s *ent);
void R_Q1BSP_DrawSky(struct entity_render_s *ent);
void R_Q1BSP_Draw(struct entity_render_s *ent);
void R_Q1BSP_DrawDepth(struct entity_render_s *ent);
+void R_Q1BSP_DrawDebug(struct entity_render_s *ent);
void R_Q1BSP_GetLightInfo(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, vec3_t outmins, vec3_t outmaxs, int *outleaflist, unsigned char *outleafpvs, int *outnumleafspointer, int *outsurfacelist, unsigned char *outsurfacepvs, int *outnumsurfacespointer, unsigned char *outshadowtrispvs, unsigned char *outlighttrispvs);
void R_Q1BSP_CompileShadowVolume(struct entity_render_s *ent, vec3_t relativelightorigin, vec3_t relativelightdirection, float lightradius, int numsurfaces, const int *surfacelist);
void R_Q1BSP_DrawShadowVolume(struct entity_render_s *ent, vec3_t relativelightorigin, vec3_t relativelightdirection, float lightradius, int numsurfaces, const int *surfacelist, const vec3_t lightmins, const vec3_t lightmaxs);