- move colorization parser from 'textures' to 'gldefs'

This commit is contained in:
Rachael Alexanderson 2020-01-05 16:30:01 -05:00
parent b209fd9572
commit 98ee0a7035
3 changed files with 76 additions and 73 deletions

View file

@ -689,74 +689,6 @@ void FTextureManager::AddHiresTextures (int wadnum)
// //
//========================================================================== //==========================================================================
void FTextureManager::ParseColorization(FScanner& sc)
{
TextureManipulation tm = {};
tm.ModulateColor = 0x01ffffff;
sc.MustGetString();
FName cname = sc.String;
sc.MustGetToken('{');
while (!sc.CheckToken('}'))
{
sc.MustGetString();
if (sc.Compare("DesaturationFactor"))
{
sc.MustGetFloat();
tm.DesaturationFactor = (float)sc.Float;
}
else if (sc.Compare("AddColor"))
{
sc.MustGetString();
tm.AddColor = (tm.AddColor & 0xff000000) | (V_GetColor(NULL, sc) & 0xffffff);
}
else if (sc.Compare("ModulateColor"))
{
sc.MustGetString();
tm.ModulateColor = V_GetColor(NULL, sc) & 0xffffff;
if (sc.CheckToken(','))
{
sc.MustGetNumber();
tm.ModulateColor.a = sc.Number;
}
else tm.ModulateColor.a = 1;
}
else if (sc.Compare("BlendColor"))
{
sc.MustGetString();
tm.BlendColor = V_GetColor(NULL, sc) & 0xffffff;
sc.MustGetToken(',');
sc.MustGetString();
static const char* opts[] = { "none", "alpha", "screen", "overlay", "hardlight", nullptr };
tm.AddColor.a = (tm.AddColor.a & ~TextureManipulation::BlendMask) | sc.MustMatchString(opts);
if (sc.Compare("alpha"))
{
sc.MustGetToken(',');
sc.MustGetFloat();
tm.BlendColor.a = (uint8_t)(clamp(sc.Float, 0., 1.) * 255);
}
}
else if (sc.Compare("invert"))
{
tm.AddColor.a |= TextureManipulation::InvertBit;
}
else sc.ScriptError("Unknown token '%s'", sc.String);
}
if (tm.CheckIfEnabled())
{
tmanips.Insert(cname, tm);
}
else
{
tmanips.Remove(cname);
}
}
//==========================================================================
//
// Loads the HIRESTEX lumps
//
//==========================================================================
void FTextureManager::LoadTextureDefs(int wadnum, const char *lumpname, FMultipatchTextureBuilder &build) void FTextureManager::LoadTextureDefs(int wadnum, const char *lumpname, FMultipatchTextureBuilder &build)
{ {
int remapLump, lastLump; int remapLump, lastLump;
@ -907,10 +839,6 @@ void FTextureManager::ParseTextureDef(int lump, FMultipatchTextureBuilder &build
{ {
build.ParseTexture(sc, ETextureType::MiscPatch); build.ParseTexture(sc, ETextureType::MiscPatch);
} }
else if (sc.Compare("colorization"))
{
ParseColorization(sc);
}
else if (sc.Compare("#include")) else if (sc.Compare("#include"))
{ {
sc.MustGetString(); sc.MustGetString();

View file

@ -631,7 +631,14 @@ public:
{ {
return tmanips.CheckKey(name); return tmanips.CheckKey(name);
} }
void InsertTextureManipulation(FName cname, TextureManipulation tm)
{
tmanips.Insert(cname, tm);
}
void RemoveTextureManipulation(FName cname)
{
tmanips.Remove(cname);
}
private: private:

View file

@ -51,6 +51,7 @@
void AddLightDefaults(FLightDefaults *defaults, double attnFactor); void AddLightDefaults(FLightDefaults *defaults, double attnFactor);
void AddLightAssociation(const char *actor, const char *frame, const char *light); void AddLightAssociation(const char *actor, const char *frame, const char *light);
void InitializeActorLights(TArray<FLightAssociation> &LightAssociations); void InitializeActorLights(TArray<FLightAssociation> &LightAssociations);
void ParseColorization(FScanner& sc);
TArray<UserShaderDesc> usershaders; TArray<UserShaderDesc> usershaders;
extern TDeletingArray<FLightDefaults *> LightDefaults; extern TDeletingArray<FLightDefaults *> LightDefaults;
@ -194,6 +195,7 @@ static const char *CoreKeywords[]=
"#include", "#include",
"material", "material",
"lightsizefactor", "lightsizefactor",
"colorization",
nullptr nullptr
}; };
@ -218,6 +220,7 @@ enum
TAG_INCLUDE, TAG_INCLUDE,
TAG_MATERIAL, TAG_MATERIAL,
TAG_LIGHTSIZEFACTOR, TAG_LIGHTSIZEFACTOR,
TAG_COLORIZATION,
}; };
//========================================================================== //==========================================================================
@ -1649,6 +1652,68 @@ class GLDefsParser
} }
} }
void ParseColorization(FScanner& sc)
{
TextureManipulation tm = {};
tm.ModulateColor = 0x01ffffff;
sc.MustGetString();
FName cname = sc.String;
sc.MustGetToken('{');
while (!sc.CheckToken('}'))
{
sc.MustGetString();
if (sc.Compare("DesaturationFactor"))
{
sc.MustGetFloat();
tm.DesaturationFactor = (float)sc.Float;
}
else if (sc.Compare("AddColor"))
{
sc.MustGetString();
tm.AddColor = (tm.AddColor & 0xff000000) | (V_GetColor(NULL, sc) & 0xffffff);
}
else if (sc.Compare("ModulateColor"))
{
sc.MustGetString();
tm.ModulateColor = V_GetColor(NULL, sc) & 0xffffff;
if (sc.CheckToken(','))
{
sc.MustGetNumber();
tm.ModulateColor.a = sc.Number;
}
else tm.ModulateColor.a = 1;
}
else if (sc.Compare("BlendColor"))
{
sc.MustGetString();
tm.BlendColor = V_GetColor(NULL, sc) & 0xffffff;
sc.MustGetToken(',');
sc.MustGetString();
static const char* opts[] = { "none", "alpha", "screen", "overlay", "hardlight", nullptr };
tm.AddColor.a = (tm.AddColor.a & ~TextureManipulation::BlendMask) | sc.MustMatchString(opts);
if (sc.Compare("alpha"))
{
sc.MustGetToken(',');
sc.MustGetFloat();
tm.BlendColor.a = (uint8_t)(clamp(sc.Float, 0., 1.) * 255);
}
}
else if (sc.Compare("invert"))
{
tm.AddColor.a |= TextureManipulation::InvertBit;
}
else sc.ScriptError("Unknown token '%s'", sc.String);
}
if (tm.CheckIfEnabled())
{
TexMan.InsertTextureManipulation(cname, tm);
}
else
{
TexMan.RemoveTextureManipulation(cname);
}
}
public: public:
//========================================================================== //==========================================================================
@ -1741,6 +1806,9 @@ public:
*/ */
} }
break; break;
case TAG_COLORIZATION:
ParseColorization(sc);
break;
default: default:
sc.ScriptError("Error parsing defs. Unknown tag: %s.\n", sc.String); sc.ScriptError("Error parsing defs. Unknown tag: %s.\n", sc.String);
break; break;