From f22dbc6fdbfdbb3d584d4f4c1546e4f08319aff0 Mon Sep 17 00:00:00 2001 From: terminx Date: Fri, 23 Oct 2015 23:00:21 +0000 Subject: [PATCH] Add r_pr_lighting 2, which disables the hard-coded lights while leaving lights added in maps enabled. This also adds a menu option to control r_pr_lighting. git-svn-id: https://svn.eduke32.com/eduke32@5406 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/build/src/mdsprite.c | 7 ++--- polymer/eduke32/build/src/polymost.c | 2 +- polymer/eduke32/source/actors.c | 45 ++++++++++++++++------------ polymer/eduke32/source/actors.h | 1 + polymer/eduke32/source/menus.c | 32 ++++++++++++++++++-- 5 files changed, 60 insertions(+), 27 deletions(-) diff --git a/polymer/eduke32/build/src/mdsprite.c b/polymer/eduke32/build/src/mdsprite.c index dddef4e43..a816d24be 100644 --- a/polymer/eduke32/build/src/mdsprite.c +++ b/polymer/eduke32/build/src/mdsprite.c @@ -2133,10 +2133,9 @@ static int32_t polymost_md3draw(md3model_t *m, const tspritetype *tspr) if (grhalfxdown10x < 0) { mat[0] = -mat[0]; mat[4] = -mat[4]; mat[8] = -mat[8]; mat[12] = -mat[12]; } //------------ - // Bit 10 is an ugly hack in game.c:G_DoSpriteAnimations() telling md2sprite - // to use Z-buffer hacks to hide overdraw problems with the - // flat-tsprite-on-floor shadows. - // is this still needed? + // TSPR_EXTRA_MDHACK is an ugly hack in game.c:G_DoSpriteAnimations() telling md2sprite + // to use Z-buffer hacks to hide overdraw problems with the flat-tsprite-on-floor shadows, + // also disabling detail, glow, normal, and specular maps. if (tspr->extra&TSPR_EXTRA_MDHACK) { diff --git a/polymer/eduke32/build/src/polymost.c b/polymer/eduke32/build/src/polymost.c index bf4809efd..ff2b9c6c5 100644 --- a/polymer/eduke32/build/src/polymost.c +++ b/polymer/eduke32/build/src/polymost.c @@ -5685,7 +5685,7 @@ void polymost_initosdfuncs(void) #ifdef POLYMER // polymer cvars - { "r_pr_lighting", "enable/disable dynamic lights - restarts renderer", (void *) &pr_lighting, CVAR_BOOL | CVAR_RESTARTVID, 0, 1 }, + { "r_pr_lighting", "enable/disable dynamic lights - restarts renderer", (void *) &pr_lighting, CVAR_INT | CVAR_RESTARTVID, 0, 2 }, { "r_pr_normalmapping", "enable/disable virtual displacement mapping", (void *) &pr_normalmapping, CVAR_BOOL, 0, 1 }, { "r_pr_specularmapping", "enable/disable specular mapping", (void *) &pr_specularmapping, CVAR_BOOL, 0, 1 }, { "r_pr_shadows", "enable/disable dynamic shadows", (void *) &pr_shadows, CVAR_BOOL, 0, 1 }, diff --git a/polymer/eduke32/source/actors.c b/polymer/eduke32/source/actors.c index 96f135594..3612305ab 100644 --- a/polymer/eduke32/source/actors.c +++ b/polymer/eduke32/source/actors.c @@ -784,7 +784,7 @@ void G_AddGameLight(int32_t radius, int32_t srcsprite, int32_t zoffset, int32_t #ifdef POLYMER spritetype *s = &sprite[srcsprite]; - if (getrendermode() != REND_POLYMER) + if (getrendermode() != REND_POLYMER || pr_lighting != 1) return; if (actor[srcsprite].lightptr == NULL) @@ -7949,6 +7949,9 @@ static void A_DoLight(int32_t i) A_DeleteLight(i); } + if (pr_lighting != 1) + return; + for (ii=0; ii<2; ii++) { if (sprite[i].picnum <= 0) // oob safety @@ -8260,6 +8263,27 @@ int32_t A_CheckSwitchTile(int32_t i) return 0; } +void G_RefreshLights(void) +{ +#ifdef POLYMER + if (getrendermode() == REND_POLYMER) + { + int32_t i, k = 0; + + do + { + i = headspritestat[k++]; + + while (i >= 0) + { + A_DoLight(i); + i = nextspritestat[i]; + } + } while (k < MAXSTATUS); + } +#endif +} + void G_MoveWorld(void) { extern double g_moveActorsTime; @@ -8346,24 +8370,7 @@ void G_MoveWorld(void) } while (k < MAXSTATUS); } -#ifdef POLYMER - if (getrendermode() == REND_POLYMER) - { - int32_t i, k = 0; - - do - { - i = headspritestat[k++]; - - while (i >= 0) - { - A_DoLight(i); - i = nextspritestat[i]; - } - } while (k < MAXSTATUS); - } -#endif - + G_RefreshLights(); G_DoSectorAnimations(); G_MoveFX(); //ST 11 } diff --git a/polymer/eduke32/source/actors.h b/polymer/eduke32/source/actors.h index a7bd8e606..37bf9bff7 100644 --- a/polymer/eduke32/source/actors.h +++ b/polymer/eduke32/source/actors.h @@ -314,6 +314,7 @@ void G_AddGameLight(int32_t radius,int32_t srcsprite,int32_t zoff void G_ClearCameraView(DukePlayer_t *ps); void G_DoInterpolations(int32_t smoothratio); void G_MoveWorld(void); +void G_RefreshLights(void); int32_t G_SetInterpolation(int32_t * const posptr); void G_StopInterpolation(int32_t * const posptr); diff --git a/polymer/eduke32/source/menus.c b/polymer/eduke32/source/menus.c index bda3f2c82..d6502967f 100644 --- a/polymer/eduke32/source/menus.c +++ b/polymer/eduke32/source/menus.c @@ -897,6 +897,12 @@ static MenuEntry_t ME_RENDERERSETUP_DETAILTEX = MAKE_MENUENTRY( "Detail textures static MenuOption_t MEO_RENDERERSETUP_MODELS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NoYes, &usemodels ); static MenuEntry_t ME_RENDERERSETUP_MODELS = MAKE_MENUENTRY( "Models:", &MF_BluefontRed, &MEF_SmallOptions, &MEO_RENDERERSETUP_MODELS, Option ); #endif +#ifdef POLYMER +static char *MEOSN_RENDERERSETUP_LIGHTS [] ={ "Off", "Full", "Map only", }; +static MenuOptionSet_t MEOS_RENDERERSETUP_LIGHTS = MAKE_MENUOPTIONSET(MEOSN_RENDERERSETUP_LIGHTS, NULL, 0x2); +static MenuOption_t MEO_RENDERERSETUP_LIGHTS = MAKE_MENUOPTION(&MF_Bluefont, &MEOS_RENDERERSETUP_LIGHTS, &pr_lighting); +static MenuEntry_t ME_RENDERERSETUP_LIGHTS = MAKE_MENUENTRY("Dynamic lights (Polymer)", &MF_BluefontRed, &MEF_SmallOptions, &MEO_RENDERERSETUP_LIGHTS, Option); +#endif #ifdef USE_OPENGL static MenuEntry_t *MEL_RENDERERSETUP[] = { @@ -909,6 +915,10 @@ static MenuEntry_t *MEL_RENDERERSETUP[] = { #endif &ME_Space4, &ME_RENDERERSETUP_MODELS, +#ifdef POLYMER + &ME_Space4, + &ME_RENDERERSETUP_LIGHTS, +#endif }; #endif @@ -1617,6 +1627,9 @@ static void M_PreMenu(MenuID_t cm) break; case MENU_RENDERERSETUP: +#ifdef POLYMER + MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_LIGHTS, getrendermode() != REND_POLYMER); +#endif MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_TEXQUALITY, !usehightile); MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_PRECACHE, !usehightile); #ifndef EDUKE32_GLES @@ -2794,6 +2807,8 @@ static int32_t M_MenuEntryOptionModify(MenuEntry_t *entry, int32_t newOption) static void M_MenuEntryOptionDidModify(MenuEntry_t *entry) { + int domodechange = 0; + if (entry == &ME_GAMESETUP_AIM_AUTO || entry == &ME_GAMESETUP_WEAPSWITCH_PICKUP || entry == &ME_PLAYER_NAME || @@ -2806,10 +2821,21 @@ static void M_MenuEntryOptionDidModify(MenuEntry_t *entry) else if (entry == &ME_RENDERERSETUP_TEXQUALITY) { texcache_invalidate(); - resetvideomode(); - if (setgamemode(fullscreen,xdim,ydim,bpp)) - OSD_Printf("restartvid: Reset failed...\n"); r_downsizevar = r_downsize; + domodechange = 1; + } +#ifdef POLYMER + else if (entry == &ME_RENDERERSETUP_LIGHTS) + domodechange = 1; +#endif + + if (domodechange) + { + resetvideomode(); + if (setgamemode(fullscreen, xdim, ydim, bpp)) + OSD_Printf("restartvid: Reset failed...\n"); + onvideomodechange(ud.config.ScreenBPP>8); + G_RefreshLights(); } #endif }