diff --git a/src/am_map.cpp b/src/am_map.cpp index 9487693c6..7e6e7546d 100644 --- a/src/am_map.cpp +++ b/src/am_map.cpp @@ -2132,7 +2132,7 @@ void AM_drawSubsectors() { F3DFloor *rover = sec->e->XFloor.ffloors[i]; if (!(rover->flags & FF_EXISTS)) continue; - if (rover->flags & FF_FOG) continue; + if (rover->flags & (FF_FOG|FF_THISINSIDE)) continue; if (!(rover->flags & FF_RENDERPLANES)) continue; if (rover->alpha == 0) continue; double roverz = rover->top.plane->ZatPoint(secx, secy); @@ -2339,6 +2339,7 @@ bool AM_Check3DFloors(line_t *line) for(unsigned i=0;iflags & FF_THISINSIDE) continue; if (!(rover->flags & FF_EXISTS)) continue; if (rover->alpha == 0) continue; realfrontcount++; @@ -2347,6 +2348,7 @@ bool AM_Check3DFloors(line_t *line) for(unsigned i=0;iflags & FF_THISINSIDE) continue; if (!(rover->flags & FF_EXISTS)) continue; if (rover->alpha == 0) continue; realbackcount++; @@ -2357,6 +2359,7 @@ bool AM_Check3DFloors(line_t *line) for(unsigned i=0;iflags & FF_THISINSIDE) continue; // only relevant for software rendering. if (!(rover->flags & FF_EXISTS)) continue; if (rover->alpha == 0) continue; @@ -2364,6 +2367,7 @@ bool AM_Check3DFloors(line_t *line) for(unsigned j=0;jflags & FF_THISINSIDE) continue; // only relevant for software rendering. if (!(rover2->flags & FF_EXISTS)) continue; if (rover2->alpha == 0) continue; if (rover->model == rover2->model && rover->flags == rover2->flags) diff --git a/src/d_main.cpp b/src/d_main.cpp index 253ea6b8a..1d26efce3 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -703,13 +703,6 @@ void D_Display () // [RH] change the screen mode if needed if (setmodeneeded) { - int oldrenderer; - extern int currentrenderer; - EXTERN_CVAR(Int, vid_renderer) - oldrenderer = vid_renderer; // [SP] Save pending vid_renderer setting (hack) - if (currentrenderer != vid_renderer) - vid_renderer = currentrenderer; - // Change screen mode. if (Video->SetResolution (NewWidth, NewHeight, NewBits)) { @@ -728,7 +721,6 @@ void D_Display () // Reset the mouse cursor in case the bit depth changed vid_cursor.Callback(); } - vid_renderer = oldrenderer; // [SP] Restore pending vid_renderer setting } // change the view size if needed diff --git a/src/d_stats.cpp b/src/d_stats.cpp index d607a8a5b..8809ae494 100644 --- a/src/d_stats.cpp +++ b/src/d_stats.cpp @@ -36,7 +36,6 @@ extern int sys_ostype; #include "version.h" #include "v_video.h" -extern int currentrenderer; CVAR(Int, sys_statsenabled, -1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOSET) CVAR(String, sys_statshost, "gzstats.drdteam.org", CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOSET) CVAR(Int, sys_statsport, 80, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOSET) @@ -261,14 +260,7 @@ static void D_DoHTTPRequest(const char *request) { if (I_HTTPRequest(request)) { - if (currentrenderer == 0) - { - cvar_forceset("sentstats_swr_done", CHECKVERSIONSTR); - } - else - { - cvar_forceset("sentstats_hwr_done", CHECKVERSIONSTR); - } + cvar_forceset("sentstats_hwr_done", CHECKVERSIONSTR); } } @@ -284,12 +276,11 @@ void D_DoAnonStats() done = true; // Do not repeat if already sent. - if (currentrenderer == 0 && sentstats_swr_done >= CHECKVERSION) return; - if (currentrenderer == 1 && sentstats_hwr_done >= CHECKVERSION) return; + if (sentstats_hwr_done >= CHECKVERSION) return; static char requeststring[1024]; mysnprintf(requeststring, sizeof requeststring, "GET /stats.py?render=%i&cores=%i&os=%i&renderconfig=%i HTTP/1.1\nHost: %s\nConnection: close\nUser-Agent: %s %s\n\n", - GetRenderInfo(), GetCoreInfo(), GetOSVersion(), currentrenderer, sys_statshost.GetHumanString(), GAMENAME, VERSIONSTR); + GetRenderInfo(), GetCoreInfo(), GetOSVersion(), V_IsHardwareRenderer(), sys_statshost.GetHumanString(), GAMENAME, VERSIONSTR); DPrintf(DMSG_NOTIFY, "Sending %s", requeststring); std::thread t1(D_DoHTTPRequest, requeststring); t1.detach(); diff --git a/src/g_shared/a_dynlight.cpp b/src/g_shared/a_dynlight.cpp index 7f23f871e..69c798fd2 100644 --- a/src/g_shared/a_dynlight.cpp +++ b/src/g_shared/a_dynlight.cpp @@ -76,8 +76,6 @@ #include "gl/system//gl_interface.h" #include "vm.h" -extern int currentrenderer; - CUSTOM_CVAR (Bool, gl_lights, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { @@ -181,12 +179,6 @@ void ADynamicLight::BeginPlay() specialf1 = DAngle(double(SpawnAngle)).Normalized360().Degrees; visibletoplayer = true; - - if (currentrenderer == 1 && gl.legacyMode && (lightflags & LF_ATTENUATE)) - { - args[LIGHT_INTENSITY] = args[LIGHT_INTENSITY] * 2 / 3; - args[LIGHT_SECONDARY_INTENSITY] = args[LIGHT_SECONDARY_INTENSITY] * 2 / 3; - } } //========================================================================== diff --git a/src/gl/compatibility/gl_20.cpp b/src/gl/compatibility/gl_20.cpp index ae8037d29..0a6a743e0 100644 --- a/src/gl/compatibility/gl_20.cpp +++ b/src/gl/compatibility/gl_20.cpp @@ -406,6 +406,12 @@ bool gl_SetupLight(int group, Plane & p, ADynamicLight * light, FVector3 & nearP float dist = fabsf(p.DistToPoint(lpos.X, lpos.Z, lpos.Y)); float radius = light->GetRadius(); + if (V_IsHardwareRenderer() && gl.legacyMode && (light->lightflags & LF_ATTENUATE)) + { + radius *= 0.66f; + } + + if (radius <= 0.f) return false; if (dist > radius) return false; if (checkside && gl_lights_checkside && p.PointOnSide(lpos.X, lpos.Z, lpos.Y)) diff --git a/src/gl/data/gl_vertexbuffer.cpp b/src/gl/data/gl_vertexbuffer.cpp index d40564386..8e9ab5c59 100644 --- a/src/gl/data/gl_vertexbuffer.cpp +++ b/src/gl/data/gl_vertexbuffer.cpp @@ -298,7 +298,7 @@ static F3DFloor *Find3DFloor(sector_t *target, sector_t *model) for(unsigned i=0; ie->XFloor.ffloors.Size(); i++) { F3DFloor *ffloor = target->e->XFloor.ffloors[i]; - if (ffloor->model == model) return ffloor; + if (ffloor->model == model && !(ffloor->flags & FF_THISINSIDE)) return ffloor; } return NULL; } diff --git a/src/gl/renderer/gl_renderer.cpp b/src/gl/renderer/gl_renderer.cpp index 0a29edf9f..74100cc80 100644 --- a/src/gl/renderer/gl_renderer.cpp +++ b/src/gl/renderer/gl_renderer.cpp @@ -77,7 +77,6 @@ EXTERN_CVAR(Int, screenblocks) EXTERN_CVAR(Bool, cl_capfps) EXTERN_CVAR(Float, underwater_fade_scalar) -EXTERN_CVAR(Bool, swtruecolor) CVAR(Bool, gl_scale_viewport, true, CVAR_ARCHIVE); extern bool NoInterpolateView; @@ -427,14 +426,13 @@ void FGLRenderer::EndOffscreen() // renders the view // //----------------------------------------------------------------------------- -extern int currentrenderer; void FGLRenderer::RenderView(player_t* player) { gl_RenderState.SetVertexBuffer(mVBO); mVBO->Reset(); - if (currentrenderer == 0) + if (!V_IsHardwareRenderer()) { if (swdrawer == nullptr) swdrawer = new SWSceneDrawer; swdrawer->RenderView(player); diff --git a/src/gl/scene/gl_sprite.cpp b/src/gl/scene/gl_sprite.cpp index 55c675f74..939a109f7 100644 --- a/src/gl/scene/gl_sprite.cpp +++ b/src/gl/scene/gl_sprite.cpp @@ -597,6 +597,7 @@ void GLSprite::PerformSpriteClipAdjustment(AActor *thing, const DVector2 &thingp for (unsigned int i = 0; i < x.ffloors.Size(); i++) { F3DFloor * ff = x.ffloors[i]; + if (ff->flags & FF_THISINSIDE) continue; // only relevant for software rendering. float floorh = ff->top.plane->ZatPoint(thingpos); float ceilingh = ff->bottom.plane->ZatPoint(thingpos); if (floorh == thing->floorz) diff --git a/src/gl/scene/gl_swscene.cpp b/src/gl/scene/gl_swscene.cpp index 248016c45..7ee4766a4 100644 --- a/src/gl/scene/gl_swscene.cpp +++ b/src/gl/scene/gl_swscene.cpp @@ -43,7 +43,6 @@ int BaseBlendR, BaseBlendG, BaseBlendB; float BaseBlendA; -EXTERN_CVAR(Bool, swtruecolor) // using FDummyTexture as base because that implements the required software renderer functions. @@ -103,13 +102,13 @@ SWSceneDrawer::~SWSceneDrawer() void SWSceneDrawer::RenderView(player_t *player) { - DCanvas buffer(screen->GetWidth(), screen->GetHeight(), swtruecolor); - if (FBTexture == nullptr || FBTexture->hwtex == nullptr || FBTexture->GetWidth() != screen->GetWidth() || FBTexture->GetHeight() != screen->GetHeight() || (swtruecolor? 1:0) != FBTexture->WidthBits) + DCanvas buffer(screen->GetWidth(), screen->GetHeight(), V_IsTrueColor()); + if (FBTexture == nullptr || FBTexture->hwtex == nullptr || FBTexture->GetWidth() != screen->GetWidth() || FBTexture->GetHeight() != screen->GetHeight() || (V_IsTrueColor() ? 1:0) != FBTexture->WidthBits) { // This manually constructs its own material here. if (FBTexture != nullptr) delete FBTexture; - FBTexture = new FSWSceneTexture(screen->GetWidth(), screen->GetHeight(), swtruecolor); - FBTexture->hwtex->AllocateBuffer(screen->GetWidth(), screen->GetHeight(), swtruecolor ? 4 : 1); + FBTexture = new FSWSceneTexture(screen->GetWidth(), screen->GetHeight(), V_IsTrueColor()); + FBTexture->hwtex->AllocateBuffer(screen->GetWidth(), screen->GetHeight(), V_IsTrueColor() ? 4 : 1); auto mat = FMaterial::ValidateTexture(FBTexture, false); mat->AddTextureLayer(PaletteTexture); } @@ -123,5 +122,5 @@ void SWSceneDrawer::RenderView(player_t *player) screen->Begin2D(false); screen->DrawTexture(FBTexture, 0, 0, DTA_SpecialColormap, map, TAG_DONE); SWRenderer->DrawRemainingPlayerSprites(); - GLRenderer->DrawBlend(r_viewpoint.sector, !!map, swtruecolor, true); + GLRenderer->DrawBlend(r_viewpoint.sector, !!map, V_IsTrueColor(), true); } diff --git a/src/gl/scene/gl_walls.cpp b/src/gl/scene/gl_walls.cpp index b40a3ec4e..b7eb40393 100644 --- a/src/gl/scene/gl_walls.cpp +++ b/src/gl/scene/gl_walls.cpp @@ -1218,6 +1218,7 @@ void GLWall::InverseFloors(seg_t * seg, sector_t * frontsector, for (unsigned int i = 0; i < frontffloors.Size(); i++) { F3DFloor * rover = frontffloors[i]; + if (rover->flags & FF_THISINSIDE) continue; // only relevant for software rendering. if (!(rover->flags&FF_EXISTS)) continue; if (!(rover->flags&FF_RENDERSIDES)) continue; if (!(rover->flags&(FF_INVERTSIDES | FF_ALLSIDES))) continue; @@ -1270,6 +1271,7 @@ void GLWall::ClipFFloors(seg_t * seg, F3DFloor * ffloor, sector_t * frontsector, for (unsigned int i = 0; i < frontffloors.Size(); i++) { F3DFloor * rover = frontffloors[i]; + if (rover->flags & FF_THISINSIDE) continue; // only relevant for software rendering. if (!(rover->flags&FF_EXISTS)) continue; if (!(rover->flags&FF_RENDERSIDES)) continue; if ((rover->flags&(FF_SWIMMABLE | FF_TRANSLUCENT)) != flags) continue; @@ -1369,6 +1371,7 @@ void GLWall::DoFFloorBlocks(seg_t * seg, sector_t * frontsector, sector_t * back for (unsigned int i = 0; i < backffloors.Size(); i++) { F3DFloor * rover = backffloors[i]; + if (rover->flags & FF_THISINSIDE) continue; // only relevant for software rendering. if (!(rover->flags&FF_EXISTS)) continue; if (!(rover->flags&FF_RENDERSIDES) || (rover->flags&FF_INVERTSIDES)) continue; diff --git a/src/gl/system/gl_framebuffer.cpp b/src/gl/system/gl_framebuffer.cpp index c51bf96f9..1a9725656 100644 --- a/src/gl/system/gl_framebuffer.cpp +++ b/src/gl/system/gl_framebuffer.cpp @@ -195,13 +195,13 @@ void OpenGLFrameBuffer::Update() // // //=========================================================================== -extern int currentrenderer; void OpenGLFrameBuffer::RenderTextureView(FCanvasTexture *tex, AActor *Viewpoint, double FOV) { - if (currentrenderer == 0) + if (!V_IsHardwareRenderer()) + { Super::RenderTextureView(tex, Viewpoint, FOV); - + } else if (GLRenderer != nullptr) { GLRenderer->RenderTextureView(tex, Viewpoint, FOV); @@ -217,7 +217,7 @@ void OpenGLFrameBuffer::RenderTextureView(FCanvasTexture *tex, AActor *Viewpoint void OpenGLFrameBuffer::WriteSavePic(player_t *player, FileWriter *file, int width, int height) { - if (currentrenderer == 0) + if (!V_IsHardwareRenderer()) Super::WriteSavePic(player, file, width, height); if (GLRenderer != nullptr) @@ -249,7 +249,8 @@ EXTERN_CVAR(Int, gl_tonemap) uint32_t OpenGLFrameBuffer::GetCaps() { - if (currentrenderer == 0) return Super::GetCaps(); + if (!V_IsHardwareRenderer()) + return Super::GetCaps(); // describe our basic feature set ActorRenderFeatureFlags FlagSet = RFF_FLATSPRITES | RFF_MODELS | RFF_SLOPE3DFLOORS | diff --git a/src/gl/system/gl_interface.cpp b/src/gl/system/gl_interface.cpp index e1102de92..412d96352 100644 --- a/src/gl/system/gl_interface.cpp +++ b/src/gl/system/gl_interface.cpp @@ -44,7 +44,6 @@ RenderContext gl; static double realglversion; // this is public so the statistics code can access it. EXTERN_CVAR(Bool, gl_legacy_mode) -extern int currentrenderer; CVAR(Bool, gl_riskymodernpath, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) //========================================================================== @@ -211,11 +210,7 @@ void gl_LoadExtensions() // The minimum requirement for the modern render path is GL 3.3. // Although some GL 3.1 or 3.2 solutions may theoretically work they are usually too broken or too slow. - // unless, of course, we're simply using this as a software backend... - float minmodernpath = 3.3f; - if (gl_riskymodernpath) - minmodernpath = 3.1f; - if ((gl_version < minmodernpath && (currentrenderer==1)) || gl_version < 3.0f) + if (gl_version < 3.3f) { gl.legacyMode = true; gl.lightmethod = LM_LEGACY; diff --git a/src/p_3dfloors.cpp b/src/p_3dfloors.cpp index 2ad374166..376a1b060 100644 --- a/src/p_3dfloors.cpp +++ b/src/p_3dfloors.cpp @@ -50,8 +50,6 @@ #include "g_levellocals.h" #include "actorinlines.h" -extern int currentrenderer; - //========================================================================== // // 3D Floors @@ -197,7 +195,7 @@ static void P_Add3DFloor(sector_t* sec, sector_t* sec2, line_t* master, int flag // kg3D - software renderer only hack // this is really required because of ceilingclip and floorclip - if((currentrenderer == 0) && (flags & FF_BOTHPLANES)) + if(flags & FF_BOTHPLANES) { P_Add3DFloor(sec, sec2, master, FF_EXISTS | FF_THISINSIDE | FF_RENDERPLANES | FF_NOSHADE | FF_SEETHROUGH | FF_SHOOTTHROUGH | (flags & (FF_INVERTSECTOR | FF_TRANSLUCENT | FF_ADDITIVETRANS)), alpha); diff --git a/src/p_setup.cpp b/src/p_setup.cpp index bafa30a9a..33fff756a 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -3427,7 +3427,6 @@ void P_GetPolySpots (MapData * map, TArray &spots, TAr // Preloads all relevant graphics for the level. // //=========================================================================== -extern int currentrenderer; void gl_PrecacheTexture(uint8_t *texhitlist, TMap &actorhitlist); static void P_PrecacheLevel() @@ -3504,7 +3503,7 @@ static void P_PrecacheLevel() } // This is just a temporary solution, until the hardware renderer's texture manager is in a better state. - if (currentrenderer == 0) + if (!V_IsHardwareRenderer()) SWRenderer->Precache(hitlist, actorhitlist); else gl_PrecacheTexture(hitlist, actorhitlist); diff --git a/src/p_user.cpp b/src/p_user.cpp index 7bf85b4a4..6ec5b629f 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -731,9 +731,7 @@ bool player_t::GetPainFlash(FName type, PalEntry *color) const //=========================================================================== EXTERN_CVAR(Float, maxviewpitch) -EXTERN_CVAR(Bool, r_polyrenderer) EXTERN_CVAR(Bool, cl_oldfreelooklimit); -extern int currentrenderer; static int GetSoftPitch(bool down) @@ -749,7 +747,7 @@ void player_t::SendPitchLimits() const { int uppitch, downpitch; - if (currentrenderer == 0 && !r_polyrenderer) + if (V_IsSoftwareRenderer()) { uppitch = GetSoftPitch(false); downpitch = GetSoftPitch(true); diff --git a/src/polyrenderer/drawers/screen_triangle.cpp b/src/polyrenderer/drawers/screen_triangle.cpp index 37a7f843b..4982c1be6 100644 --- a/src/polyrenderer/drawers/screen_triangle.cpp +++ b/src/polyrenderer/drawers/screen_triangle.cpp @@ -1071,11 +1071,10 @@ void TriangleBlock::DepthWrite(const TriDrawTriangleArgs *args) #endif -EXTERN_CVAR(Bool, r_polyrenderer) void ScreenTriangle::Draw(const TriDrawTriangleArgs *args, WorkerThreadData *thread) { - if (r_polyrenderer) + if (V_IsPolyRenderer()) { TriangleBlock block(args, thread); block.Render(); diff --git a/src/posix/cocoa/i_video.mm b/src/posix/cocoa/i_video.mm index 3d0c0c92d..ed20a6ca3 100644 --- a/src/posix/cocoa/i_video.mm +++ b/src/posix/cocoa/i_video.mm @@ -102,26 +102,10 @@ DFrameBuffer *CreateGLSWFrameBuffer(int width, int height, bool bgra, bool fullscreen); -extern int currentrenderer; - EXTERN_CVAR(Bool, ticker ) EXTERN_CVAR(Bool, vid_vsync) EXTERN_CVAR(Bool, vid_hidpi) -CUSTOM_CVAR(Bool, swtruecolor, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) -{ - // Strictly speaking this doesn't require a mode switch, but it is the easiest - // way to force a CreateFramebuffer call without a lot of refactoring. - if (currentrenderer == 0) - { - extern int NewWidth, NewHeight, NewBits, DisplayBits; - NewWidth = screen->VideoWidth; - NewHeight = screen->VideoHeight; - NewBits = DisplayBits; - setmodeneeded = true; - } -} - CUSTOM_CVAR(Bool, fullscreen, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) { extern int NewWidth, NewHeight, NewBits, DisplayBits; @@ -386,7 +370,7 @@ CocoaVideo::CocoaVideo() // Create OpenGL pixel format NSOpenGLPixelFormatAttribute defaultProfile = NSOpenGLProfileVersion3_2Core; - if (1 == vid_renderer && NSAppKitVersionNumber < AppKit10_9) + if (NSAppKitVersionNumber < AppKit10_9) { // There is no support for OpenGL 3.3 before Mavericks defaultProfile = NSOpenGLProfileVersionLegacy; @@ -821,7 +805,7 @@ void I_InitGraphics() DFrameBuffer* I_SetMode(int &width, int &height, DFrameBuffer* old) { - return Video->CreateFrameBuffer(width, height, swtruecolor, fullscreen, old); + return Video->CreateFrameBuffer(width, height, false, fullscreen, old); } bool I_CheckResolution(const int width, const int height, const int bits) diff --git a/src/posix/sdl/hardware.cpp b/src/posix/sdl/hardware.cpp index ca89bd8bf..12bb00c9c 100644 --- a/src/posix/sdl/hardware.cpp +++ b/src/posix/sdl/hardware.cpp @@ -52,7 +52,6 @@ EXTERN_CVAR (Bool, ticker) EXTERN_CVAR (Bool, fullscreen) -EXTERN_CVAR (Bool, swtruecolor) EXTERN_CVAR (Float, vid_winscale) IVideo *Video; @@ -91,7 +90,6 @@ void I_InitGraphics () val.Bool = !!Args->CheckParm ("-devparm"); ticker.SetGenericRepDefault (val, CVAR_Bool); - //currentrenderer = vid_renderer; Video = new SDLGLVideo(0); if (Video == NULL) @@ -121,7 +119,7 @@ DFrameBuffer *I_SetMode (int &width, int &height, DFrameBuffer *old) fs = fullscreen; break; } - DFrameBuffer *res = Video->CreateFrameBuffer (width, height, swtruecolor, fs, old); + DFrameBuffer *res = Video->CreateFrameBuffer (width, height, false, fs, old); /* Right now, CreateFrameBuffer cannot return NULL if (res == NULL) @@ -259,19 +257,6 @@ void I_SetFPSLimit(int limit) extern int NewWidth, NewHeight, NewBits, DisplayBits; -CUSTOM_CVAR(Bool, swtruecolor, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL) -{ - // Strictly speaking this doesn't require a mode switch, but it is the easiest - // way to force a CreateFramebuffer call without a lot of refactoring. - if (currentrenderer == 0) - { - NewWidth = screen->VideoWidth; - NewHeight = screen->VideoHeight; - NewBits = DisplayBits; - setmodeneeded = true; - } -} - CUSTOM_CVAR (Bool, fullscreen, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL) { NewWidth = screen->VideoWidth; diff --git a/src/posix/sdl/sdlglvideo.cpp b/src/posix/sdl/sdlglvideo.cpp index 4fbf1005f..4d2998095 100644 --- a/src/posix/sdl/sdlglvideo.cpp +++ b/src/posix/sdl/sdlglvideo.cpp @@ -67,12 +67,10 @@ // EXTERNAL DATA DECLARATIONS ---------------------------------------------- extern IVideo *Video; -// extern int vid_renderer; EXTERN_CVAR (Float, Gamma) EXTERN_CVAR (Int, vid_adapter) EXTERN_CVAR (Int, vid_displaybits) -EXTERN_CVAR (Int, vid_renderer) EXTERN_CVAR (Int, vid_maxfps) EXTERN_CVAR (Bool, cl_capfps) diff --git a/src/r_data/a_dynlightdata.cpp b/src/r_data/a_dynlightdata.cpp index 24a55ab71..b9c09a690 100644 --- a/src/r_data/a_dynlightdata.cpp +++ b/src/r_data/a_dynlightdata.cpp @@ -154,13 +154,6 @@ void AddLightDefaults(FLightDefaults *defaults) } } - // If the current renderer cannot handle attenuated lights we need to reduce the radius here to account for the far more bright lights this would create. - if (/*!Renderer->CanAttenuate() &&*/ (defaults->GetAttenuate())) - { - defaults->SetArg(LIGHT_INTENSITY, defaults->GetArg(LIGHT_INTENSITY) * 2 / 3); - defaults->SetArg(LIGHT_SECONDARY_INTENSITY, defaults->GetArg(LIGHT_SECONDARY_INTENSITY) * 2 / 3); - } - LightDefaults.Push(defaults); } diff --git a/src/r_utility.cpp b/src/r_utility.cpp index 25dc4adaa..abde8f8ad 100644 --- a/src/r_utility.cpp +++ b/src/r_utility.cpp @@ -398,8 +398,6 @@ subsector_t *R_PointInSubsector (fixed_t x, fixed_t y) // //========================================================================== -extern int currentrenderer; -EXTERN_CVAR(Int, vid_renderer) FRenderer *CreateSWRenderer(); @@ -417,12 +415,6 @@ void R_Init () R_InitTranslationTables (); R_SetViewSize (screenblocks); - currentrenderer = vid_renderer; - if (currentrenderer == 1) - Printf("Renderer: OpenGL\n"); - else - Printf("Renderer: Software on OpenGL\n"); - if (SWRenderer == NULL) { SWRenderer = CreateSWRenderer(); diff --git a/src/swrenderer/drawers/r_draw.cpp b/src/swrenderer/drawers/r_draw.cpp index 3eb63a85f..cf154dd08 100644 --- a/src/swrenderer/drawers/r_draw.cpp +++ b/src/swrenderer/drawers/r_draw.cpp @@ -193,7 +193,7 @@ namespace swrenderer void R_UpdateFuzzPosFrameStart() { - if (r_fuzzscale || r_polyrenderer) + if (r_fuzzscale || V_IsPolyRenderer()) { static int next_random = 0; @@ -207,7 +207,7 @@ namespace swrenderer void R_UpdateFuzzPos(const SpriteDrawerArgs &args) { - if (!r_fuzzscale && !r_polyrenderer) + if (!r_fuzzscale && !V_IsPolyRenderer()) { int yl = MAX(args.FuzzY1(), 1); int yh = MIN(args.FuzzY2(), fuzzviewheight); diff --git a/src/swrenderer/r_swrenderer.cpp b/src/swrenderer/r_swrenderer.cpp index 7bbbe6aae..cce974cde 100644 --- a/src/swrenderer/r_swrenderer.cpp +++ b/src/swrenderer/r_swrenderer.cpp @@ -52,8 +52,6 @@ #include "p_setup.h" #include "g_levellocals.h" -extern int currentrenderer; - // [BB] Use ZDoom's freelook limit for the sotfware renderer. // Note: ZDoom's limit is chosen such that the sky is rendered properly. CUSTOM_CVAR (Bool, cl_oldfreelooklimit, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) @@ -65,20 +63,6 @@ CUSTOM_CVAR (Bool, cl_oldfreelooklimit, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG EXTERN_CVAR(Float, maxviewpitch) // [SP] CVAR from OpenGL Renderer EXTERN_CVAR(Bool, r_drawvoxels) -CUSTOM_CVAR(Bool, r_polyrenderer, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) -{ - if (self == 1 && !hasglnodes) - { - Printf("No GL BSP detected. You must restart the map before rendering will be correct\n"); - } - - if (usergame) - { - // [SP] Update pitch limits to the netgame/gamesim. - players[consoleplayer].SendPitchLimits(); - } -} - using namespace swrenderer; FSoftwareRenderer::FSoftwareRenderer() @@ -96,11 +80,9 @@ FRenderer *CreateSWRenderer() return new FSoftwareRenderer; } -EXTERN_CVAR(Bool, swtruecolor) - void FSoftwareRenderer::PrecacheTexture(FTexture *tex, int cache) { - bool isbgra = swtruecolor; + bool isbgra = V_IsTrueColor(); if (tex != NULL) { @@ -177,7 +159,7 @@ void FSoftwareRenderer::Precache(uint8_t *texhitlist, TMap & void FSoftwareRenderer::RenderView(player_t *player, DCanvas *target) { - if (r_polyrenderer) + if (V_IsPolyRenderer()) { PolyRenderer::Instance()->Viewpoint = r_viewpoint; PolyRenderer::Instance()->Viewwindow = r_viewwindow; @@ -203,7 +185,7 @@ void FSoftwareRenderer::WriteSavePic (player_t *player, FileWriter *file, int wi PalEntry palette[256]; // Take a snapshot of the player's view - if (r_polyrenderer) + if (V_IsPolyRenderer()) { PolyRenderer::Instance()->Viewpoint = r_viewpoint; PolyRenderer::Instance()->Viewwindow = r_viewwindow; @@ -226,7 +208,7 @@ void FSoftwareRenderer::WriteSavePic (player_t *player, FileWriter *file, int wi void FSoftwareRenderer::DrawRemainingPlayerSprites() { - if (!r_polyrenderer) + if (!V_IsPolyRenderer()) { mScene.MainThread()->Viewport->viewpoint = r_viewpoint; mScene.MainThread()->Viewport->viewwindow = r_viewwindow; @@ -247,7 +229,7 @@ void FSoftwareRenderer::DrawRemainingPlayerSprites() void FSoftwareRenderer::OnModeSet () { // This does not work if the SW renderer is not in use. - if (currentrenderer == 0) + if (!V_IsHardwareRenderer()) mScene.ScreenResized(); } @@ -258,9 +240,9 @@ void FSoftwareRenderer::SetClearColor(int color) void FSoftwareRenderer::RenderTextureView (FCanvasTexture *tex, AActor *viewpoint, double fov) { - auto renderTarget = r_polyrenderer ? PolyRenderer::Instance()->RenderTarget : mScene.MainThread()->Viewport->RenderTarget; - auto &cameraViewpoint = r_polyrenderer ? PolyRenderer::Instance()->Viewpoint : mScene.MainThread()->Viewport->viewpoint; - auto &cameraViewwindow = r_polyrenderer ? PolyRenderer::Instance()->Viewwindow : mScene.MainThread()->Viewport->viewwindow; + auto renderTarget = V_IsPolyRenderer() ? PolyRenderer::Instance()->RenderTarget : mScene.MainThread()->Viewport->RenderTarget; + auto &cameraViewpoint = V_IsPolyRenderer() ? PolyRenderer::Instance()->Viewpoint : mScene.MainThread()->Viewport->viewpoint; + auto &cameraViewwindow = V_IsPolyRenderer() ? PolyRenderer::Instance()->Viewwindow : mScene.MainThread()->Viewport->viewwindow; // Grab global state shared with rest of zdoom cameraViewpoint = r_viewpoint; @@ -276,7 +258,7 @@ void FSoftwareRenderer::RenderTextureView (FCanvasTexture *tex, AActor *viewpoin DAngle savedfov = cameraViewpoint.FieldOfView; R_SetFOV (cameraViewpoint, fov); - if (r_polyrenderer) + if (V_IsPolyRenderer()) PolyRenderer::Instance()->RenderViewToCanvas(viewpoint, Canvas, 0, 0, tex->GetWidth(), tex->GetHeight(), tex->bFirstUpdate); else mScene.RenderViewToCanvas(viewpoint, Canvas, 0, 0, tex->GetWidth(), tex->GetHeight(), tex->bFirstUpdate); diff --git a/src/swrenderer/scene/r_scene.cpp b/src/swrenderer/scene/r_scene.cpp index 9a4bbb995..f11b6f486 100644 --- a/src/swrenderer/scene/r_scene.cpp +++ b/src/swrenderer/scene/r_scene.cpp @@ -64,7 +64,6 @@ void PeekThreadedErrorPane(); #endif EXTERN_CVAR(Int, r_clearbuffer) -EXTERN_CVAR(Bool, swtruecolor) CVAR(Bool, r_scene_multithreaded, false, 0); CVAR(Bool, r_models, false, 0); @@ -368,7 +367,7 @@ namespace swrenderer auto viewport = MainThread()->Viewport.get(); int width = SCREENWIDTH; int height = SCREENHEIGHT; - viewport->RenderTarget = new DCanvas(width, height, swtruecolor); // Some code deeper down needs something valid here, so give it a dummy canvas. + viewport->RenderTarget = new DCanvas(width, height, V_IsTrueColor()); // Some code deeper down needs something valid here, so give it a dummy canvas. float trueratio; ActiveRatio(width, height, &trueratio); viewport->SetViewport(MainThread(), SCREENWIDTH, SCREENHEIGHT, trueratio); diff --git a/src/v_video.cpp b/src/v_video.cpp index b78ab3f54..df7784548 100644 --- a/src/v_video.cpp +++ b/src/v_video.cpp @@ -104,41 +104,24 @@ CUSTOM_CVAR(Int, vid_maxfps, 200, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) } } -int currentrenderer = -1; - -// [ZDoomGL] -CUSTOM_CVAR(Int, vid_renderer, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +CUSTOM_CVAR(Int, vid_rendermode, 4, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { - // 0: Software renderer - // 1: OpenGL renderer - - if (self != currentrenderer) + if (usergame) { - switch (self) - { - case 0: - Printf("Switching to software renderer...\n"); - break; - case 1: - Printf("Switching to OpenGL renderer...\n"); - break; - default: - Printf("Unknown renderer (%d). Falling back to software renderer...\n", (int)vid_renderer); - self = 0; // make sure to actually switch to the software renderer - break; - } + // [SP] Update pitch limits to the netgame/gamesim. + players[consoleplayer].SendPitchLimits(); } - currentrenderer = self; + // No further checks needed. All this changes now is which scene drawer the render backend calls. } + EXTERN_CVAR(Bool, r_blendmethod) int active_con_scale(); FRenderer *SWRenderer; -EXTERN_CVAR (Bool, swtruecolor) EXTERN_CVAR (Bool, fullscreen) #define DBGBREAK assert(0) @@ -964,14 +947,13 @@ void DFrameBuffer::GameRestart() // //========================================================================== -EXTERN_CVAR(Bool, r_polyrenderer) EXTERN_CVAR(Bool, r_drawvoxels) uint32_t DFrameBuffer::GetCaps() { ActorRenderFeatureFlags FlagSet = 0; - if (r_polyrenderer) + if (V_IsPolyRenderer()) FlagSet |= RFF_POLYGONAL | RFF_TILTPITCH | RFF_SLOPE3DFLOORS; else { @@ -980,7 +962,7 @@ uint32_t DFrameBuffer::GetCaps() FlagSet |= RFF_VOXELS; } - if (swtruecolor) + if (V_IsTrueColor()) FlagSet |= RFF_TRUECOLOR; else FlagSet |= RFF_COLORMAP; diff --git a/src/v_video.h b/src/v_video.h index 393ffb891..299694524 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -53,6 +53,29 @@ void V_UpdateModeSize (int width, int height); void V_OutputResized (int width, int height); void V_CalcCleanFacs (int designwidth, int designheight, int realwidth, int realheight, int *cleanx, int *cleany, int *cx1=NULL, int *cx2=NULL); +EXTERN_CVAR(Int, vid_rendermode) + +inline bool V_IsHardwareRenderer() +{ + return vid_rendermode == 4; +} + +inline bool V_IsSoftwareRenderer() +{ + return vid_rendermode < 2; +} + +inline bool V_IsPolyRenderer() +{ + return vid_rendermode == 2 || vid_rendermode == 3; +} + +inline bool V_IsTrueColor() +{ + return vid_rendermode == 1 || vid_rendermode == 3; +} + + class FTexture; struct FColormap; class FileWriter; diff --git a/src/win32/hardware.cpp b/src/win32/hardware.cpp index e6be60788..4c7f43779 100644 --- a/src/win32/hardware.cpp +++ b/src/win32/hardware.cpp @@ -49,7 +49,6 @@ EXTERN_CVAR (Bool, ticker) EXTERN_CVAR (Bool, fullscreen) -EXTERN_CVAR (Bool, swtruecolor) EXTERN_CVAR (Float, vid_winscale) EXTERN_CVAR (Bool, win_borderless) @@ -67,7 +66,6 @@ IVideo *Video; IVideo *gl_CreateVideo(); void I_RestartRenderer(); -extern int currentrenderer; int currentcanvas = -1; int currentgpuswitch = -1; bool changerenderer; @@ -180,7 +178,7 @@ DFrameBuffer *I_SetMode (int &width, int &height, DFrameBuffer *old) } break; } - DFrameBuffer *res = Video->CreateFrameBuffer (width, height, swtruecolor, fs, old); + DFrameBuffer *res = Video->CreateFrameBuffer (width, height, false, fs, old); //* Right now, CreateFrameBuffer cannot return NULL if (res == NULL) @@ -359,19 +357,6 @@ void I_RestoreWindowedPos () extern int NewWidth, NewHeight, NewBits, DisplayBits; -CUSTOM_CVAR(Bool, swtruecolor, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL) -{ - // Strictly speaking this doesn't require a mode switch, but it is the easiest - // way to force a CreateFramebuffer call without a lot of refactoring. - if (currentrenderer == 0) - { - NewWidth = screen->VideoWidth; - NewHeight = screen->VideoHeight; - NewBits = DisplayBits; - setmodeneeded = true; - } -} - CUSTOM_CVAR(Bool, win_borderless, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { // Just reinit the window. Saves a lot of trouble. diff --git a/src/win32/i_system.cpp b/src/win32/i_system.cpp index 35416de78..7b79ad26f 100644 --- a/src/win32/i_system.cpp +++ b/src/win32/i_system.cpp @@ -129,7 +129,6 @@ static void DestroyCustomCursor(); EXTERN_CVAR(String, language); EXTERN_CVAR (Bool, queryiwad); // Used on welcome/IWAD screen. -EXTERN_CVAR (Int, vid_renderer) EXTERN_CVAR (Bool, fullscreen) EXTERN_CVAR (Bool, disableautoload) EXTERN_CVAR (Bool, autoloadlights) @@ -824,7 +823,7 @@ BOOL CALLBACK IWADBoxCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa char szString[256]; // Check the current video settings. - SendDlgItemMessage( hDlg, vid_renderer ? IDC_WELCOME_OPENGL : IDC_WELCOME_SOFTWARE, BM_SETCHECK, BST_CHECKED, 0 ); + //SendDlgItemMessage( hDlg, vid_renderer ? IDC_WELCOME_OPENGL : IDC_WELCOME_SOFTWARE, BM_SETCHECK, BST_CHECKED, 0 ); SendDlgItemMessage( hDlg, IDC_WELCOME_FULLSCREEN, BM_SETCHECK, fullscreen ? BST_CHECKED : BST_UNCHECKED, 0 ); // [SP] This is our's @@ -870,7 +869,6 @@ BOOL CALLBACK IWADBoxCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa { SetQueryIWad(hDlg); // [SP] Upstreamed from Zandronum - vid_renderer = SendDlgItemMessage( hDlg, IDC_WELCOME_OPENGL, BM_GETCHECK, 0, 0 ) == BST_CHECKED; fullscreen = SendDlgItemMessage( hDlg, IDC_WELCOME_FULLSCREEN, BM_GETCHECK, 0, 0 ) == BST_CHECKED; // [SP] This is our's. diff --git a/src/win32/win32gliface.cpp b/src/win32/win32gliface.cpp index 1e138d79b..4a3a09ce7 100644 --- a/src/win32/win32gliface.cpp +++ b/src/win32/win32gliface.cpp @@ -1044,7 +1044,7 @@ Win32GLFrameBuffer::Win32GLFrameBuffer(void *hMonitor, int width, int height, in if (!static_cast(Video)->InitHardware(Window, 0)) { - vid_renderer = 0; + I_FatalError("Unable to initialize OpenGL"); return; } HDC hDC = GetDC(Window); diff --git a/src/win32/win32gliface.h b/src/win32/win32gliface.h index 89485a61a..f7bdfaf12 100644 --- a/src/win32/win32gliface.h +++ b/src/win32/win32gliface.h @@ -14,7 +14,6 @@ EXTERN_CVAR (Color, dimcolor) EXTERN_CVAR(Int, vid_defwidth); EXTERN_CVAR(Int, vid_defheight); -EXTERN_CVAR(Int, vid_renderer); EXTERN_CVAR(Int, vid_adapter); extern IVideo *Video; diff --git a/wadsrc/static/language.enu b/wadsrc/static/language.enu index d7da664e1..348faac9c 100644 --- a/wadsrc/static/language.enu +++ b/wadsrc/static/language.enu @@ -2211,6 +2211,7 @@ RNDMNU_CANVAS = "Software Canvas"; // Video Options VIDMNU_TITLE = "VIDEO MODE"; +VIDMNU_RENDERMODE = "Render Mode"; VIDMNU_FULLSCREEN = "Fullscreen"; VIDMNU_HIDPI = "Retina/HiDPI support"; VIDMNU_BRDLSS = "Borderless Windowed Mode"; @@ -2398,6 +2399,9 @@ OPTVAL_SDL = "SDL"; OPTVAL_COCOA = "Cocoa"; OPTVAL_HWPOLY = "OpenGL-Accelerated"; OPTVAL_SWDOOM = "Doom Software Renderer"; +OPTVAL_SWDOOMTC = "True Color SW Renderer"; +OPTVAL_SWPOLY = "Softpoly Renderer"; +OPTVAL_SWPOLYTC = "True Color Softpoly"; OPTVAL_DEDICATED = "High-Performance"; OPTVAL_INTEGRATED = "Power-Saving"; OPTVAL_VANILLA = "Vanilla"; diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index dcb2c981f..85c77e35d 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -352,7 +352,6 @@ OptionMenu "OptionsMenu" protected Submenu "$OPTMNU_SOUND", "SoundOptions" Submenu "$OPTMNU_DISPLAY", "VideoOptions" Submenu "$OPTMNU_VIDEO", "VideoModeMenu" - Submenu "$OPTMNU_CHANGERENDER", "RendererMenu" StaticText " " SafeCommand "$OPTMNU_DEFAULTS", "reset2defaults" SafeCommand "$OPTMNU_RESETTOSAVED", "reset2saved" @@ -710,7 +709,6 @@ OptionMenu "TrueColorOptions" protected { Title "$TCMNU_TITLE" StaticText " " - //Option "$TCMNU_TRUECOLOR", "swtruecolor", "OnOff" Option "$TCMNU_MINFILTER", "r_minfilter", "OnOff" Option "$TCMNU_MAGFILTER", "r_magfilter", "OnOff" Option "$TCMNU_MIPMAP", "r_mipmap", "OnOff" @@ -1844,30 +1842,13 @@ OptionMenu ModReplayerOptions protected * *=======================================*/ -OptionValue "PolyDoom" +OptionValue "RenderMode" { 0, "$OPTVAL_SWDOOM" - 1, "$OPTVAL_HWPOLY" -} - -OptionValue "D3DGL" -{ - 0, "$OPTVAL_GL" - 1, "$OPTVAL_D3D" -} - -OptionValue "GLD3D" -{ - 0, "$OPTVAL_D3D" - 1, "$OPTVAL_GL" -} - -OptionMenu RendererMenu protected -{ - Title "$RNDMNU_TITLE" - Option "$RNDMNU_RENDERER", "vid_renderer", "PolyDoom" - Option "$RNDMNU_TRUECOLOR", "swtruecolor", "OnOff" - Option "$RNDMNU_POLY", "r_polyrenderer", "OnOff" + 1, "$OPTVAL_SWDOOMTC" + 2, "$OPTVAL_SWPOLY" + 3, "$OPTVAL_SWPOLYTC" + 4, "$OPTVAL_HWPOLY" } /*======================================= @@ -1914,6 +1895,7 @@ OptionMenu VideoModeMenu protected { Title "$VIDMNU_TITLE" + Option "$VIDMNU_RENDERMODE", "vid_rendermode", "RenderMode" Option "$VIDMNU_FULLSCREEN", "fullscreen", "YesNo" IfOption(Mac)