X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=render.h;h=40d40ae71e72bb987d86a65233dc7260a8d87d06;hb=01ba19424cec267526ca273d809516ff36fe23cb;hp=661f7828cd1409be058f73dd49fe9e82ee6289fe;hpb=3fabadf7d463a554e908a698c692e24ea927cb9a;p=xonotic%2Fdarkplaces.git diff --git a/render.h b/render.h index 661f7828..40d40ae7 100644 --- a/render.h +++ b/render.h @@ -29,6 +29,8 @@ extern unsigned char r_pvsbits[(32768+7)>>3]; extern unsigned char r_worldleafvisible[32768]; // TODO: dynamic resize according to r_refdef.worldmodel->num_surfaces extern unsigned char r_worldsurfacevisible[262144]; +// if true, the view is currently in a leaf without pvs data +extern qboolean r_worldnovis; // 1.0f / N table extern float ixtable[4096]; @@ -227,8 +229,6 @@ extern cvar_t r_glsl; extern cvar_t r_glsl_offsetmapping; extern cvar_t r_glsl_offsetmapping_reliefmapping; extern cvar_t r_glsl_offsetmapping_scale; -extern cvar_t r_glsl_usehalffloat; -extern cvar_t r_glsl_surfacenormalize; extern cvar_t r_glsl_deluxemapping; extern cvar_t gl_polyblend; @@ -247,7 +247,7 @@ extern rtexture_t *r_texture_notexture; extern rtexture_t *r_texture_whitecube; extern rtexture_t *r_texture_normalizationcube; extern rtexture_t *r_texture_fogattenuation; -extern rtexture_t *r_texture_fogintensity; +//extern rtexture_t *r_texture_fogintensity; void R_TimeReport(char *name); @@ -263,27 +263,42 @@ void R_DrawSprite(int blendfunc1, int blendfunc2, rtexture_t *texture, rtexture_ extern mempool_t *r_main_mempool; extern int rsurface_array_size; -extern float *rsurface_array_vertex3f; -extern float *rsurface_array_svector3f; -extern float *rsurface_array_tvector3f; -extern float *rsurface_array_normal3f; +extern float *rsurface_array_modelvertex3f; +extern float *rsurface_array_modelsvector3f; +extern float *rsurface_array_modeltvector3f; +extern float *rsurface_array_modelnormal3f; +extern float *rsurface_array_deformedvertex3f; +extern float *rsurface_array_deformedsvector3f; +extern float *rsurface_array_deformedtvector3f; +extern float *rsurface_array_deformednormal3f; extern float *rsurface_array_color4f; extern float *rsurface_array_texcoord3f; +typedef enum rsurfmode_e +{ + RSURFMODE_NONE, + RSURFMODE_SHOWSURFACES, + RSURFMODE_SKY, + RSURFMODE_MULTIPASS, + RSURFMODE_GLSL +} +rsurfmode_t; + extern float *rsurface_vertex3f; extern float *rsurface_svector3f; extern float *rsurface_tvector3f; extern float *rsurface_normal3f; extern float *rsurface_lightmapcolor4f; -extern qboolean rsurface_generatevertex; -extern qboolean rsurface_generatetangents; -extern qboolean rsurface_generatenormals; -extern qboolean rsurface_deformvertex; -extern qboolean rsurface_dynamicvertex; extern vec3_t rsurface_modelorg; +extern qboolean rsurface_generatedvertex; extern const entity_render_t *rsurface_entity; extern const model_t *rsurface_model; -extern const texture_t *rsurface_texture; +extern texture_t *rsurface_texture; +extern rtexture_t *rsurface_lightmaptexture; +extern rsurfmode_t rsurface_mode; + +void RSurf_ActiveEntity(const entity_render_t *ent); +void RSurf_CleanUp(void); void R_Mesh_ResizeArrays(int newvertices); @@ -292,12 +307,11 @@ struct texture_s; struct msurface_s; void R_UpdateTextureInfo(const entity_render_t *ent, texture_t *t); void R_UpdateAllTextureInfo(entity_render_t *ent); -void R_QueueTextureSurfaceList(entity_render_t *ent, struct texture_s *texture, int texturenumsurfaces, const struct msurface_s **texturesurfacelist, const vec3_t modelorg); +void R_QueueTextureSurfaceList(int texturenumsurfaces, msurface_t **texturesurfacelist); void R_DrawSurfaces(entity_render_t *ent, qboolean skysurfaces); -void RSurf_PrepareForBatch(const entity_render_t *ent, const texture_t *texture, const vec3_t modelorg); -void RSurf_SetPointersForPass(qboolean generatenormals, qboolean generatetangents); -void RSurf_PrepareDynamicSurfaceVertices(const msurface_t *surface); +void RSurf_PrepareVerticesForBatch(qboolean generatenormals, qboolean generatetangents, int texturenumsurfaces, msurface_t **texturesurfacelist); +void RSurf_DrawBatch_Simple(int texturenumsurfaces, msurface_t **texturesurfacelist); #define SHADERPERMUTATION_MODE_LIGHTSOURCE (1<<0) // (lightsource) use directional pixel shading from light source (rtlight) #define SHADERPERMUTATION_MODE_LIGHTDIRECTIONMAP_MODELSPACE (1<<1) // (lightmap) use directional pixel shading from texture containing modelspace light directions (deluxemap) @@ -310,9 +324,7 @@ void RSurf_PrepareDynamicSurfaceVertices(const msurface_t *surface); #define SHADERPERMUTATION_CUBEFILTER (1<<8) // (lightsource) use cubemap light filter #define SHADERPERMUTATION_OFFSETMAPPING (1<<9) // adjust texcoords to roughly simulate a displacement mapped surface #define SHADERPERMUTATION_OFFSETMAPPING_RELIEFMAPPING (1<<10) // adjust texcoords to accurately simulate a displacement mapped surface (requires OFFSETMAPPING to also be set!) -#define SHADERPERMUTATION_SURFACENORMALIZE (1<<11) // (lightsource or deluxemapping) improved bumpmapping -#define SHADERPERMUTATION_GEFORCEFX (1<<12) // use half vector types if available (NVIDIA specific) -#define SHADERPERMUTATION_COUNT (1<<13) // how many permutations are possible +#define SHADERPERMUTATION_COUNT (1<<11) // how many permutations are possible typedef struct r_glsl_permutation_s { @@ -352,10 +364,11 @@ r_glsl_permutation_t; // information about each possible shader permutation extern r_glsl_permutation_t r_glsl_permutations[SHADERPERMUTATION_COUNT]; // currently selected permutation -r_glsl_permutation_t *r_glsl_permutation; +extern r_glsl_permutation_t *r_glsl_permutation; void R_GLSL_CompilePermutation(int permutation); -void R_SetupSurfaceShader(const entity_render_t *ent, const texture_t *texture, const vec3_t modelorg, const vec3_t lightcolorbase, qboolean modellighting); +int R_SetupSurfaceShader(const vec3_t lightcolorbase, qboolean modellighting); +void R_SwitchSurfaceShader(int permutation); #endif