debugrender_freezebsp: freeze culling to your current position, so you can see how much level is being rendered
This commit is contained in:
parent
a6aeb1194f
commit
90196d8913
4 changed files with 68 additions and 9 deletions
|
|
@ -12,6 +12,7 @@
|
|||
/// \brief BSP traversal, handling of LineSegs for rendering
|
||||
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
//#include <tracy/tracy/Tracy.hpp>
|
||||
|
||||
|
|
@ -34,6 +35,7 @@ extern "C" {
|
|||
#include "qs22j.h"
|
||||
}
|
||||
extern "C" consvar_t cv_debugfinishline;
|
||||
extern "C" consvar_t cv_debugfinishline, cv_debugrender_freezebsp;
|
||||
|
||||
seg_t *curline;
|
||||
side_t *sidedef;
|
||||
|
|
@ -55,6 +57,9 @@ INT32 doorclosed;
|
|||
// can block off the BSP across that seg.
|
||||
boolean g_walloffscreen;
|
||||
|
||||
static std::vector<std::vector<INT32>> node_cache;
|
||||
static std::vector<INT32>* current_node_cache;
|
||||
|
||||
boolean R_NoEncore(sector_t *sector, levelflat_t *flat, boolean ceiling)
|
||||
{
|
||||
const boolean invertEncore = (sector->flags & MSF_INVERTENCORE);
|
||||
|
|
@ -1471,5 +1476,46 @@ void R_RenderBSPNode(INT32 bspnum)
|
|||
portalcullsector = NULL;
|
||||
}
|
||||
|
||||
R_Subsector(bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR);
|
||||
bspnum = (bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR);
|
||||
R_Subsector(bspnum);
|
||||
|
||||
if (current_node_cache)
|
||||
{
|
||||
current_node_cache->push_back(bspnum);
|
||||
}
|
||||
}
|
||||
|
||||
static bool render_cache(size_t cachenum)
|
||||
{
|
||||
if (node_cache.empty() && !cv_debugrender_freezebsp.value)
|
||||
{
|
||||
current_node_cache = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!cv_debugrender_freezebsp.value)
|
||||
{
|
||||
// free cache
|
||||
node_cache = {};
|
||||
current_node_cache = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (node_cache.size() <= cachenum)
|
||||
{
|
||||
node_cache.resize(cachenum + 1);
|
||||
current_node_cache = &node_cache[cachenum];
|
||||
return false;
|
||||
}
|
||||
|
||||
for (INT32 bspnum : node_cache[cachenum])
|
||||
R_Subsector(bspnum);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void R_RenderFirstBSPNode(size_t cachenum)
|
||||
{
|
||||
if (!render_cache(cachenum))
|
||||
R_RenderBSPNode((INT32)numnodes - 1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ void R_ClearClipSegs(void);
|
|||
void R_PortalClearClipSegs(INT32 start, INT32 end);
|
||||
void R_ClearDrawSegs(void);
|
||||
void R_RenderBSPNode(INT32 bspnum);
|
||||
void R_RenderFirstBSPNode(size_t cachenum);
|
||||
|
||||
// determines when a given sector shouldn't abide by the encoremap's palette.
|
||||
// no longer a static since this is used for encore in hw_main.c as well now:
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ consvar_t cv_debugrender_contrast =
|
|||
consvar_t cv_debugrender_spriteclip = CVAR_INIT("debugrender_spriteclip", "Off", CV_CHEAT, CV_OnOff, nullptr);
|
||||
consvar_t cv_debugrender_portal = CVAR_INIT("debugrender_portal", "Off", CV_CHEAT, CV_OnOff, nullptr);
|
||||
consvar_t cv_debugrender_visplanes = CVAR_INIT("debugrender_visplanes", "Off", CV_CHEAT, CV_OnOff, nullptr);
|
||||
consvar_t cv_debugfinishline = CVAR_INIT ("debugfinishline", "Off", CV_CHEAT, CV_OnOff, nullptr);
|
||||
consvar_t cv_debugrender_freezebsp = CVAR_INIT ("debugrender_freezebsp", "Off", CV_CHEAT, CV_OnOff, nullptr);
|
||||
|
||||
UINT32 debugrender_highlight;
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ INT64 mytotal = 0;
|
|||
//profile stuff ---------------------------------------------------------
|
||||
|
||||
extern consvar_t cv_debugrender_visplanes;
|
||||
extern consvar_t cv_debugrender_freezebsp;
|
||||
|
||||
// Fineangles in the SCREENWIDTH wide window.
|
||||
#define FIELDOFVIEW 2048
|
||||
|
|
@ -190,8 +191,6 @@ consvar_t cv_maxportals = CVAR_INIT ("maxportals", "2", CV_SAVE, maxportals_cons
|
|||
|
||||
consvar_t cv_renderstats = CVAR_INIT ("renderstats", "Off", 0, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_debugfinishline = CVAR_INIT ("debugfinishline", "Off", CV_CHEAT, CV_OnOff, NULL);
|
||||
|
||||
void SplitScreen_OnChange(void)
|
||||
{
|
||||
UINT8 i;
|
||||
|
|
@ -1480,6 +1479,19 @@ static void Mask_Post (maskcount_t* m)
|
|||
// R_RenderView
|
||||
// ================
|
||||
|
||||
// viewx, viewy, viewangle, all that good stuff must be set
|
||||
static void R_RenderViewpoint(maskcount_t* mask, INT32 cachenum)
|
||||
{
|
||||
Mask_Pre(mask);
|
||||
|
||||
curdrawsegs = ds_p;
|
||||
|
||||
R_RenderFirstBSPNode(cachenum);
|
||||
R_AddPrecipitationSprites();
|
||||
|
||||
Mask_Post(mask);
|
||||
}
|
||||
|
||||
// FAB NOTE FOR WIN32 PORT !! I'm not finished already,
|
||||
// but I suspect network may have problems with the video buffer being locked
|
||||
// for all duration of rendering, and being released only once at the end..
|
||||
|
|
@ -1531,9 +1543,7 @@ void R_RenderPlayerView(void)
|
|||
|
||||
srb2::ThreadPool::Sema tp_sema;
|
||||
srb2::g_main_threadpool->begin_sema();
|
||||
//R_RenderViewpoint(&masks[nummasks - 1]);
|
||||
R_RenderBSPNode((INT32)numnodes - 1);
|
||||
R_AddPrecipitationSprites();
|
||||
R_RenderViewpoint(&masks[nummasks - 1], nummasks - 1);
|
||||
|
||||
ps_bsptime = I_GetPreciseTime() - ps_bsptime;
|
||||
#ifdef TIMING
|
||||
|
|
@ -1593,9 +1603,7 @@ void R_RenderPlayerView(void)
|
|||
// Render the BSP from the new viewpoint, and clip
|
||||
// any sprites with the new clipsegs and window.
|
||||
|
||||
//R_RenderViewpoint(&masks[nummasks - 1]);
|
||||
R_RenderBSPNode((INT32)numnodes - 1);
|
||||
Mask_Post(&masks[nummasks - 1]);
|
||||
R_RenderViewpoint(&masks[nummasks - 1], nummasks - 1);
|
||||
|
||||
//portalskipprecipmobjs = false;
|
||||
|
||||
|
|
@ -1771,6 +1779,8 @@ void R_RegisterEngineStuff(void)
|
|||
CV_RegisterVar(&cv_debugrender_contrast);
|
||||
CV_RegisterVar(&cv_debugrender_spriteclip);
|
||||
CV_RegisterVar(&cv_debugrender_portal);
|
||||
CV_RegisterVar(&cv_debugrender_visplanes);
|
||||
CV_RegisterVar(&cv_debugrender_freezebsp);
|
||||
|
||||
COM_AddCommand("debugrender_highlight", Command_Debugrender_highlight);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue