From a93acd1958920282f225f07a5ff72038e745b6b0 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Mon, 1 Mar 2021 01:48:31 -0500 Subject: [PATCH] Make it through OGL --- src/hardware/hw_cache.c | 26 +++++++++++++--------- src/hardware/hw_defs.h | 3 ++- src/hardware/hw_draw.c | 4 ++-- src/hardware/hw_drv.h | 2 +- src/hardware/hw_main.c | 30 +++++++++----------------- src/hardware/hw_md2.c | 37 ++++++-------------------------- src/hardware/r_opengl/r_opengl.c | 6 +++--- 7 files changed, 41 insertions(+), 67 deletions(-) diff --git a/src/hardware/hw_cache.c b/src/hardware/hw_cache.c index 594335601..f6842dca0 100644 --- a/src/hardware/hw_cache.c +++ b/src/hardware/hw_cache.c @@ -452,6 +452,8 @@ static void HWR_GenerateTexture(INT32 texnum, GLMapTexture_t *grtex) UINT8 *pdata; INT32 blockwidth, blockheight, blocksize; + UINT8 *colormap = colormaps; + INT32 i; boolean skyspecial = false; //poor hack for Legacy large skies.. @@ -475,12 +477,12 @@ static void HWR_GenerateTexture(INT32 texnum, GLMapTexture_t *grtex) grtex->mipmap.height = (UINT16)texture->height; grtex->mipmap.format = textureformat; - grtex->mipmap.colormap = colormaps; - -#ifdef GLENCORE if (encoremap) - grtex->mipmap.colormap += COLORMAP_REMAPOFFSET; -#endif + colormap += COLORMAP_REMAPOFFSET; + + grtex->mipmap.colormap = Z_Calloc(sizeof(*grtex->mipmap.colormap), PU_HWRPATCHCOLMIPMAP, NULL); + grtex->mipmap.colormap->source = colormap; + M_Memcpy(grtex->mipmap.colormap->data, colormap, 256 * sizeof(UINT8)); blockwidth = texture->width; blockheight = texture->height; @@ -551,7 +553,7 @@ static void HWR_GenerateTexture(INT32 texnum, GLMapTexture_t *grtex) } // patch may be NULL if grMipmap has been initialised already and makebitmap is false -void HWR_MakePatch (patch_t *patch, GLPatch_t *grPatch, GLMipmap_t *grMipmap, boolean makebitmap) +void HWR_MakePatch (const patch_t *patch, GLPatch_t *grPatch, GLMipmap_t *grMipmap, boolean makebitmap) { if (grMipmap->width == 0) { @@ -859,7 +861,7 @@ static void HWR_CacheFlat(GLMipmap_t *grMipmap, lumpnum_t flatlumpnum) flat = grMipmap->data; for (steppy = 0; steppy < size; steppy++) if (flat[steppy] != HWR_PATCHES_CHROMAKEY_COLORINDEX) - flat[steppy] = grMipmap->colormap[flat[steppy]]; + flat[steppy] = grMipmap->colormap->source[flat[steppy]]; #endif } @@ -889,16 +891,20 @@ void HWR_GetRawFlat(lumpnum_t flatlumpnum, boolean noencoremap) GLMipmap_t *grmip; patch_t *patch; + UINT8 *colormap = colormaps; + if (flatlumpnum == LUMPERROR) return; patch = HWR_GetCachedGLPatch(flatlumpnum); grmip = ((GLPatch_t *)Patch_AllocateHardwarePatch(patch))->mipmap; - grmip->colormap = colormaps; - if (!noencoremap && encoremap) - grmip->colormap += COLORMAP_REMAPOFFSET; + colormap += COLORMAP_REMAPOFFSET; + + grmip->colormap = Z_Calloc(sizeof(*grmip->colormap), PU_HWRPATCHCOLMIPMAP, NULL); + grmip->colormap->source = colormap; + M_Memcpy(grmip->colormap->data, colormap, 256 * sizeof(UINT8)); if (!grmip->downloaded && !grmip->data) HWR_CacheFlat(grmip, flatlumpnum); diff --git a/src/hardware/hw_defs.h b/src/hardware/hw_defs.h index 6474ab5fe..ecb61d4e2 100644 --- a/src/hardware/hw_defs.h +++ b/src/hardware/hw_defs.h @@ -218,9 +218,10 @@ enum EPolyFlags PF_Subtractive = 0x00000020, // Subtractive color blending PF_ReverseSubtract = 0x00000040, // Reverse subtract, used in wall splats (decals) PF_Multiplicative = 0x00000080, // Multiplicative color blending + PF_Invert = 0x00000100, // Polygon inverts the colours of what it's in front of PF_Fog = 0x20000000, // Fog blocks PF_NoAlphaTest = 0x40000000, // Disables alpha testing - PF_Blending = (PF_Masked|PF_Translucent|PF_Environment|PF_Additive|PF_AdditiveSource|PF_Subtractive|PF_ReverseSubtract|PF_Multiplicative|PF_Fog) & ~PF_NoAlphaTest, + PF_Blending = (PF_Masked|PF_Translucent|PF_Environment|PF_Additive|PF_AdditiveSource|PF_Subtractive|PF_ReverseSubtract|PF_Multiplicative|PF_Invert|PF_Fog) & ~PF_NoAlphaTest, // other flag bits PF_Occlude = 0x00000100, // Updates the depth buffer diff --git a/src/hardware/hw_draw.c b/src/hardware/hw_draw.c index bf678980e..9c43cf51c 100644 --- a/src/hardware/hw_draw.c +++ b/src/hardware/hw_draw.c @@ -274,7 +274,7 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p FSurfaceInfo Surf; Surf.PolyColor.s.red = Surf.PolyColor.s.green = Surf.PolyColor.s.blue = 0xff; if (alphalevel == 10) { flags &= ~PF_Translucent; flags |= PF_Additive; } - else if (alphalevel == 11) { flags &= ~PF_Translucent; flags |= PF_Substractive; } + else if (alphalevel == 11) { flags &= ~PF_Translucent; flags |= PF_Subtractive; } else if (alphalevel == 13) Surf.PolyColor.s.alpha = softwaretranstogl_lo[st_translucency]; else if (alphalevel == 14) Surf.PolyColor.s.alpha = softwaretranstogl[st_translucency]; else if (alphalevel == 15) Surf.PolyColor.s.alpha = softwaretranstogl_hi[st_translucency]; @@ -433,7 +433,7 @@ void HWR_DrawCroppedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale, FSurfaceInfo Surf; Surf.PolyColor.s.red = Surf.PolyColor.s.green = Surf.PolyColor.s.blue = 0xff; if (alphalevel == 10) { flags &= ~PF_Translucent; flags |= PF_Additive; } - else if (alphalevel == 11) { flags &= ~PF_Translucent; flags |= PF_Substractive; } + else if (alphalevel == 11) { flags &= ~PF_Translucent; flags |= PF_Subtractive; } else if (alphalevel == 13) Surf.PolyColor.s.alpha = softwaretranstogl_lo[st_translucency]; else if (alphalevel == 14) Surf.PolyColor.s.alpha = softwaretranstogl[st_translucency]; else if (alphalevel == 15) Surf.PolyColor.s.alpha = softwaretranstogl_hi[st_translucency]; diff --git a/src/hardware/hw_drv.h b/src/hardware/hw_drv.h index e7dfa2b9a..b48d39b9c 100644 --- a/src/hardware/hw_drv.h +++ b/src/hardware/hw_drv.h @@ -51,7 +51,7 @@ EXPORT void HWRAPI(ClearMipMapCache) (void); EXPORT void HWRAPI(SetSpecialState) (hwdspecialstate_t IdState, INT32 Value); //Hurdler: added for new development -EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, INT32 duration, INT32 tics, INT32 nextFrameIndex, FTransform *pos, float scale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface, FBITFIELD blendmode); +EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, INT32 duration, INT32 tics, INT32 nextFrameIndex, FTransform *pos, float scale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface); EXPORT void HWRAPI(CreateModelVBOs) (model_t *model); EXPORT void HWRAPI(SetTransform) (FTransform *stransform); EXPORT INT32 HWRAPI(GetTextureUsed) (void); diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 8e11422fe..b5639de9b 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -562,7 +562,7 @@ static void HWR_RenderPlane(subsector_t *subsector, extrasubsector_t *xsub, bool HWR_Lighting(&Surf, lightlevel, planecolormap); - if (PolyFlags & (PF_Translucent|PF_Additive|PF_Substractive|PF_Fog)) + if (PolyFlags & (PF_Translucent|PF_Additive|PF_Subtractive|PF_Fog)) { Surf.PolyColor.s.alpha = (UINT8)alpha; PolyFlags |= PF_Modulated; @@ -972,7 +972,7 @@ static void HWR_SplitWall(sector_t *sector, FOutVector *wallVerts, INT32 texnum, if (blendmode & PF_Fog) HWR_AddTransparentWall(wallVerts, Surf, texnum, blendmode, true, lightnum, colormap); - else if (blendmode & (PF_Translucent|PF_Additive|PF_Substractive|PF_Environment)) + else if (blendmode & (PF_Translucent|PF_Additive|PF_Subtractive|PF_Environment)) HWR_AddTransparentWall(wallVerts, Surf, texnum, blendmode, false, lightnum, colormap); else HWR_ProjectWall(wallVerts, Surf, blendmode, lightnum, colormap); @@ -1001,7 +1001,7 @@ static void HWR_SplitWall(sector_t *sector, FOutVector *wallVerts, INT32 texnum, if (blendmode & PF_Fog) HWR_AddTransparentWall(wallVerts, Surf, texnum, blendmode, true, lightnum, colormap); - else if (blendmode & (PF_Translucent|PF_Additive|PF_Substractive|PF_Environment)) + else if (blendmode & (PF_Translucent|PF_Additive|PF_Subtractive|PF_Environment)) HWR_AddTransparentWall(wallVerts, Surf, texnum, blendmode, false, lightnum, colormap); else HWR_ProjectWall(wallVerts, Surf, blendmode, lightnum, colormap); @@ -1760,7 +1760,7 @@ static void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom else if (rover->alpha == FFLOOR_ALPHA_SPECIAL_ADDITIVE) blendmode = PF_Additive; else if (rover->alpha == FFLOOR_ALPHA_SPECIAL_SUBTRACTIVE) - blendmode = PF_Substractive; + blendmode = PF_Subtractive; } if (gl_frontsector->numlights) @@ -1879,7 +1879,7 @@ static void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom else if (rover->alpha == FFLOOR_ALPHA_SPECIAL_ADDITIVE) blendmode = PF_Additive; else if (rover->alpha == FFLOOR_ALPHA_SPECIAL_SUBTRACTIVE) - blendmode = PF_Substractive; + blendmode = PF_Subtractive; } if (gl_backsector->numlights) @@ -3159,7 +3159,7 @@ static void HWR_Subsector(size_t num) if (rover->alpha == FFLOOR_ALPHA_SPECIAL_ADDITIVE) blendmode = PF_Additive; else if (rover->alpha == FFLOOR_ALPHA_SPECIAL_SUBTRACTIVE) - blendmode = PF_Substractive; + blendmode = PF_Subtractive; light = R_GetPlaneLight(gl_frontsector, centerHeight, dup_viewz < cullHeight ? true : false); @@ -3212,7 +3212,7 @@ static void HWR_Subsector(size_t num) if (rover->alpha == FFLOOR_ALPHA_SPECIAL_ADDITIVE) blendmode = PF_Additive; else if (rover->alpha == FFLOOR_ALPHA_SPECIAL_SUBTRACTIVE) - blendmode = PF_Substractive; + blendmode = PF_Subtractive; light = R_GetPlaneLight(gl_frontsector, centerHeight, dup_viewz < cullHeight ? true : false); @@ -3788,7 +3788,6 @@ static void HWR_SplitSprite(gl_vissprite_t *spr) boolean use_linkdraw_hack = false; boolean splat = R_ThingIsFloorSprite(spr->mobj); UINT8 alpha; - UINT8 brightmode = 0; INT32 i; float realtop, realbot, top, bot; @@ -4402,36 +4401,27 @@ static inline void HWR_DrawPrecipitationSprite(gl_vissprite_t *spr) { sector_t *sector = spr->mobj->subsector->sector; UINT8 lightlevel = 255; - UINT8 brightmode = 0; extracolormap_t *colormap = sector->extra_colormap; - if (spr->mobj->frame & FF_FULLBRIGHT) - brightmode = 1; - else if (spr->mobj->frame & FF_SEMIBRIGHT) - brightmode = 2; - if (sector->numlights) { // Always use the light at the top instead of whatever I was doing before INT32 light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); - if (brightmode != 1) - lightlevel = *sector->lightlist[light].lightlevel; + lightlevel = *sector->lightlist[light].lightlevel; if (*sector->lightlist[light].extra_colormap) colormap = *sector->lightlist[light].extra_colormap; } else { - if (brightmode != 1) - lightlevel = sector->lightlevel; + lightlevel = sector->lightlevel; if (sector->extra_colormap) colormap = sector->extra_colormap; } - if (brightmode == 2) - lightlevel = 128 + (lightlevel>>1); + //lightlevel = 128 + (lightlevel>>1); HWR_Lighting(&Surf, lightlevel, colormap); } diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 78b1dda13..2aadf82dd 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1319,23 +1319,6 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) sector_t *sector = spr->mobj->subsector->sector; UINT8 lightlevel = 255; extracolormap_t *colormap = NULL; - UINT8 brightmode = 0; - - - if (spr->mobj->drawflags & MFD_BRIGHTMASK) - { - if (spr->mobj->drawflags & MFD_FULLBRIGHT) - brightmode = 1; - else if (spr->mobj->drawflags & MFD_SEMIBRIGHT) - brightmode = 2; - } - else - { - if (spr->mobj->frame & FF_FULLBRIGHT) - brightmode = 1; - else if (spr->mobj->frame & FF_SEMIBRIGHT) - brightmode = 2; - } if (sector->numlights) { @@ -1343,23 +1326,20 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before - if (brightmode != 1) - lightlevel = *sector->lightlist[light].lightlevel; + lightlevel = *sector->lightlist[light].lightlevel; if (*sector->lightlist[light].extra_colormap) colormap = *sector->lightlist[light].extra_colormap; } else { - if (brightmode != 1) - lightlevel = sector->lightlevel; + lightlevel = sector->lightlevel; if (sector->extra_colormap) colormap = sector->extra_colormap; } - if (brightmode == 2) - lightlevel = 128 + (lightlevel>>1); + //lightlevel = 128 + (lightlevel>>1); HWR_Lighting(&Surf, lightlevel, colormap); } @@ -1384,7 +1364,6 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) spriteframe_t *sprframe; INT32 mod; float finalscale; - FBITFIELD blendmode = PF_Masked; // hitlag vibrating if (spr->mobj->hitlag > 0) @@ -1405,13 +1384,11 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) //if (tics > durs) //durs = tics; - if (spr->mobj->drawflags & MFD_TRANSMASK) - blendmode = HWR_SurfaceBlend(spr->mobj->blendmode, (spr->mobj->drawflags & MFD_TRANSMASK)>>MFD_TRANSSHIFT, &Surf); - else if (spr->mobj->frame & FF_TRANSMASK) - blendmode = HWR_SurfaceBlend(spr->mobj->blendmode, (spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf); + if (spr->mobj->frame & FF_TRANSMASK) + Surf.PolyFlags = HWR_SurfaceBlend(spr->mobj->blendmode, (spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf); else { - Surf.PolyColor.s.alpha = (spr->mobj->flags2 & MF2_SHADOW) ? 0x40 : 0xff; + Surf.PolyColor.s.alpha = 0xff; Surf.PolyFlags = HWR_GetBlendModeFlag(spr->mobj->blendmode); } @@ -1660,7 +1637,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) p.mirror = atransform.mirror; HWD.pfnSetShader(SHADER_MODEL); // model shader - HWD.pfnDrawModel(md2->model, frame, durs, tics, nextFrame, &p, finalscale, flip, hflip, &Surf, blendmode); + HWD.pfnDrawModel(md2->model, frame, durs, tics, nextFrame, &p, finalscale, flip, hflip, &Surf); } return true; diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 73a186f85..78c0d0369 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -2691,7 +2691,7 @@ EXPORT void HWRAPI(CreateModelVBOs) (model_t *model) #define BUFFER_OFFSET(i) ((void*)(i)) -static void DrawModelEx(model_t *model, INT32 frameIndex, INT32 duration, INT32 tics, INT32 nextFrameIndex, FTransform *pos, float scale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface, FBITFIELD blendmode) +static void DrawModelEx(model_t *model, INT32 frameIndex, INT32 duration, INT32 tics, INT32 nextFrameIndex, FTransform *pos, float scale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface) { static GLRGBAFloat poly = {0,0,0,0}; static GLRGBAFloat tint = {0,0,0,0}; @@ -2976,9 +2976,9 @@ static void DrawModelEx(model_t *model, INT32 frameIndex, INT32 duration, INT32 // -----------------+ // HWRAPI DrawModel : Draw a model // -----------------+ -EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, INT32 duration, INT32 tics, INT32 nextFrameIndex, FTransform *pos, float scale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface, FBITFIELD blendmode) +EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, INT32 duration, INT32 tics, INT32 nextFrameIndex, FTransform *pos, float scale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface) { - DrawModelEx(model, frameIndex, duration, tics, nextFrameIndex, pos, scale, flipped, hflipped, Surface, blendmode); + DrawModelEx(model, frameIndex, duration, tics, nextFrameIndex, pos, scale, flipped, hflipped, Surface); } // -----------------+