mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-05-05 00:12:16 +00:00
Merge remote-tracking branch 'tehrealsalt/oglshaderport' into sal-oglshaderport
This commit is contained in:
commit
402b63ed77
7 changed files with 61 additions and 70 deletions
|
|
@ -41,7 +41,6 @@ struct GLMipmap_s
|
||||||
|
|
||||||
struct GLMipmap_s *nextcolormap;
|
struct GLMipmap_s *nextcolormap;
|
||||||
const UINT8 *colormap;
|
const UINT8 *colormap;
|
||||||
INT32 tcindex;
|
|
||||||
|
|
||||||
// opengl
|
// opengl
|
||||||
struct GLMipmap_s *nextmipmap; // opengl : liste of all texture in opengl driver
|
struct GLMipmap_s *nextmipmap; // opengl : liste of all texture in opengl driver
|
||||||
|
|
|
||||||
|
|
@ -3742,13 +3742,12 @@ static boolean HWR_DoCulling(line_t *cullheight, line_t *viewcullheight, float v
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HWR_DrawDropShadow(mobj_t *thing, gr_vissprite_t *spr, fixed_t scale)
|
static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale)
|
||||||
{
|
{
|
||||||
GLPatch_t *gpatch;
|
GLPatch_t *gpatch;
|
||||||
FOutVector shadowVerts[4];
|
FOutVector shadowVerts[4];
|
||||||
FSurfaceInfo sSurf;
|
FSurfaceInfo sSurf;
|
||||||
float fscale; float fx; float fy; float offset;
|
float fscale; float fx; float fy; float offset;
|
||||||
UINT8 lightlevel = 255;
|
|
||||||
extracolormap_t *colormap = NULL;
|
extracolormap_t *colormap = NULL;
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
|
||||||
|
|
@ -3791,10 +3790,18 @@ static void HWR_DrawDropShadow(mobj_t *thing, gr_vissprite_t *spr, fixed_t scale
|
||||||
else
|
else
|
||||||
offset = (float)(gpatch->height/2);
|
offset = (float)(gpatch->height/2);
|
||||||
|
|
||||||
shadowVerts[0].x = shadowVerts[3].x = fx - offset;
|
shadowVerts[2].x = shadowVerts[3].x = fx + offset;
|
||||||
shadowVerts[2].x = shadowVerts[1].x = fx + offset;
|
shadowVerts[1].x = shadowVerts[0].x = fx - offset;
|
||||||
shadowVerts[0].z = shadowVerts[1].z = fy - offset;
|
shadowVerts[1].z = shadowVerts[2].z = fy - offset;
|
||||||
shadowVerts[3].z = shadowVerts[2].z = fy + offset;
|
shadowVerts[0].z = shadowVerts[3].z = fy + offset;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
float oldx = shadowVerts[i].x;
|
||||||
|
float oldy = shadowVerts[i].z;
|
||||||
|
shadowVerts[i].x = fx + ((oldx - fx) * gr_viewcos) - ((oldy - fy) * gr_viewsin);
|
||||||
|
shadowVerts[i].z = fy + ((oldx - fx) * gr_viewsin) + ((oldy - fy) * gr_viewcos);
|
||||||
|
}
|
||||||
|
|
||||||
if (floorslope)
|
if (floorslope)
|
||||||
{
|
{
|
||||||
|
|
@ -3810,47 +3817,25 @@ static void HWR_DrawDropShadow(mobj_t *thing, gr_vissprite_t *spr, fixed_t scale
|
||||||
shadowVerts[i].y = FIXED_TO_FLOAT(floorz) + 0.05f;
|
shadowVerts[i].y = FIXED_TO_FLOAT(floorz) + 0.05f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spr->flip)
|
shadowVerts[0].s = shadowVerts[3].s = 0;
|
||||||
{
|
shadowVerts[2].s = shadowVerts[1].s = gpatch->max_s;
|
||||||
shadowVerts[0].s = shadowVerts[3].s = gpatch->max_s;
|
|
||||||
shadowVerts[2].s = shadowVerts[1].s = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
shadowVerts[0].s = shadowVerts[3].s = 0;
|
|
||||||
shadowVerts[2].s = shadowVerts[1].s = gpatch->max_s;
|
|
||||||
}
|
|
||||||
|
|
||||||
// flip the texture coords (look familiar?)
|
shadowVerts[3].t = shadowVerts[2].t = 0;
|
||||||
if (spr->vflip)
|
shadowVerts[0].t = shadowVerts[1].t = gpatch->max_t;
|
||||||
{
|
|
||||||
shadowVerts[3].t = shadowVerts[2].t = gpatch->max_t;
|
|
||||||
shadowVerts[0].t = shadowVerts[1].t = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
shadowVerts[3].t = shadowVerts[2].t = 0;
|
|
||||||
shadowVerts[0].t = shadowVerts[1].t = gpatch->max_t;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (thing->subsector->sector->numlights)
|
if (thing->subsector->sector->numlights)
|
||||||
{
|
{
|
||||||
light = R_GetPlaneLight(thing->subsector->sector, floorz, false); // Always use the light at the top instead of whatever I was doing before
|
light = R_GetPlaneLight(thing->subsector->sector, floorz, false); // Always use the light at the top instead of whatever I was doing before
|
||||||
|
|
||||||
lightlevel = *thing->subsector->sector->lightlist[light].lightlevel;
|
|
||||||
|
|
||||||
if (*thing->subsector->sector->lightlist[light].extra_colormap)
|
if (*thing->subsector->sector->lightlist[light].extra_colormap)
|
||||||
colormap = *thing->subsector->sector->lightlist[light].extra_colormap;
|
colormap = *thing->subsector->sector->lightlist[light].extra_colormap;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lightlevel = thing->subsector->sector->lightlevel;
|
|
||||||
|
|
||||||
if (thing->subsector->sector->extra_colormap)
|
if (thing->subsector->sector->extra_colormap)
|
||||||
colormap = thing->subsector->sector->extra_colormap;
|
colormap = thing->subsector->sector->extra_colormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
HWR_Lighting(&sSurf, lightlevel, colormap);
|
HWR_Lighting(&sSurf, 0, colormap);
|
||||||
sSurf.PolyColor.s.alpha = alpha;
|
sSurf.PolyColor.s.alpha = alpha;
|
||||||
|
|
||||||
HWD.pfnSetShader(3); // sprite shader
|
HWD.pfnSetShader(3); // sprite shader
|
||||||
|
|
@ -4918,7 +4903,7 @@ static void HWR_DrawSprites(void)
|
||||||
{
|
{
|
||||||
if (spr->mobj && spr->mobj->shadowscale && cv_shadow.value)
|
if (spr->mobj && spr->mobj->shadowscale && cv_shadow.value)
|
||||||
{
|
{
|
||||||
HWR_DrawDropShadow(spr->mobj, spr, spr->mobj->shadowscale);
|
HWR_DrawDropShadow(spr->mobj, spr->mobj->shadowscale);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spr->mobj && spr->mobj->skin && spr->mobj->sprite == SPR_PLAY)
|
if (spr->mobj && spr->mobj->skin && spr->mobj->sprite == SPR_PLAY)
|
||||||
|
|
|
||||||
|
|
@ -900,11 +900,19 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch,
|
||||||
|
|
||||||
blendcolor = V_GetColor(translation[firsti]);
|
blendcolor = V_GetColor(translation[firsti]);
|
||||||
|
|
||||||
|
if (secondi >= translen)
|
||||||
|
mul = 0;
|
||||||
|
|
||||||
if (mul > 0) // If it's 0, then we only need the first color.
|
if (mul > 0) // If it's 0, then we only need the first color.
|
||||||
{
|
{
|
||||||
if (secondi >= translen) // blend to black
|
#if 0
|
||||||
|
if (secondi >= translen)
|
||||||
|
{
|
||||||
|
// blend to black
|
||||||
nextcolor = V_GetColor(31);
|
nextcolor = V_GetColor(31);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
nextcolor = V_GetColor(translation[secondi]);
|
nextcolor = V_GetColor(translation[secondi]);
|
||||||
|
|
||||||
// Find difference between points
|
// Find difference between points
|
||||||
|
|
@ -999,32 +1007,13 @@ static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, INT
|
||||||
// mostly copied from HWR_GetMappedPatch, hence the similarities and comment
|
// mostly copied from HWR_GetMappedPatch, hence the similarities and comment
|
||||||
GLMipmap_t *grmip, *newmip;
|
GLMipmap_t *grmip, *newmip;
|
||||||
|
|
||||||
if ((colormap == colormaps || colormap == NULL) && (skinnum > TC_DEFAULT))
|
if (colormap == colormaps || colormap == NULL)
|
||||||
{
|
{
|
||||||
// Don't do any blending
|
// Don't do any blending
|
||||||
HWD.pfnSetTexture(gpatch->mipmap);
|
HWD.pfnSetTexture(gpatch->mipmap);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// search for the mipmap
|
|
||||||
// skip the first (no colormap translated)
|
|
||||||
for (grmip = gpatch->mipmap; grmip->nextcolormap; )
|
|
||||||
{
|
|
||||||
grmip = grmip->nextcolormap;
|
|
||||||
if (grmip->colormap == colormap || (skinnum < TC_DEFAULT && grmip->tcindex == skinnum))
|
|
||||||
{
|
|
||||||
if (grmip->downloaded && grmip->grInfo.data)
|
|
||||||
{
|
|
||||||
HWD.pfnSetTexture(grmip); // found the colormap, set it to the correct texture
|
|
||||||
Z_ChangeTag(grmip->grInfo.data, PU_HWRMODELTEXTURE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If here, the blended texture has not been created
|
|
||||||
// So we create it
|
|
||||||
|
|
||||||
if ((blendgpatch && blendgpatch->mipmap->grInfo.format)
|
if ((blendgpatch && blendgpatch->mipmap->grInfo.format)
|
||||||
&& (gpatch->width != blendgpatch->width || gpatch->height != blendgpatch->height))
|
&& (gpatch->width != blendgpatch->width || gpatch->height != blendgpatch->height))
|
||||||
{
|
{
|
||||||
|
|
@ -1033,21 +1022,39 @@ static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, INT
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// search for the mipmap
|
||||||
|
// skip the first (no colormap translated)
|
||||||
|
for (grmip = gpatch->mipmap; grmip->nextcolormap; )
|
||||||
|
{
|
||||||
|
grmip = grmip->nextcolormap;
|
||||||
|
if (grmip->colormap == colormap)
|
||||||
|
{
|
||||||
|
if (grmip->downloaded && grmip->grInfo.data)
|
||||||
|
{
|
||||||
|
HWD.pfnSetTexture(grmip); // found the colormap, set it to the correct texture
|
||||||
|
Z_ChangeTag(grmip->grInfo.data, PU_HWRMODELTEXTURE_UNLOCKED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If here, the blended texture has not been created
|
||||||
|
// So we create it
|
||||||
|
|
||||||
//BP: WARNING: don't free it manually without clearing the cache of harware renderer
|
//BP: WARNING: don't free it manually without clearing the cache of harware renderer
|
||||||
// (it have a liste of mipmap)
|
// (it have a liste of mipmap)
|
||||||
// this malloc is cleared in HWR_FreeTextureCache
|
// this malloc is cleared in HWR_FreeTextureCache
|
||||||
// (...) unfortunately z_malloc fragment alot the memory :(so malloc is better
|
// (...) unfortunately z_malloc fragment alot the memory :(so malloc is better
|
||||||
newmip = calloc(1, sizeof (*newmip));
|
newmip = calloc(1, sizeof (*newmip));
|
||||||
if (newmip == NULL)
|
if (newmip == NULL)
|
||||||
I_Error("%s: Out of memory", "HWR_GetMappedPatch");
|
I_Error("%s: Out of memory", "HWR_GetBlendedTexture");
|
||||||
grmip->nextcolormap = newmip;
|
grmip->nextcolormap = newmip;
|
||||||
newmip->colormap = colormap;
|
newmip->colormap = colormap;
|
||||||
newmip->tcindex = skinnum;
|
|
||||||
|
|
||||||
HWR_CreateBlendedTexture(gpatch, blendgpatch, newmip, skinnum, color);
|
HWR_CreateBlendedTexture(gpatch, blendgpatch, newmip, skinnum, color);
|
||||||
|
|
||||||
HWD.pfnSetTexture(newmip);
|
HWD.pfnSetTexture(newmip);
|
||||||
Z_ChangeTag(newmip->grInfo.data, PU_HWRMODELTEXTURE);
|
Z_ChangeTag(newmip->grInfo.data, PU_HWRMODELTEXTURE_UNLOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define NORMALFOG 0x00000000
|
#define NORMALFOG 0x00000000
|
||||||
|
|
@ -1273,7 +1280,7 @@ boolean HWR_DrawModel(gr_vissprite_t *spr)
|
||||||
|
|
||||||
if (gpatch && gpatch->mipmap->grInfo.format) // else if meant that if a texture couldn't be loaded, it would just end up using something else's texture
|
if (gpatch && gpatch->mipmap->grInfo.format) // else if meant that if a texture couldn't be loaded, it would just end up using something else's texture
|
||||||
{
|
{
|
||||||
INT32 skinnum = INT32_MAX;
|
INT32 skinnum = TC_DEFAULT;
|
||||||
|
|
||||||
if ((spr->mobj->flags & (MF_ENEMY|MF_BOSS)) && (spr->mobj->flags2 & MF2_FRET) && !(spr->mobj->flags & MF_GRENADEBOUNCE) && (leveltime & 1)) // Bosses "flash"
|
if ((spr->mobj->flags & (MF_ENEMY|MF_BOSS)) && (spr->mobj->flags2 & MF2_FRET) && !(spr->mobj->flags & MF_GRENADEBOUNCE) && (leveltime & 1)) // Bosses "flash"
|
||||||
{
|
{
|
||||||
|
|
@ -1304,15 +1311,7 @@ boolean HWR_DrawModel(gr_vissprite_t *spr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Translation or skin number found
|
// Translation or skin number found
|
||||||
if (skinnum != INT32_MAX)
|
HWR_GetBlendedTexture(gpatch, (GLPatch_t *)md2->blendgrpatch, skinnum, spr->colormap, (skincolors_t)spr->mobj->color);
|
||||||
{
|
|
||||||
HWR_GetBlendedTexture(gpatch, (GLPatch_t *)md2->blendgrpatch, skinnum, spr->colormap, (skincolors_t)spr->mobj->color);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Sorry nothing
|
|
||||||
HWD.pfnSetTexture(gpatch->mipmap);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3699,10 +3699,15 @@ void HWR_SetupLevel(void)
|
||||||
// Meaning, they had memory allocated and marked with the PU_LEVEL tag.
|
// Meaning, they had memory allocated and marked with the PU_LEVEL tag.
|
||||||
// Level textures are only reloaded after R_LoadTextures, which is
|
// Level textures are only reloaded after R_LoadTextures, which is
|
||||||
// when the texture list is loaded.
|
// when the texture list is loaded.
|
||||||
|
|
||||||
|
// Sal: Unfortunately, NOT freeing them causes the dreaded Color Bug.
|
||||||
|
HWR_FreeMipmapCache();
|
||||||
|
|
||||||
#ifdef ALAM_LIGHTING
|
#ifdef ALAM_LIGHTING
|
||||||
// BP: reset light between levels (we draw preview frame lights on current frame)
|
// BP: reset light between levels (we draw preview frame lights on current frame)
|
||||||
HWR_ResetLights();
|
HWR_ResetLights();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Correct missing sidedefs & deep water trick
|
// Correct missing sidedefs & deep water trick
|
||||||
HWR_CorrectSWTricks();
|
HWR_CorrectSWTricks();
|
||||||
HWR_CreatePlanePolygons((INT32)numnodes - 1);
|
HWR_CreatePlanePolygons((INT32)numnodes - 1);
|
||||||
|
|
|
||||||
|
|
@ -1484,7 +1484,7 @@ void W_FlushCachedPatches(void)
|
||||||
Z_FreeTag(PU_HWRPATCHINFO);
|
Z_FreeTag(PU_HWRPATCHINFO);
|
||||||
Z_FreeTag(PU_HWRMODELTEXTURE);
|
Z_FreeTag(PU_HWRMODELTEXTURE);
|
||||||
Z_FreeTag(PU_HWRCACHE);
|
Z_FreeTag(PU_HWRCACHE);
|
||||||
Z_FreeTags(PU_HWRCACHE_UNLOCKED, PU_HWRPATCHINFO_UNLOCKED);
|
Z_FreeTags(PU_HWRCACHE_UNLOCKED, PU_HWRMODELTEXTURE_UNLOCKED);
|
||||||
}
|
}
|
||||||
needpatchflush = false;
|
needpatchflush = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -516,6 +516,7 @@ void Z_FlushCachedPatches(void)
|
||||||
Z_FreeTag(PU_HWRCACHE);
|
Z_FreeTag(PU_HWRCACHE);
|
||||||
Z_FreeTag(PU_HWRCACHE_UNLOCKED);
|
Z_FreeTag(PU_HWRCACHE_UNLOCKED);
|
||||||
Z_FreeTag(PU_HWRPATCHINFO_UNLOCKED);
|
Z_FreeTag(PU_HWRPATCHINFO_UNLOCKED);
|
||||||
|
Z_FreeTag(PU_HWRMODELTEXTURE_UNLOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// happens before a renderer switch
|
// happens before a renderer switch
|
||||||
|
|
@ -813,6 +814,7 @@ static void Command_Memfree_f(void)
|
||||||
CONS_Printf(M_GetText("HW Texture cache : %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRCACHE)>>10));
|
CONS_Printf(M_GetText("HW Texture cache : %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRCACHE)>>10));
|
||||||
CONS_Printf(M_GetText("Plane polygons : %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRPLANE)>>10));
|
CONS_Printf(M_GetText("Plane polygons : %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRPLANE)>>10));
|
||||||
CONS_Printf(M_GetText("HW Texture used : %7d KB\n"), HWR_GetTextureUsed()>>10);
|
CONS_Printf(M_GetText("HW Texture used : %7d KB\n"), HWR_GetTextureUsed()>>10);
|
||||||
|
CONS_Printf(M_GetText("HW model textures : %7s KB\n"), sizeu1(Z_TagUsage(PU_HWRMODELTEXTURE)>>10));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@ enum
|
||||||
// 'second-level' cache for graphics
|
// 'second-level' cache for graphics
|
||||||
// stored in hardware format and downloaded as needed
|
// stored in hardware format and downloaded as needed
|
||||||
PU_HWRPATCHINFO_UNLOCKED = 103, // 'unlocked' PU_HWRPATCHINFO memory
|
PU_HWRPATCHINFO_UNLOCKED = 103, // 'unlocked' PU_HWRPATCHINFO memory
|
||||||
|
PU_HWRMODELTEXTURE_UNLOCKED = 104, // 'unlocked' PU_HWRMODELTEXTURE memory
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue