mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-02-02 11:51:25 +00:00
Reorganize a little code so that lightmaps can be used when a spotlight isn't currently casting a shadow. This fixes the problem where the window lights in the E1L1 apartment secret would jump between square and circle-shaped depending on the shadowcount and the view angle.
git-svn-id: https://svn.eduke32.com/eduke32@1674 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
8a3dd08b14
commit
abbe41e97d
2 changed files with 166 additions and 140 deletions
|
@ -74,6 +74,7 @@ typedef enum {
|
|||
PR_BIT_MIRROR_MAP,
|
||||
PR_BIT_FOG,
|
||||
PR_BIT_GLOW_MAP,
|
||||
PR_BIT_PROJECTION_MAP,
|
||||
PR_BIT_SHADOW_MAP,
|
||||
PR_BIT_LIGHT_MAP,
|
||||
PR_BIT_SPOT_LIGHT,
|
||||
|
@ -137,9 +138,10 @@ typedef struct s_prrograminfo {
|
|||
GLint uniform_mirrorMap;
|
||||
// PR_BIT_GLOW_MAP
|
||||
GLint uniform_glowMap;
|
||||
// PR_BIT_PROJECTION_MAP
|
||||
GLint uniform_shadowProjMatrix;
|
||||
// PR_BIT_SHADOW_MAP
|
||||
GLint uniform_shadowMap;
|
||||
GLint uniform_shadowProjMatrix;
|
||||
// PR_BIT_LIGHT_MAP
|
||||
GLint uniform_lightMap;
|
||||
// PR_BIT_SPOT_LIGHT
|
||||
|
|
|
@ -380,7 +380,7 @@ _prprogrambit prprogrambits[PR_BIT_COUNT] = {
|
|||
"\n",
|
||||
},
|
||||
{
|
||||
1 << PR_BIT_SHADOW_MAP,
|
||||
1 << PR_BIT_PROJECTION_MAP,
|
||||
// vert_def
|
||||
"uniform mat4 shadowProjMatrix;\n"
|
||||
"\n",
|
||||
|
@ -388,6 +388,17 @@ _prprogrambit prprogrambits[PR_BIT_COUNT] = {
|
|||
" gl_TexCoord[2] = shadowProjMatrix * curVertex;\n"
|
||||
"\n",
|
||||
// frag_def
|
||||
"",
|
||||
// frag_prog
|
||||
"",
|
||||
},
|
||||
{
|
||||
1 << PR_BIT_SHADOW_MAP,
|
||||
// vert_def
|
||||
"",
|
||||
// vert_prog
|
||||
"",
|
||||
// frag_def
|
||||
"uniform sampler2DShadow shadowMap;\n"
|
||||
"\n",
|
||||
// frag_prog
|
||||
|
@ -3785,7 +3796,7 @@ static void polymer_getscratchmaterial(_prmaterial* material)
|
|||
material->mirrormap = 0;
|
||||
// PR_BIT_GLOW_MAP
|
||||
material->glowmap = 0;
|
||||
// PR_BIT_SHADOW_MAP
|
||||
// PR_BIT_PROJECTION_MAP
|
||||
material->mdspritespace = GL_FALSE;
|
||||
}
|
||||
|
||||
|
@ -3934,9 +3945,12 @@ static int32_t polymer_bindmaterial(_prmaterial material, int16_t* lights,
|
|||
// PR_BIT_SHADOW_MAP
|
||||
if (prlights[lights[curlight]].rtindex != -1) {
|
||||
programbits |= prprogrambits[PR_BIT_SHADOW_MAP].bit;
|
||||
programbits |= prprogrambits[PR_BIT_PROJECTION_MAP].bit;
|
||||
}
|
||||
// PR_BIT_LIGHT_MAP
|
||||
if (prlights[lights[curlight]].lightmap)
|
||||
if (prlights[lights[curlight]].lightmap) {
|
||||
programbits |= prprogrambits[PR_BIT_LIGHT_MAP].bit;
|
||||
programbits |= prprogrambits[PR_BIT_PROJECTION_MAP].bit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4163,8 +4177,8 @@ static int32_t polymer_bindmaterial(_prmaterial material, int16_t* lights,
|
|||
bglUniform3fvARB(prprograms[programbits].uniform_spotDir, 1, dir);
|
||||
bglUniform2fvARB(prprograms[programbits].uniform_spotRadius, 1, indir);
|
||||
|
||||
// PR_BIT_SHADOW_MAP
|
||||
if (programbits & prprogrambits[PR_BIT_SHADOW_MAP].bit)
|
||||
// PR_BIT_PROJECTION_MAP
|
||||
if (programbits & prprogrambits[PR_BIT_PROJECTION_MAP].bit)
|
||||
{
|
||||
GLfloat matrix[16];
|
||||
|
||||
|
@ -4178,13 +4192,18 @@ static int32_t polymer_bindmaterial(_prmaterial material, int16_t* lights,
|
|||
bglLoadIdentity();
|
||||
bglMatrixMode(GL_MODELVIEW);
|
||||
|
||||
bglUniformMatrix4fvARB(prprograms[programbits].uniform_shadowProjMatrix, 1, GL_FALSE, matrix);
|
||||
|
||||
// PR_BIT_SHADOW_MAP
|
||||
if (programbits & prprogrambits[PR_BIT_SHADOW_MAP].bit)
|
||||
{
|
||||
bglActiveTextureARB(texunit + GL_TEXTURE0_ARB);
|
||||
bglBindTexture(prrts[prlights[lights[curlight]].rtindex].target, prrts[prlights[lights[curlight]].rtindex].z);
|
||||
|
||||
bglUniform1iARB(prprograms[programbits].uniform_shadowMap, texunit);
|
||||
bglUniformMatrix4fvARB(prprograms[programbits].uniform_shadowProjMatrix, 1, GL_FALSE, matrix);
|
||||
|
||||
texunit++;
|
||||
}
|
||||
|
||||
// PR_BIT_LIGHT_MAP
|
||||
if (programbits & prprogrambits[PR_BIT_LIGHT_MAP].bit)
|
||||
|
@ -4388,11 +4407,16 @@ static void polymer_compileprogram(int32_t programbits)
|
|||
prprograms[programbits].uniform_glowMap = bglGetUniformLocationARB(program, "glowMap");
|
||||
}
|
||||
|
||||
// PR_BIT_PROJECTION_MAP
|
||||
if (programbits & prprogrambits[PR_BIT_PROJECTION_MAP].bit)
|
||||
{
|
||||
prprograms[programbits].uniform_shadowProjMatrix = bglGetUniformLocationARB(program, "shadowProjMatrix");
|
||||
}
|
||||
|
||||
// PR_BIT_SHADOW_MAP
|
||||
if (programbits & prprogrambits[PR_BIT_SHADOW_MAP].bit)
|
||||
{
|
||||
prprograms[programbits].uniform_shadowMap = bglGetUniformLocationARB(program, "shadowMap");
|
||||
prprograms[programbits].uniform_shadowProjMatrix = bglGetUniformLocationARB(program, "shadowProjMatrix");
|
||||
}
|
||||
|
||||
// PR_BIT_LIGHT_MAP
|
||||
|
|
Loading…
Reference in a new issue