TRANSPARENTSORT_HUD,
}dptransparentsortcategory_t;
-typedef struct q3shaderinfo_s
+typedef struct shader_s
{
char name[Q3PATHLENGTH];
#define Q3SHADERINFO_COMPARE_START surfaceparms
float rtlightambient;
#define Q3SHADERINFO_COMPARE_END rtlightambient
}
-q3shaderinfo_t;
+shader_t;
typedef struct texture_shaderpass_s
{
typedef struct texture_s
{
- // q1bsp
// name
- //char name[16];
+ char name[64];
+
+ // q1bsp
// size
unsigned int width, height;
// SURF_ flags
// MATERIALFLAG_MODELLIGHT uses these parameters
float render_modellight_ambient[3];
float render_modellight_diffuse[3];
- float render_modellight_lightdir[3];
+ float render_modellight_lightdir_world[3];
+ float render_modellight_lightdir_local[3];
float render_modellight_specular[3];
// lightmap rendering (not MATERIALFLAG_MODELLIGHT)
float render_lightmap_ambient[3];
int customblendfunc[2];
// q3bsp
- char name[64];
int surfaceflags;
int supercontents;
struct q3deffect_s *effect; // q3bsp
// mesh information for collisions (only used by q3bsp curves)
int num_firstcollisiontriangle;
- int *deprecatedq3data_collisionelement3i; // q3bsp
- float *deprecatedq3data_collisionvertex3f; // q3bsp
- float *deprecatedq3data_collisionbbox6f; // collision optimization - contains combined bboxes of every data_collisionstride triangles
- float *deprecatedq3data_bbox6f; // collision optimization - contains combined bboxes of every data_collisionstride triangles
// surfaces own ranges of vertices and triangles in the model->surfmesh
int num_triangles; // number of triangles
// mesh information for collisions (only used by q3bsp curves)
int num_collisiontriangles; // q3bsp
int num_collisionvertices; // q3bsp
- int deprecatedq3num_collisionbboxstride;
- int deprecatedq3num_bboxstride;
- // FIXME: collisionmarkframe should be kept in a separate array
- int deprecatedq3collisionmarkframe; // q3bsp // don't collide twice in one trace
// used by Mod_Mesh_Finalize when building sortedmodelsurfaces
qboolean included;
}
model_brushq1_t;
-typedef struct model_brushq2_s
-{
- int dummy; // MSVC can't handle an empty struct
-}
-model_brushq2_t;
-
typedef struct model_brushq3_s
{
int num_models;
rtexture_t **data_lightmaps;
rtexture_t **data_deluxemaps;
- // voxel light data with directional shading
+ // voxel light data with directional shading - data for cpu sampling of it...
int num_lightgrid;
q3dlightgrid_t *data_lightgrid;
// size of each cell (may vary by map, typically 64 64 128)
int num_lightgrid_isize[3];
// transform modelspace coordinates to lightgrid index
matrix4x4_t num_lightgrid_indexfromworld;
+ // parameters for fragment shader to sample the texture version of it:
+ int lightgridtexturesize[3]; // 3 layers tall (ambient, lightcolor, lightdir)
+ matrix4x4_t lightgridworldtotexturematrix;
+ rtexture_t *lightgridtexture;
// true if this q3bsp file has been detected as using deluxemapping
// (lightmap texture pairs, every odd one is never directly refernced,
model_sprite_t sprite;
model_brush_t brush;
model_brushq1_t brushq1;
- model_brushq2_t brushq2;
model_brushq3_t brushq3;
// flags this model for offseting sounds to the model center (used by brush models)
int soundfromcenter;
// if set, the model contains light information (lightmap, or vertexlight)
qboolean lit;
float lightmapscale;
+
+ qboolean nolerp;
}
dp_model_t;
extern cvar_t mod_q3shader_default_refractive_index;
extern cvar_t mod_q3shader_force_addalpha;
extern cvar_t mod_q3shader_force_terrain_alphaflag;
+extern cvar_t mod_q3bsp_lightgrid_texture;
+extern cvar_t mod_q3bsp_lightgrid_world_surfaces;
+extern cvar_t mod_q3bsp_lightgrid_bsp_surfaces;
void Mod_Init (void);
void Mod_Reload (void);
void Mod_FreeQ3Shaders(void);
void Mod_LoadQ3Shaders(void);
-q3shaderinfo_t *Mod_LookupQ3Shader(const char *name);
+shader_t *Mod_LookupQ3Shader(const char *name);
qboolean Mod_LoadTextureFromQ3Shader(mempool_t *mempool, const char *modelname, texture_t *texture, const char *name, qboolean warnmissing, qboolean fallback, int defaulttexflags, int defaultmaterialflags);
texture_shaderpass_t *Mod_CreateShaderPass(mempool_t *mempool, skinframe_t *skinframe);
texture_shaderpass_t *Mod_CreateShaderPassFromQ3ShaderLayer(mempool_t *mempool, const char *modelname, q3shaderinfo_layer_t *layer, int layerindex, int texflags, const char *texturename);