X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=render.h;h=661f7828cd1409be058f73dd49fe9e82ee6289fe;hp=d93176407810ab60c9df6e10afff7cab48d79e52;hb=3fabadf7d463a554e908a698c692e24ea927cb9a;hpb=0f3e880c9e2d7f490bfb4e8a1c318bd7428a695b diff --git a/render.h b/render.h index d9317640..661f7828 100644 --- a/render.h +++ b/render.h @@ -30,8 +30,6 @@ extern unsigned char r_worldleafvisible[32768]; // TODO: dynamic resize according to r_refdef.worldmodel->num_surfaces extern unsigned char r_worldsurfacevisible[262144]; -extern matrix4x4_t r_identitymatrix; - // 1.0f / N table extern float ixtable[4096]; @@ -60,6 +58,7 @@ extern void SHOWLMP_clear(void); // render profiling stuff extern char r_speeds_string[1024]; +extern int r_timereport_active; // lighting stuff extern cvar_t r_ambient; @@ -144,9 +143,10 @@ extern qboolean r_rtworldshadows; extern qboolean r_rtdlight; extern qboolean r_rtdlightshadows; +extern cvar_t r_nearclip; + // forces all rendering to draw triangle outlines extern cvar_t r_showtris; -extern cvar_t r_showtris_polygonoffset; extern cvar_t r_shownormals; extern cvar_t r_showlighting; extern cvar_t r_showshadowvolumes; @@ -154,7 +154,6 @@ extern cvar_t r_showcollisionbrushes; extern cvar_t r_showcollisionbrushes_polygonfactor; extern cvar_t r_showcollisionbrushes_polygonoffset; extern cvar_t r_showdisabledepthtest; -extern int r_showtrispass; // // view origin @@ -171,6 +170,10 @@ extern int r_view_width; extern int r_view_height; extern int r_view_depth; extern matrix4x4_t r_view_matrix; +extern float r_polygonfactor; +extern float r_polygonoffset; +extern float r_shadowpolygonfactor; +extern float r_shadowpolygonoffset; extern mleaf_t *r_viewleaf, *r_oldviewleaf; @@ -220,6 +223,14 @@ extern cvar_t r_render; extern cvar_t r_waterwarp; extern cvar_t r_textureunits; +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; extern cvar_t gl_dither; @@ -239,8 +250,6 @@ extern rtexture_t *r_texture_fogattenuation; extern rtexture_t *r_texture_fogintensity; void R_TimeReport(char *name); -void R_TimeReport_Start(void); -void R_TimeReport_End(void); // r_stain void R_Stain(const vec3_t origin, float radius, int cr1, int cg1, int cb1, int ca1, int cr2, int cg2, int cb2, int ca2); @@ -251,6 +260,33 @@ void R_Draw2DCrosshair(void); void R_CalcBeam_Vertex3f(float *vert, const vec3_t org1, const vec3_t org2, float width); void R_DrawSprite(int blendfunc1, int blendfunc2, rtexture_t *texture, rtexture_t *fogtexture, int depthdisable, const vec3_t origin, const vec3_t left, const vec3_t up, float scalex1, float scalex2, float scaley1, float scaley2, float cr, float cg, float cb, float ca); +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_color4f; +extern float *rsurface_array_texcoord3f; + +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 const entity_render_t *rsurface_entity; +extern const model_t *rsurface_model; +extern const texture_t *rsurface_texture; + +void R_Mesh_ResizeArrays(int newvertices); + struct entity_render_s; struct texture_s; struct msurface_s; @@ -259,5 +295,67 @@ 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_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); + +#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) +#define SHADERPERMUTATION_MODE_LIGHTDIRECTIONMAP_TANGENTSPACE (1<<2) // (lightmap) use directional pixel shading from texture containing tangentspace light directions (deluxemap) +#define SHADERPERMUTATION_MODE_LIGHTDIRECTION (1<<3) // (lightmap) use directional pixel shading from fixed light direction (q3bsp) +#define SHADERPERMUTATION_GLOW (1<<4) // (lightmap) blend in an additive glow texture +#define SHADERPERMUTATION_FOG (1<<5) // tint the color by fog color or black if using additive blend mode +#define SHADERPERMUTATION_COLORMAPPING (1<<6) // indicates this is a colormapped skin +#define SHADERPERMUTATION_SPECULAR (1<<7) // (lightsource or deluxemapping) render specular effects +#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 + +typedef struct r_glsl_permutation_s +{ + // indicates if we have tried compiling this permutation already + qboolean compiled; + // 0 if compilation failed + int program; + int loc_Texture_Normal; + int loc_Texture_Color; + int loc_Texture_Gloss; + int loc_Texture_Cube; + int loc_Texture_FogMask; + int loc_Texture_Pants; + int loc_Texture_Shirt; + int loc_Texture_Lightmap; + int loc_Texture_Deluxemap; + int loc_Texture_Glow; + int loc_FogColor; + int loc_LightPosition; + int loc_EyePosition; + int loc_LightColor; + int loc_Color_Pants; + int loc_Color_Shirt; + int loc_FogRangeRecip; + int loc_AmbientScale; + int loc_DiffuseScale; + int loc_SpecularScale; + int loc_SpecularPower; + int loc_OffsetMapping_Scale; + int loc_AmbientColor; + int loc_DiffuseColor; + int loc_SpecularColor; + int loc_LightDir; +} +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; + +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); + #endif