FTEQW
Documentation of the FTE engine source tree.
gl_shader.c File Reference

Typedefs

typedef struct shaderparsestate_s parsestate_t
 
typedef struct shaderkey_s shaderkey_t
 
typedef struct shadercachefile_s shadercachefile_t
 
typedef struct shadercache_s shadercache_t
 
typedef struct sgeneric_s sgeneric_t
 

Functions

qbyte FloatToByte (float x)
 
char * COM_ParseExt (const char **data_p, qboolean nl, qboolean comma)
 
qboolean Material_RegisterLoader (void *module, plugmaterialloaderfuncs_t *driver)
 
qboolean Shader_ParseSkySides (char *shadername, char *texturename, texid_t *images)
 
texid_t R_LoadColourmapImage (void)
 
void VARGS Q_strlcatfz (char *dest, size_t *offset, size_t size, const char *fmt,...) LIKEPRINTF(4)
 
struct programpermu_sShader_LoadPermutation (program_t *prog, unsigned int p)
 
qboolean Shader_PermutationEnabled (unsigned int bit)
 
qboolean Com_PermuOrFloatArgument (const char *shadername, char *arg, size_t arglen, float def)
 
void Shader_UnloadProg (program_t *prog)
 
program_tShader_FindGeneric (char *name, int qrtype)
 
void Shader_WriteOutGenerics_f (void)
 
shaderpass_tShaderpass_DefineMap (parsestate_t *ps, shaderpass_t *pass)
 
void Shader_FreePass (shaderpass_t *pass)
 
void Shader_ReleaseGeneric (program_t *prog)
 
void Shader_Free (shader_t *shader)
 
int QDECL Shader_InitCallback (const char *name, qofs_t size, time_t mtime, void *param, searchpathfuncs_t *spath)
 
int QDECL Shader_InitCallback_Doom3 (const char *name, qofs_t size, time_t mtime, void *param, searchpathfuncs_t *spath)
 
qboolean Shader_Init (void)
 
void Shader_FlushCache (void)
 
void Shader_Shutdown (void)
 
void QDECL R_BuildDefaultTexnums (texnums_t *src, shader_t *shader, unsigned int imageflags)
 
void QDECL R_BuildLegacyTexnums (shader_t *shader, const char *fallbackname, const char *subpath, unsigned int loadflags, unsigned int imageflags, uploadfmt_t basefmt, size_t width, size_t height, qbyte *srcdata, qbyte *palette)
 
shader_tMod_RegisterBasicShader (struct model_s *mod, const char *texname, unsigned int usageflags, const char *shadertext, uploadfmt_t pixelfmt, unsigned int width, unsigned int height, void *pixeldata, void *palettedata)
 
void Shader_DefaultScript (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultBSPLM (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultCinematic (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultSkybox (parsestate_t *ps, const char *shortname, const void *args)
 
char * Shader_DefaultBSPWater (parsestate_t *ps, const char *shortname, char *buffer, size_t buffersize)
 
void Shader_DefaultWaterShader (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultBSPQ2 (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultBSPQ1 (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultBSPVertex (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultBSPFlare (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultSkin (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_DefaultSkinShell (parsestate_t *ps, const char *shortname, const void *args)
 
void Shader_Default2D (parsestate_t *ps, const char *shortname, const void *genargs)
 
void Shader_PolygonShader (struct shaderparsestate_s *ps, const char *shortname, const void *args)
 
void R_UnloadShader (shader_t *shader)
 
char * Shader_Decompose (shader_t *s)
 
char * Shader_GetShaderBody (shader_t *s, char *fname, size_t fnamesize)
 
void Shader_ShowShader_f (void)
 
void Shader_TouchTexnums (texnums_t *t)
 
void Shader_TouchTextures (void)
 
void Shader_DoReload (void)
 
void Shader_NeedReload (qboolean rescanfs)
 
cin_t *QDECL R_ShaderGetCinematic (shader_t *s)
 
shader_tR_ShaderFind (const char *name)
 
cin_tR_ShaderFindCinematic (const char *name)
 
void Shader_ResetRemaps (void)
 
void R_RemapShader (const char *sourcename, const char *destname, float timeoffset)
 
void Shader_RemapShader_f (void)
 
int R_GetShaderSizes (shader_t *shader, int *width, int *height, qboolean blocktillloaded)
 
shader_tR_RegisterPic (const char *name, const char *subdirs)
 
shader_t *QDECL R_RegisterShader (const char *name, unsigned int usageflags, const char *shaderscript)
 
shader_tR_RegisterShader_Lightmap (model_t *mod, const char *name)
 
shader_tR_RegisterShader_Vertex (model_t *mod, const char *name)
 
shader_tR_RegisterShader_Flare (model_t *mod, const char *name)
 
shader_t *QDECL R_RegisterSkin (model_t *mod, const char *shadername)
 
shader_tR_RegisterCustom (model_t *mod, const char *name, unsigned int usageflags, shader_gen_t *defaultgen, const void *args)
 

Variables

texid_t missing_texture
 
texid_t r_whiteimage
 
texid_t r_blackimage
 
qboolean shader_reload_needed
 
sh_config_t sh_config
 
cvar_t r_vertexlight = CVARFD("r_vertexlight", "0", CVAR_SHADERSYSTEM, "Hack loaded shaders to remove detail pass and lightmap sampling for faster rendering.")
 
cvar_t r_forceprogramify = CVARAFD("r_forceprogramify", "0", "dpcompat_makeshitup", CVAR_SHADERSYSTEM, "Reduce the shader to a single texture, and then make stuff up about its mother. The resulting fist fight results in more colour when you shine a light upon its face.\nSet to 2 to ignore 'depthfunc equal' and 'tcmod scale' in order to tolerate bizzare shaders made for a bizzare engine.\nBecause most shaders made for DP are by people who _clearly_ have no idea what the heck they're doing, you'll typically need the '2' setting.")
 
cvar_t dpcompat_nopremulpics = CVARFD("dpcompat_nopremulpics", "0", CVAR_SHADERSYSTEM, "By default FTE uses premultiplied alpha for hud/2d images, while DP does not (which results in halos with low-res content). Unfortunately DDS files would need to be recompressed, resulting in visible issues.")
 
cvar_t r_glsl_precache = CVARFD("r_glsl_precache", "0", CVAR_SHADERSYSTEM, "Force all relevant glsl permutations to load upfront.")
 
cvar_t r_halfrate = CVARFD("r_halfrate", "0", CVAR_SHADERSYSTEM, "Use half-rate shading (where supported by gpu).")
 
cvar_t r_glsl_offsetmapping_reliefmapping
 
cvar_t r_drawflat
 
cvar_t r_shaderblobs
 
cvar_t r_tessellation
 
cvar_t gl_compress
 
int be_maxpasses
 
cvar_t r_detailtextures
 
unsigned int r_numshaders
 
unsigned int r_maxshaders
 
shader_t ** r_shaders
 
voidshader_active_hash_mem
 
const struct sh_defaultsamplers_s sh_defaultsamplers []
 
struct shader_field_names_s shader_attr_names []
 
struct shader_field_names_s shader_unif_names []
 

Typedef Documentation

◆ parsestate_t

typedef struct shaderparsestate_s parsestate_t

◆ sgeneric_t

typedef struct sgeneric_s sgeneric_t

◆ shadercache_t

typedef struct shadercache_s shadercache_t

◆ shadercachefile_t

typedef struct shadercachefile_s shadercachefile_t

◆ shaderkey_t

typedef struct shaderkey_s shaderkey_t

Function Documentation

◆ COM_ParseExt()

char * COM_ParseExt ( const char **  data_p,
qboolean  nl,
qboolean  comma 
)

◆ Com_PermuOrFloatArgument()

qboolean Com_PermuOrFloatArgument ( const char *  shadername,
char *  arg,
size_t  arglen,
float  def 
)

◆ FloatToByte()

qbyte FloatToByte ( float  x)

◆ Material_RegisterLoader()

qboolean Material_RegisterLoader ( void module,
plugmaterialloaderfuncs_t driver 
)

◆ Mod_RegisterBasicShader()

shader_t * Mod_RegisterBasicShader ( struct model_s mod,
const char *  texname,
unsigned int  usageflags,
const char *  shadertext,
uploadfmt_t  pixelfmt,
unsigned int  width,
unsigned int  height,
void pixeldata,
void palettedata 
)

◆ Q_strlcatfz()

void VARGS Q_strlcatfz ( char *  dest,
size_t *  offset,
size_t  size,
const char *  fmt,
  ... 
)

◆ R_BuildDefaultTexnums()

void QDECL R_BuildDefaultTexnums ( texnums_t src,
shader_t shader,
unsigned int  imageflags 
)

◆ R_BuildLegacyTexnums()

void QDECL R_BuildLegacyTexnums ( shader_t shader,
const char *  fallbackname,
const char *  subpath,
unsigned int  loadflags,
unsigned int  imageflags,
uploadfmt_t  basefmt,
size_t  width,
size_t  height,
qbyte srcdata,
qbyte palette 
)

◆ R_GetShaderSizes()

int R_GetShaderSizes ( shader_t shader,
int width,
int height,
qboolean  blocktillloaded 
)

◆ R_LoadColourmapImage()

texid_t R_LoadColourmapImage ( void  )

◆ R_RegisterCustom()

shader_t * R_RegisterCustom ( model_t mod,
const char *  name,
unsigned int  usageflags,
shader_gen_t defaultgen,
const void args 
)

◆ R_RegisterPic()

shader_t * R_RegisterPic ( const char *  name,
const char *  subdirs 
)

◆ R_RegisterShader()

shader_t *QDECL R_RegisterShader ( const char *  name,
unsigned int  usageflags,
const char *  shaderscript 
)

◆ R_RegisterShader_Flare()

shader_t * R_RegisterShader_Flare ( model_t mod,
const char *  name 
)

◆ R_RegisterShader_Lightmap()

shader_t * R_RegisterShader_Lightmap ( model_t mod,
const char *  name 
)

◆ R_RegisterShader_Vertex()

shader_t * R_RegisterShader_Vertex ( model_t mod,
const char *  name 
)

◆ R_RegisterSkin()

shader_t *QDECL R_RegisterSkin ( model_t mod,
const char *  shadername 
)

◆ R_RemapShader()

void R_RemapShader ( const char *  sourcename,
const char *  destname,
float  timeoffset 
)

◆ R_ShaderFind()

shader_t * R_ShaderFind ( const char *  name)

◆ R_ShaderFindCinematic()

cin_t * R_ShaderFindCinematic ( const char *  name)

◆ R_ShaderGetCinematic()

cin_t *QDECL R_ShaderGetCinematic ( shader_t s)

◆ R_UnloadShader()

void R_UnloadShader ( shader_t shader)

◆ Shader_Decompose()

char * Shader_Decompose ( shader_t s)

◆ Shader_Default2D()

void Shader_Default2D ( parsestate_t ps,
const char *  shortname,
const void genargs 
)

◆ Shader_DefaultBSPFlare()

void Shader_DefaultBSPFlare ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultBSPLM()

void Shader_DefaultBSPLM ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultBSPQ1()

void Shader_DefaultBSPQ1 ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultBSPQ2()

void Shader_DefaultBSPQ2 ( parsestate_t ps,
const char *  shortname,
const void args 
)

strncmp(shortname, "warp/", 5) || !strncmp(shortname, "warp33/", 7) || !strncmp(shortname, "warp66/", 7))

◆ Shader_DefaultBSPVertex()

void Shader_DefaultBSPVertex ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultBSPWater()

char * Shader_DefaultBSPWater ( parsestate_t ps,
const char *  shortname,
char *  buffer,
size_t  buffersize 
)

◆ Shader_DefaultCinematic()

void Shader_DefaultCinematic ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultScript()

void Shader_DefaultScript ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultSkin()

void Shader_DefaultSkin ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultSkinShell()

void Shader_DefaultSkinShell ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultSkybox()

void Shader_DefaultSkybox ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DefaultWaterShader()

void Shader_DefaultWaterShader ( parsestate_t ps,
const char *  shortname,
const void args 
)

◆ Shader_DoReload()

void Shader_DoReload ( void  )

◆ Shader_FindGeneric()

program_t * Shader_FindGeneric ( char *  name,
int  qrtype 
)

◆ Shader_FlushCache()

void Shader_FlushCache ( void  )

◆ Shader_Free()

void Shader_Free ( shader_t shader)

◆ Shader_FreePass()

void Shader_FreePass ( shaderpass_t pass)

◆ Shader_GetShaderBody()

char * Shader_GetShaderBody ( shader_t s,
char *  fname,
size_t  fnamesize 
)

◆ Shader_Init()

qboolean Shader_Init ( void  )

◆ Shader_InitCallback()

int QDECL Shader_InitCallback ( const char *  name,
qofs_t  size,
time_t  mtime,
void param,
searchpathfuncs_t spath 
)

◆ Shader_InitCallback_Doom3()

int QDECL Shader_InitCallback_Doom3 ( const char *  name,
qofs_t  size,
time_t  mtime,
void param,
searchpathfuncs_t spath 
)

◆ Shader_LoadPermutation()

struct programpermu_s * Shader_LoadPermutation ( program_t prog,
unsigned int  p 
)

◆ Shader_NeedReload()

void Shader_NeedReload ( qboolean  rescanfs)

◆ Shader_ParseSkySides()

qboolean Shader_ParseSkySides ( char *  shadername,
char *  texturename,
texid_t images 
)

◆ Shader_PermutationEnabled()

qboolean Shader_PermutationEnabled ( unsigned int  bit)

◆ Shader_PolygonShader()

void Shader_PolygonShader ( struct shaderparsestate_s *  ps,
const char *  shortname,
const void args 
)

◆ Shader_ReleaseGeneric()

void Shader_ReleaseGeneric ( program_t prog)

◆ Shader_RemapShader_f()

void Shader_RemapShader_f ( void  )

◆ Shader_ResetRemaps()

void Shader_ResetRemaps ( void  )

◆ Shader_ShowShader_f()

void Shader_ShowShader_f ( void  )

◆ Shader_Shutdown()

void Shader_Shutdown ( void  )

◆ Shader_TouchTexnums()

void Shader_TouchTexnums ( texnums_t t)

◆ Shader_TouchTextures()

void Shader_TouchTextures ( void  )

◆ Shader_UnloadProg()

void Shader_UnloadProg ( program_t prog)

◆ Shader_WriteOutGenerics_f()

void Shader_WriteOutGenerics_f ( void  )

◆ Shaderpass_DefineMap()

shaderpass_t * Shaderpass_DefineMap ( parsestate_t ps,
shaderpass_t pass 
)

Variable Documentation

◆ be_maxpasses

int be_maxpasses

◆ bitmask

unsigned int bitmask

◆ body

char* body

◆ dpcompat_nopremulpics

cvar_t dpcompat_nopremulpics = CVARFD("dpcompat_nopremulpics", "0", CVAR_SHADERSYSTEM, "By default FTE uses premultiplied alpha for hud/2d images, while DP does not (which results in halos with low-res content). Unfortunately DDS files would need to be recompressed, resulting in visible issues.")

◆ funcs

◆ gl_compress

cvar_t gl_compress
extern

◆ missing_texture

texid_t missing_texture
extern

◆ module

void* module

◆ name

char* name

◆ r_blackimage

texid_t r_blackimage

◆ r_detailtextures

cvar_t r_detailtextures

◆ r_drawflat

cvar_t r_drawflat
extern

◆ r_forceprogramify

cvar_t r_forceprogramify = CVARAFD("r_forceprogramify", "0", "dpcompat_makeshitup", CVAR_SHADERSYSTEM, "Reduce the shader to a single texture, and then make stuff up about its mother. The resulting fist fight results in more colour when you shine a light upon its face.\nSet to 2 to ignore 'depthfunc equal' and 'tcmod scale' in order to tolerate bizzare shaders made for a bizzare engine.\nBecause most shaders made for DP are by people who _clearly_ have no idea what the heck they're doing, you'll typically need the '2' setting.")

◆ r_glsl_offsetmapping_reliefmapping

cvar_t r_glsl_offsetmapping_reliefmapping
extern

◆ r_glsl_precache

cvar_t r_glsl_precache = CVARFD("r_glsl_precache", "0", CVAR_SHADERSYSTEM, "Force all relevant glsl permutations to load upfront.")

◆ r_halfrate

cvar_t r_halfrate = CVARFD("r_halfrate", "0", CVAR_SHADERSYSTEM, "Use half-rate shading (where supported by gpu).")

◆ r_maxshaders

unsigned int r_maxshaders

◆ r_numshaders

unsigned int r_numshaders

◆ r_shaderblobs

cvar_t r_shaderblobs
extern

◆ r_shaders

shader_t** r_shaders

◆ r_tessellation

cvar_t r_tessellation
extern

◆ r_vertexlight

cvar_t r_vertexlight = CVARFD("r_vertexlight", "0", CVAR_SHADERSYSTEM, "Hack loaded shaders to remove detail pass and lightmap sampling for faster rendering.")

◆ r_whiteimage

texid_t r_whiteimage

◆ sh_config

sh_config_t sh_config

◆ sh_defaultsamplers

const struct sh_defaultsamplers_s sh_defaultsamplers[]

◆ shader_active_hash_mem

void* shader_active_hash_mem

◆ shader_attr_names

struct shader_field_names_s shader_attr_names[]
Initial value:
=
{
{"v_position1", VATTR_VERTEX1},
{"v_position2", VATTR_VERTEX2},
{"v_colour", VATTR_COLOUR},
{"v_texcoord", VATTR_TEXCOORD},
{"v_lmcoord", VATTR_LMCOORD},
{"v_normal", VATTR_NORMALS},
{"v_svector", VATTR_SNORMALS},
{"v_tvector", VATTR_TNORMALS},
{"v_bone", VATTR_BONENUMS},
{"v_weight", VATTR_BONEWEIGHTS},
#if MAXRLIGHTMAPS > 1
{"v_lmcoord1", VATTR_LMCOORD},
{"v_lmcoord2", VATTR_LMCOORD2},
{"v_lmcoord3", VATTR_LMCOORD3},
{"v_lmcoord4", VATTR_LMCOORD4},
{"v_colour1", VATTR_COLOUR},
{"v_colour2", VATTR_COLOUR2},
{"v_colour3", VATTR_COLOUR3},
{"v_colour4", VATTR_COLOUR4},
#endif
{NULL}
}
@ VATTR_LMCOORD2
Definition: shader.h:399
@ VATTR_COLOUR2
Definition: shader.h:402
@ VATTR_LMCOORD3
Definition: shader.h:400
@ VATTR_TEXCOORD
Definition: shader.h:391
@ VATTR_BONENUMS
Definition: shader.h:396
@ VATTR_LMCOORD
Definition: shader.h:392
@ VATTR_LMCOORD4
Definition: shader.h:401
@ VATTR_NORMALS
Definition: shader.h:393
@ VATTR_VERTEX1
Definition: shader.h:388
@ VATTR_COLOUR
Definition: shader.h:390
@ VATTR_TNORMALS
Definition: shader.h:395
@ VATTR_BONEWEIGHTS
Definition: shader.h:397
@ VATTR_COLOUR4
Definition: shader.h:404
@ VATTR_VERTEX2
Definition: shader.h:389
@ VATTR_SNORMALS
Definition: shader.h:394
@ VATTR_COLOUR3
Definition: shader.h:403

◆ shader_reload_needed

qboolean shader_reload_needed

◆ shader_unif_names

struct shader_field_names_s shader_unif_names[]