- make the colormap comparison against NormalLight inline because this is by far the most frequent case and any cycle being saved here counts.

This commit is contained in:
Christoph Oelckers 2017-03-15 17:14:40 +01:00
parent 9a24771a7d
commit cd015f9340
3 changed files with 11 additions and 48 deletions

View File

@ -212,7 +212,6 @@ FDynamicColormap *GetSpecialLights (PalEntry color, PalEntry fade, int desaturat
colormap->BuildLights ();
}
else colormap->Maps = NULL;
return colormap;
}

View File

@ -1,6 +1,8 @@
#ifndef __RES_CMAP_H
#define __RES_CMAP_H
#include "m_fixed.h"
struct FSWColormap;
struct lightlist_t;
@ -149,8 +151,16 @@ extern bool NormalLightHasFixedLights;
FDynamicColormap *GetSpecialLights (PalEntry lightcolor, PalEntry fadecolor, int desaturate);
inline FDynamicColormap *GetColorTable(const FColormap &cm)
__forceinline FDynamicColormap *GetColorTable(const FColormap &cm)
{
auto p = &NormalLight;
if (cm.LightColor == p->Color &&
cm.FadeColor == p->Fade &&
cm.Desaturation == p->Desaturate)
{
return p;
}
return GetSpecialLights(cm.LightColor, cm.FadeColor, cm.Desaturation);
}

View File

@ -1715,52 +1715,6 @@ FSerializer &Serialize(FSerializer &arc, const char *key, FName &value, FName *d
//
//==========================================================================
template<> FSerializer &Serialize(FSerializer &arc, const char *key, FDynamicColormap *&cm, FDynamicColormap **def)
{
if (arc.isWriting())
{
if (arc.w->inObject() && def != nullptr && cm->Color == (*def)->Color && cm->Fade == (*def)->Fade && cm->Desaturate == (*def)->Desaturate)
{
return arc;
}
arc.WriteKey(key);
arc.w->StartArray();
arc.w->Uint(cm->Color);
arc.w->Uint(cm->Fade);
arc.w->Uint(cm->Desaturate);
arc.w->EndArray();
}
else
{
auto val = arc.r->FindKey(key);
if (val != nullptr)
{
if (val->IsArray())
{
const rapidjson::Value &colorval = (*val)[0];
const rapidjson::Value &fadeval = (*val)[1];
const rapidjson::Value &desatval = (*val)[2];
if (colorval.IsUint() && fadeval.IsUint() && desatval.IsUint())
{
cm = GetSpecialLights(colorval.GetUint(), fadeval.GetUint(), desatval.GetUint());
return arc;
}
}
assert(false && "not a colormap");
Printf(TEXTCOLOR_RED "object does not represent a colormap for '%s'\n", key);
cm = &NormalLight;
}
}
return arc;
}
//==========================================================================
//
//
//
//==========================================================================
FSerializer &Serialize(FSerializer &arc, const char *key, FSoundID &sid, FSoundID *def)
{
if (arc.isWriting())