From 70a09538c51441df4c05f20f806f5991023445cd Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 29 Mar 2019 00:36:04 +0100 Subject: [PATCH] - implemented basics for virtual HUD size and moved some code out of D_Display This doesn't work fully yet. --- src/d_main.cpp | 125 +++++++----------- src/g_statusbar/sbar.h | 2 + src/g_statusbar/sbarinfo.cpp | 1 - src/g_statusbar/shared_sbar.cpp | 51 +++++++ src/r_utility.cpp | 2 +- src/rendering/gl/renderer/gl_renderer.cpp | 1 - .../swrenderer/viewport/r_viewport.cpp | 1 - src/v_framebuffer.cpp | 26 ++++ src/v_video.h | 3 +- 9 files changed, 128 insertions(+), 84 deletions(-) diff --git a/src/d_main.cpp b/src/d_main.cpp index 03fff86124..85f63578f0 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -146,7 +146,6 @@ EXTERN_CVAR (Float, m_pitch) EXTERN_CVAR (Float, m_yaw) EXTERN_CVAR (Bool, invertmouse) EXTERN_CVAR (Bool, lookstrafe) -EXTERN_CVAR (Int, screenblocks) EXTERN_CVAR (Bool, sv_cheats) EXTERN_CVAR (Bool, sv_unlimited_pickup) EXTERN_CVAR (Bool, I_FriendlyWindowTitle) @@ -208,7 +207,6 @@ CVAR (Bool, autoloadlights, false, CVAR_ARCHIVE | CVAR_NOINITCALL | CVAR_GLOBALC CVAR (Bool, r_debug_disable_vis_filter, false, 0) bool wantToRestart; -bool DrawFSHUD; // [RH] Draw fullscreen HUD? TArray allwads; bool devparm; // started game with -devparm const char *D_DrawIcon; // [RH] Patch name of icon to draw on next refresh @@ -382,6 +380,49 @@ void D_Render(std::function action, bool interpolate) } } +void D_DrawOverlays() +{ + // draw pause pic + if ((paused || pauseext) && menuactive == MENU_Off) + { + FTexture *tex; + int x; + FString pstring = GStrings("TXT_BY"); + + tex = TexMan.GetTextureByName(gameinfo.PauseSign, true); + x = (screen->GetUIWidth() - tex->GetDisplayWidth() * CleanXfac)/2 + + tex->GetDisplayLeftOffset() * CleanXfac; + screen->DrawTexture (tex, x, 4, DTA_CleanNoMove, true, TAG_DONE); + if (paused && multiplayer) + { + pstring << ' ' << players[paused - 1].userinfo.GetName(); + screen->DrawText(SmallFont, CR_RED, + (screen->GetUIWidth() - SmallFont->StringWidth(pstring)*CleanXfac) / 2, + (tex->GetDisplayHeight() * CleanYfac) + 4, pstring, DTA_CleanNoMove, true, TAG_DONE); + } + } + + // [RH] Draw icon, if any + if (D_DrawIcon) + { + FTextureID picnum = TexMan.CheckForTexture (D_DrawIcon, ETextureType::MiscPatch); + + D_DrawIcon = NULL; + if (picnum.isValid()) + { + FTexture *tex = TexMan.GetTexture(picnum); + screen->DrawTexture (tex, 160 - tex->GetDisplayWidth()/2, 100 - tex->GetDisplayHeight()/2, + DTA_320x200, true, TAG_DONE); + } + NoWipe = 10; + } + + if (snd_drawoutput) + { + GSnd->DrawWaveDebug(snd_drawoutput); + } +} + //========================================================================== // // CVAR dmflags @@ -779,41 +820,7 @@ void D_Display () { primaryLevel->automap->Drawer ((hud_althud && viewheight == screen->GetScreenHeight()) ? viewheight : StatusBar->GetTopOfStatusbar()); } - - // for timing the statusbar code. - //cycle_t stb; - //stb.Reset(); - //stb.Clock(); - if (!automapactive || viewactive) - { - StatusBar->RefreshViewBorder (); - } - if (hud_althud && viewheight == screen->GetScreenHeight() && screenblocks > 10) - { - StatusBar->DrawBottomStuff (HUD_AltHud); - if (DrawFSHUD || automapactive) StatusBar->DrawAltHUD(); - if (players[consoleplayer].camera && players[consoleplayer].camera->player && !automapactive) - { - StatusBar->DrawCrosshair(); - } - StatusBar->CallDraw (HUD_AltHud, vp.TicFrac); - StatusBar->DrawTopStuff (HUD_AltHud); - } - else if (viewheight == screen->GetScreenHeight() && viewactive && screenblocks > 10) - { - EHudState state = DrawFSHUD ? HUD_Fullscreen : HUD_None; - StatusBar->DrawBottomStuff (state); - StatusBar->CallDraw (state, vp.TicFrac); - StatusBar->DrawTopStuff (state); - } - else - { - StatusBar->DrawBottomStuff (HUD_StatusBar); - StatusBar->CallDraw (HUD_StatusBar, vp.TicFrac); - StatusBar->DrawTopStuff (HUD_StatusBar); - } - //stb.Unclock(); - //Printf("Stbar = %f\n", stb.TimeMS()); + StatusBar->DrawAll(); } else { @@ -821,7 +828,6 @@ void D_Display () switch (gamestate) { case GS_FULLCONSOLE: - screen->Begin2D(); C_DrawConsole (); M_Drawer (); screen->End2DAndUpdate (); @@ -844,46 +850,7 @@ void D_Display () } } CT_Drawer (); - - // draw pause pic - if ((paused || pauseext) && menuactive == MENU_Off) - { - FTexture *tex; - int x; - FString pstring = GStrings("TXT_BY"); - - tex = TexMan.GetTextureByName(gameinfo.PauseSign, true); - x = (screen->GetUIWidth() - tex->GetDisplayWidth() * CleanXfac)/2 + - tex->GetDisplayLeftOffset() * CleanXfac; - screen->DrawTexture (tex, x, 4, DTA_CleanNoMove, true, TAG_DONE); - if (paused && multiplayer) - { - pstring << ' ' << players[paused - 1].userinfo.GetName(); - screen->DrawText(SmallFont, CR_RED, - (screen->GetUIWidth() - SmallFont->StringWidth(pstring)*CleanXfac) / 2, - (tex->GetDisplayHeight() * CleanYfac) + 4, pstring, DTA_CleanNoMove, true, TAG_DONE); - } - } - - // [RH] Draw icon, if any - if (D_DrawIcon) - { - FTextureID picnum = TexMan.CheckForTexture (D_DrawIcon, ETextureType::MiscPatch); - - D_DrawIcon = NULL; - if (picnum.isValid()) - { - FTexture *tex = TexMan.GetTexture(picnum); - screen->DrawTexture (tex, 160 - tex->GetDisplayWidth()/2, 100 - tex->GetDisplayHeight()/2, - DTA_320x200, true, TAG_DONE); - } - NoWipe = 10; - } - - if (snd_drawoutput) - { - GSnd->DrawWaveDebug(snd_drawoutput); - } + D_DrawOverlays(); if (!wipe || NoWipe < 0 || wipe_type == wipe_None) { @@ -990,7 +957,7 @@ void D_DoomLoop () { try { - // frame syncronous IO operations + // frame synchronous IO operations if (gametic > lasttic) { lasttic = gametic; diff --git a/src/g_statusbar/sbar.h b/src/g_statusbar/sbar.h index 6fe11c5bc5..117f9ca97a 100644 --- a/src/g_statusbar/sbar.h +++ b/src/g_statusbar/sbar.h @@ -448,6 +448,8 @@ public: { return SBarTop; } + + void DrawAll(); //protected: void DrawPowerups (); diff --git a/src/g_statusbar/sbarinfo.cpp b/src/g_statusbar/sbarinfo.cpp index 189dd96c22..88bb27d4eb 100644 --- a/src/g_statusbar/sbarinfo.cpp +++ b/src/g_statusbar/sbarinfo.cpp @@ -61,7 +61,6 @@ enum }; EXTERN_CVAR(Int, fraglimit) -EXTERN_CVAR(Int, screenblocks) EXTERN_CVAR(Bool, vid_fps) class DSBarInfo; diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index bc1509faa6..2803a859fe 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -84,12 +84,17 @@ EXTERN_CVAR (Bool, am_showtotaltime) EXTERN_CVAR (Bool, noisedebug) EXTERN_CVAR (Int, con_scaletext) EXTERN_CVAR(Bool, vid_fps) +EXTERN_CVAR(Int, screenblocks) +EXTERN_CVAR(Bool, hud_althud) + CVAR(Int, hud_scale, 0, CVAR_ARCHIVE); DBaseStatusBar *StatusBar; extern int setblocks; +extern bool DrawFSHUD; // [RH] Draw fullscreen HUD? + FTexture *CrosshairImage; static int CrosshairNum; @@ -743,6 +748,52 @@ void DBaseStatusBar::DetachAllMessages () } } +//--------------------------------------------------------------------------- +// +// PROC DrawAll +// +//--------------------------------------------------------------------------- + +void DBaseStatusBar::DrawAll() +{ + // for timing the statusbar code. + //cycle_t stb; + //stb.Reset(); + //stb.Clock(); + auto &vp = r_viewpoint; + + if (!automapactive || viewactive) + { + RefreshViewBorder (); + } + if (hud_althud && viewheight == screen->GetScreenHeight() && screenblocks > 10) + { + DrawBottomStuff (HUD_AltHud); + if (DrawFSHUD || automapactive) DrawAltHUD(); + if (players[consoleplayer].camera && players[consoleplayer].camera->player && !automapactive) + { + DrawCrosshair(); + } + CallDraw (HUD_AltHud, vp.TicFrac); + DrawTopStuff (HUD_AltHud); + } + else if (viewheight == screen->GetScreenHeight() && viewactive && screenblocks > 10) + { + EHudState state = DrawFSHUD ? HUD_Fullscreen : HUD_None; + DrawBottomStuff (state); + CallDraw (state, vp.TicFrac); + DrawTopStuff (state); + } + else + { + DrawBottomStuff (HUD_StatusBar); + CallDraw (HUD_StatusBar, vp.TicFrac); + DrawTopStuff (HUD_StatusBar); + } + //stb.Unclock(); + //Printf("Stbar = %f\n", stb.TimeMS()); +} + //--------------------------------------------------------------------------- // // PROC ShowPlayerName diff --git a/src/r_utility.cpp b/src/r_utility.cpp index 171816a7bd..952a4000ee 100644 --- a/src/r_utility.cpp +++ b/src/r_utility.cpp @@ -67,7 +67,7 @@ // EXTERNAL DATA DECLARATIONS ---------------------------------------------- -extern bool DrawFSHUD; // [RH] Defined in d_main.cpp +bool DrawFSHUD; EXTERN_CVAR (Bool, cl_capfps) // TYPES ------------------------------------------------------------------- diff --git a/src/rendering/gl/renderer/gl_renderer.cpp b/src/rendering/gl/renderer/gl_renderer.cpp index 662365724f..324d2a3969 100644 --- a/src/rendering/gl/renderer/gl_renderer.cpp +++ b/src/rendering/gl/renderer/gl_renderer.cpp @@ -62,7 +62,6 @@ #include "r_data/models/models.h" #include "gl/renderer/gl_postprocessstate.h" -EXTERN_CVAR(Int, screenblocks) EXTERN_CVAR(Bool, cl_capfps) extern bool NoInterpolateView; diff --git a/src/rendering/swrenderer/viewport/r_viewport.cpp b/src/rendering/swrenderer/viewport/r_viewport.cpp index 7b72543c9f..d725990655 100644 --- a/src/rendering/swrenderer/viewport/r_viewport.cpp +++ b/src/rendering/swrenderer/viewport/r_viewport.cpp @@ -47,7 +47,6 @@ CVAR(String, r_viewsize, "", CVAR_NOSET) EXTERN_CVAR(Float, r_visibility); -EXTERN_CVAR(Int, screenblocks) namespace swrenderer { diff --git a/src/v_framebuffer.cpp b/src/v_framebuffer.cpp index 6591b2c59f..afa762d12e 100644 --- a/src/v_framebuffer.cpp +++ b/src/v_framebuffer.cpp @@ -56,6 +56,10 @@ CVAR(Bool, gl_scale_viewport, true, CVAR_ARCHIVE); CVAR(Bool, vid_fps, false, 0) CVAR(Int, vid_showpalette, 0, 0) +CUSTOM_CVAR(Int, hud_virtualheight, -1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) +{ + if (self > 0 && self < 480) self = 480; +} EXTERN_CVAR(Bool, ticker) EXTERN_CVAR(Float, vid_brightness) @@ -108,6 +112,28 @@ void DFrameBuffer::SetSize(int width, int height) UIHeight = ScreenHeight = ViewportScaledHeight(width, height); } +//========================================================================== +// +// +// +//========================================================================== + +void DFrameBuffer::UpdateVirtualSize() +{ + if (hud_virtualheight < 0) + { + UIWidth = ScreenWidth; + UIHeight = ScreenHeight; + m2DDrawer.SetVirtualScale(1); + } + else + { + UIHeight = hud_virtualheight; + UIWidth = Scale(ScreenWidth, UIHeight, ScreenHeight); + m2DDrawer.SetVirtualScale(double(ScreenHeight) / UIHeight); + } +} + //========================================================================== // // diff --git a/src/v_video.h b/src/v_video.h index 12e265cd44..379339ed41 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -450,9 +450,10 @@ public: virtual IIndexBuffer *CreateIndexBuffer() { return nullptr; } virtual IDataBuffer *CreateDataBuffer(int bindingpoint, bool ssbo) { return nullptr; } bool BuffersArePersistent() { return !!(hwcaps & RFL_BUFFER_STORAGE); } + void UpdateVirtualSize(); // Begin/End 2D drawing operations. - void Begin2D() { isIn2D = true; } + void Begin2D() { isIn2D = true; UpdateVirtualSize(); } void End2D() { isIn2D = false; } void End2DAndUpdate()