Make all GLSL shaders use the same set of uniforms.

This commit is contained in:
SmileTheory 2013-03-20 22:53:30 -07:00
parent 9bfff1363e
commit 8b23985358
7 changed files with 399 additions and 592 deletions

View file

@ -718,6 +718,81 @@ enum
GLSL_MAT16
};
enum
{
UNIFORM_DIFFUSEMAP = 0,
UNIFORM_LIGHTMAP,
UNIFORM_NORMALMAP,
UNIFORM_DELUXEMAP,
UNIFORM_SPECULARMAP,
UNIFORM_TEXTUREMAP,
UNIFORM_LEVELSMAP,
UNIFORM_SCREENIMAGEMAP,
UNIFORM_SCREENDEPTHMAP,
UNIFORM_SHADOWMAP,
UNIFORM_SHADOWMAP2,
UNIFORM_SHADOWMAP3,
UNIFORM_SHADOWMVP,
UNIFORM_SHADOWMVP2,
UNIFORM_SHADOWMVP3,
UNIFORM_DIFFUSETEXMATRIX,
UNIFORM_DIFFUSETEXOFFTURB,
UNIFORM_TEXTURE1ENV,
UNIFORM_TCGEN0,
UNIFORM_TCGEN0VECTOR0,
UNIFORM_TCGEN0VECTOR1,
UNIFORM_DEFORMGEN,
UNIFORM_DEFORMPARAMS,
UNIFORM_COLORGEN,
UNIFORM_ALPHAGEN,
UNIFORM_COLOR,
UNIFORM_BASECOLOR,
UNIFORM_VERTCOLOR,
UNIFORM_DLIGHTINFO,
UNIFORM_LIGHTFORWARD,
UNIFORM_LIGHTUP,
UNIFORM_LIGHTRIGHT,
UNIFORM_LIGHTORIGIN,
UNIFORM_LIGHTRADIUS,
UNIFORM_AMBIENTLIGHT,
UNIFORM_DIRECTEDLIGHT,
UNIFORM_PORTALRANGE,
UNIFORM_FOGDISTANCE,
UNIFORM_FOGDEPTH,
UNIFORM_FOGEYET,
UNIFORM_FOGCOLORMASK,
UNIFORM_MODELMATRIX,
UNIFORM_MODELVIEWPROJECTIONMATRIX,
UNIFORM_TIME,
UNIFORM_VERTEXLERP,
UNIFORM_MATERIALINFO,
UNIFORM_VIEWINFO, // znear, zfar, width/2, height/2
UNIFORM_VIEWORIGIN,
UNIFORM_VIEWFORWARD,
UNIFORM_VIEWLEFT,
UNIFORM_VIEWUP,
UNIFORM_INVTEXRES,
UNIFORM_AUTOEXPOSUREMINMAX,
UNIFORM_TONEMINAVGMAXLINEAR,
UNIFORM_COUNT
} uniform_t;
// shaderProgram_t represents a pair of one
// GLSL vertex and one GLSL fragment shader
typedef struct shaderProgram_s
@ -730,146 +805,11 @@ typedef struct shaderProgram_s
uint32_t attribs; // vertex array attributes
// uniform parameters
int numUniforms;
GLint *uniforms;
char *uniformTypes; // max 127 uniform types
short *uniformBufferOffsets; // max 32767/64=511 uniforms
GLint uniforms[UNIFORM_COUNT];
short uniformBufferOffsets[UNIFORM_COUNT]; // max 32767/64=511 uniforms
char *uniformBuffer;
} shaderProgram_t;
enum
{
TEXTURECOLOR_UNIFORM_MODELVIEWPROJECTIONMATRIX = 0,
TEXTURECOLOR_UNIFORM_INVTEXRES,
TEXTURECOLOR_UNIFORM_AUTOEXPOSUREMINMAX,
TEXTURECOLOR_UNIFORM_TONEMINAVGMAXLINEAR,
TEXTURECOLOR_UNIFORM_TEXTUREMAP,
TEXTURECOLOR_UNIFORM_LEVELSMAP,
TEXTURECOLOR_UNIFORM_COLOR,
TEXTURECOLOR_UNIFORM_COUNT
};
enum
{
FOGPASS_UNIFORM_FOGDISTANCE = 0,
FOGPASS_UNIFORM_FOGDEPTH,
FOGPASS_UNIFORM_FOGEYET,
FOGPASS_UNIFORM_DEFORMGEN,
FOGPASS_UNIFORM_DEFORMPARAMS,
FOGPASS_UNIFORM_TIME,
FOGPASS_UNIFORM_COLOR,
FOGPASS_UNIFORM_MODELVIEWPROJECTIONMATRIX,
FOGPASS_UNIFORM_VERTEXLERP,
FOGPASS_UNIFORM_COUNT
};
enum
{
DLIGHT_UNIFORM_DIFFUSEMAP = 0,
DLIGHT_UNIFORM_DLIGHTINFO,
DLIGHT_UNIFORM_DEFORMGEN,
DLIGHT_UNIFORM_DEFORMPARAMS,
DLIGHT_UNIFORM_TIME,
DLIGHT_UNIFORM_COLOR,
DLIGHT_UNIFORM_MODELVIEWPROJECTIONMATRIX,
DLIGHT_UNIFORM_VERTEXLERP,
DLIGHT_UNIFORM_COUNT
};
enum
{
PSHADOW_UNIFORM_SHADOWMAP = 0,
PSHADOW_UNIFORM_MODELVIEWPROJECTIONMATRIX,
PSHADOW_UNIFORM_LIGHTFORWARD,
PSHADOW_UNIFORM_LIGHTUP,
PSHADOW_UNIFORM_LIGHTRIGHT,
PSHADOW_UNIFORM_LIGHTORIGIN,
PSHADOW_UNIFORM_LIGHTRADIUS,
PSHADOW_UNIFORM_COUNT
};
enum
{
GENERIC_UNIFORM_DIFFUSEMAP = 0,
GENERIC_UNIFORM_LIGHTMAP,
GENERIC_UNIFORM_NORMALMAP,
GENERIC_UNIFORM_DELUXEMAP,
GENERIC_UNIFORM_SPECULARMAP,
GENERIC_UNIFORM_SHADOWMAP,
GENERIC_UNIFORM_DIFFUSETEXMATRIX,
GENERIC_UNIFORM_DIFFUSETEXOFFTURB,
//GENERIC_UNIFORM_NORMALTEXMATRIX,
//GENERIC_UNIFORM_SPECULARTEXMATRIX,
GENERIC_UNIFORM_TEXTURE1ENV,
GENERIC_UNIFORM_VIEWORIGIN,
GENERIC_UNIFORM_TCGEN0,
GENERIC_UNIFORM_TCGEN0VECTOR0,
GENERIC_UNIFORM_TCGEN0VECTOR1,
GENERIC_UNIFORM_DEFORMGEN,
GENERIC_UNIFORM_DEFORMPARAMS,
GENERIC_UNIFORM_COLORGEN,
GENERIC_UNIFORM_ALPHAGEN,
GENERIC_UNIFORM_BASECOLOR,
GENERIC_UNIFORM_VERTCOLOR,
GENERIC_UNIFORM_AMBIENTLIGHT,
GENERIC_UNIFORM_DIRECTEDLIGHT,
GENERIC_UNIFORM_LIGHTORIGIN,
GENERIC_UNIFORM_LIGHTRADIUS,
GENERIC_UNIFORM_PORTALRANGE,
GENERIC_UNIFORM_FOGDISTANCE,
GENERIC_UNIFORM_FOGDEPTH,
GENERIC_UNIFORM_FOGEYET,
GENERIC_UNIFORM_FOGCOLORMASK,
GENERIC_UNIFORM_MODELMATRIX,
GENERIC_UNIFORM_MODELVIEWPROJECTIONMATRIX,
GENERIC_UNIFORM_TIME,
GENERIC_UNIFORM_VERTEXLERP,
GENERIC_UNIFORM_MATERIALINFO,
GENERIC_UNIFORM_COUNT
};
enum
{
SHADOWMASK_UNIFORM_SCREENDEPTHMAP = 0,
SHADOWMASK_UNIFORM_SHADOWMAP,
SHADOWMASK_UNIFORM_SHADOWMAP2,
SHADOWMASK_UNIFORM_SHADOWMAP3,
SHADOWMASK_UNIFORM_SHADOWMVP,
SHADOWMASK_UNIFORM_SHADOWMVP2,
SHADOWMASK_UNIFORM_SHADOWMVP3,
SHADOWMASK_UNIFORM_VIEWORIGIN,
SHADOWMASK_UNIFORM_VIEWINFO, // znear, zfar, width/2, height/2
SHADOWMASK_UNIFORM_VIEWFORWARD,
SHADOWMASK_UNIFORM_VIEWLEFT,
SHADOWMASK_UNIFORM_VIEWUP,
SHADOWMASK_UNIFORM_COUNT
};
enum
{
SSAO_UNIFORM_SCREENDEPTHMAP = 0,
SSAO_UNIFORM_VIEWINFO, // znear, zfar, width/2, height/2
SSAO_UNIFORM_COUNT
};
enum
{
DEPTHBLUR_UNIFORM_SCREENIMAGEMAP = 0,
DEPTHBLUR_UNIFORM_SCREENDEPTHMAP,
DEPTHBLUR_UNIFORM_VIEWINFO, // znear, zfar, width/2, height/2
DEPTHBLUR_UNIFORM_COUNT
};
//
// These are fire wall functions to avoid expensive redundant glUniform* calls
//#define USE_UNIFORM_FIREWALL 1
//#define LOG_GLSL_UNIFORMS 1
// trRefdef_t holds everything that comes in refdef_t,
// as well as the locally generated scene information
typedef struct {
@ -2434,8 +2374,6 @@ void GLSL_VertexAttribPointers(uint32_t attribBits);
void GLSL_BindProgram(shaderProgram_t * program);
void GLSL_BindNullProgram(void);
void GLSL_SetNumUniforms(shaderProgram_t *program, int numUniforms);
void GLSL_SetUniformName(shaderProgram_t *program, int uniformNum, const char *name);
void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value);
void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value);
void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_t v);