mirror of
https://github.com/DrBeef/Raze.git
synced 2025-01-31 05:00:41 +00:00
Fullbright/glow material bit.
git-svn-id: https://svn.eduke32.com/eduke32@1169 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
b50b229c1d
commit
0c869a2254
2 changed files with 76 additions and 7 deletions
|
@ -48,6 +48,7 @@ typedef enum {
|
|||
PR_BIT_DIFFUSE_MAP,
|
||||
PR_BIT_DIFFUSE_DETAIL_MAP,
|
||||
PR_BIT_DIFFUSE_MODULATION,
|
||||
PR_BIT_DIFFUSE_GLOW_MAP,
|
||||
PR_BIT_DEFAULT, // must be just before last
|
||||
PR_BIT_COUNT // must be last
|
||||
} prbittype;
|
||||
|
@ -65,6 +66,8 @@ typedef struct s_prmaterial {
|
|||
GLfloat detailscale[2];
|
||||
// PR_BIT_DIFFUSE_MODULATION
|
||||
GLfloat diffusemodulation[4];
|
||||
// PR_BIT_DIFFUSE_GLOW_MAP
|
||||
GLuint glowmap;
|
||||
} _prmaterial;
|
||||
|
||||
typedef struct s_prrograminfo {
|
||||
|
@ -78,6 +81,8 @@ typedef struct s_prrograminfo {
|
|||
// PR_BIT_DIFFUSE_DETAIL_MAP
|
||||
GLint uniform_detailMap;
|
||||
GLint uniform_detailScale;
|
||||
// PR_BIT_DIFFUSE_GLOW_MAP
|
||||
GLint uniform_glowMap;
|
||||
} _prprograminfo;
|
||||
|
||||
#define PR_INFO_LOG_BUFFER_SIZE 512
|
||||
|
|
|
@ -134,6 +134,7 @@ _prprogrambit prprogrambits[PR_BIT_COUNT] = {
|
|||
// vert_prog
|
||||
" vec4 currentFramePosition;\n"
|
||||
" vec4 nextFramePosition;\n"
|
||||
"\n"
|
||||
" currentFramePosition = gl_Vertex * (1.0 - frameProgress);\n"
|
||||
" nextFramePosition = nextFrameData * frameProgress;\n"
|
||||
" currentFramePosition = currentFramePosition + nextFramePosition;\n"
|
||||
|
@ -188,6 +189,23 @@ _prprogrambit prprogrambits[PR_BIT_COUNT] = {
|
|||
" result *= vec4(gl_Color);\n"
|
||||
"\n",
|
||||
},
|
||||
{
|
||||
1 << PR_BIT_DIFFUSE_GLOW_MAP,
|
||||
// vert_def
|
||||
"",
|
||||
// vert_prog
|
||||
"gl_TexCoord[2] = gl_MultiTexCoord0;\n"
|
||||
"\n",
|
||||
// frag_def
|
||||
"uniform sampler2D glowMap;\n"
|
||||
"\n",
|
||||
// frag_prog
|
||||
" vec4 glowTexel;\n"
|
||||
"\n"
|
||||
" glowTexel = texture2D(glowMap, gl_TexCoord[2].st);\n"
|
||||
" result = vec4((result.rgb * (1.0 - glowTexel.a)) + (glowTexel.rgb * glowTexel.a), result.a);\n"
|
||||
"\n",
|
||||
},
|
||||
{
|
||||
1 << PR_BIT_DEFAULT,
|
||||
// vert_def
|
||||
|
@ -2343,14 +2361,23 @@ static void polymer_drawmdsprite(spritetype *tspr)
|
|||
if (!mdspritematerial.diffusemap)
|
||||
continue;
|
||||
|
||||
mdspritematerial.detailmap =
|
||||
mdloadskin((md2model *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,DETAILPAL,surfi);
|
||||
if (r_detailmapping && !(tspr->cstat&1024))
|
||||
{
|
||||
mdspritematerial.detailmap =
|
||||
mdloadskin((md2model *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,DETAILPAL,surfi);
|
||||
|
||||
for (sk = m->skinmap; sk; sk = sk->next)
|
||||
if ((int)sk->palette == DETAILPAL &&
|
||||
sk->skinnum == tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum &&
|
||||
sk->surfnum == surfi)
|
||||
mdspritematerial.detailscale[0] = mdspritematerial.detailscale[1] = sk->param;
|
||||
for (sk = m->skinmap; sk; sk = sk->next)
|
||||
if ((int)sk->palette == DETAILPAL &&
|
||||
sk->skinnum == tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum &&
|
||||
sk->surfnum == surfi)
|
||||
mdspritematerial.detailscale[0] = mdspritematerial.detailscale[1] = sk->param;
|
||||
}
|
||||
|
||||
if (r_glowmapping && !(tspr->cstat&1024))
|
||||
{
|
||||
mdspritematerial.glowmap =
|
||||
mdloadskin((md2model *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,GLOWPAL,surfi);
|
||||
}
|
||||
|
||||
if (pr_vbos > 1)
|
||||
{
|
||||
|
@ -2455,12 +2482,15 @@ static void polymer_getscratchmaterial(_prmaterial* material)
|
|||
material->diffusemodulation[1] =
|
||||
material->diffusemodulation[2] =
|
||||
material->diffusemodulation[3] = 1.0f;
|
||||
// PR_BIT_DIFFUSE_GLOW_MAP
|
||||
material->glowmap = 0;
|
||||
}
|
||||
|
||||
static void polymer_getbuildmaterial(_prmaterial* material, short tilenum, char pal, signed char shade)
|
||||
{
|
||||
pthtyp* pth;
|
||||
pthtyp* detailpth;
|
||||
pthtyp* glowpth;
|
||||
|
||||
polymer_getscratchmaterial(material);
|
||||
|
||||
|
@ -2514,6 +2544,19 @@ static void polymer_getbuildmaterial(_prmaterial* material, short tilenu
|
|||
material->diffusemodulation[1] *= (float)hictinting[pal].g / 255.0;
|
||||
material->diffusemodulation[2] *= (float)hictinting[pal].b / 255.0;
|
||||
}
|
||||
|
||||
// PR_BIT_DIFFUSE_GLOW_MAP
|
||||
if (r_fullbrights && pth && pth->flags & 16)
|
||||
material->glowmap = pth->ofb->glpic;
|
||||
|
||||
if (r_glowmapping && hicfindsubst(tilenum, GLOWPAL, 0))
|
||||
{
|
||||
glowpth = NULL;
|
||||
glowpth = gltexcache(tilenum, GLOWPAL, 0);
|
||||
|
||||
if (glowpth && (glowpth->hicr->palnum == GLOWPAL))
|
||||
material->glowmap = glowpth->glpic;
|
||||
}
|
||||
}
|
||||
|
||||
static int polymer_bindmaterial(_prmaterial material)
|
||||
|
@ -2542,6 +2585,10 @@ static int polymer_bindmaterial(_prmaterial material)
|
|||
(material.diffusemodulation[2] != 1.0f) || (material.diffusemodulation[3] != 1.0f))
|
||||
programbits |= prprogrambits[PR_BIT_DIFFUSE_MODULATION].bit;
|
||||
|
||||
// PR_BIT_DIFFUSE_GLOW_MAP
|
||||
if (material.glowmap)
|
||||
programbits |= prprogrambits[PR_BIT_DIFFUSE_GLOW_MAP].bit;
|
||||
|
||||
// --------- program compiling
|
||||
if (!prprograms[programbits].handle)
|
||||
polymer_compileprogram(programbits);
|
||||
|
@ -2597,6 +2644,17 @@ static int polymer_bindmaterial(_prmaterial material)
|
|||
material.diffusemodulation[3]);
|
||||
}
|
||||
|
||||
// PR_BIT_DIFFUSE_GLOW_MAP
|
||||
if (programbits & prprogrambits[PR_BIT_DIFFUSE_GLOW_MAP].bit)
|
||||
{
|
||||
bglActiveTextureARB(texunit + GL_TEXTURE0_ARB);
|
||||
bglBindTexture(GL_TEXTURE_2D, material.glowmap);
|
||||
|
||||
bglUniform1iARB(prprograms[programbits].uniform_glowMap, texunit);
|
||||
|
||||
texunit++;
|
||||
}
|
||||
|
||||
bglActiveTextureARB(GL_TEXTURE0_ARB);
|
||||
|
||||
return (programbits);
|
||||
|
@ -2702,6 +2760,12 @@ static void polymer_compileprogram(int programbits)
|
|||
prprograms[programbits].uniform_detailMap = bglGetUniformLocationARB(program, "detailMap");
|
||||
prprograms[programbits].uniform_detailScale = bglGetUniformLocationARB(program, "detailScale");
|
||||
}
|
||||
|
||||
// PR_BIT_DIFFUSE_GLOW_MAP
|
||||
if (programbits & prprogrambits[PR_BIT_DIFFUSE_GLOW_MAP].bit)
|
||||
{
|
||||
prprograms[programbits].uniform_glowMap = bglGetUniformLocationARB(program, "glowMap");
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue