Skip to content

Commit

Permalink
- move colorization parser from 'textures' to 'gldefs'
Browse files Browse the repository at this point in the history
  • Loading branch information
madame-rachelle committed Jan 5, 2020
1 parent b209fd9 commit 98ee0a7
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 73 deletions.
72 changes: 0 additions & 72 deletions src/gamedata/textures/texturemanager.cpp
Expand Up @@ -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)
{
int remapLump, lastLump;
Expand Down Expand Up @@ -907,10 +839,6 @@ void FTextureManager::ParseTextureDef(int lump, FMultipatchTextureBuilder &build
{
build.ParseTexture(sc, ETextureType::MiscPatch);
}
else if (sc.Compare("colorization"))
{
ParseColorization(sc);
}
else if (sc.Compare("#include"))
{
sc.MustGetString();
Expand Down
9 changes: 8 additions & 1 deletion src/gamedata/textures/textures.h
Expand Up @@ -631,7 +631,14 @@ class FTextureManager
{
return tmanips.CheckKey(name);
}

void InsertTextureManipulation(FName cname, TextureManipulation tm)
{
tmanips.Insert(cname, tm);
}
void RemoveTextureManipulation(FName cname)
{
tmanips.Remove(cname);
}

private:

Expand Down
68 changes: 68 additions & 0 deletions src/r_data/gldefs.cpp
Expand Up @@ -51,6 +51,7 @@
void AddLightDefaults(FLightDefaults *defaults, double attnFactor);
void AddLightAssociation(const char *actor, const char *frame, const char *light);
void InitializeActorLights(TArray<FLightAssociation> &LightAssociations);
void ParseColorization(FScanner& sc);

TArray<UserShaderDesc> usershaders;
extern TDeletingArray<FLightDefaults *> LightDefaults;
Expand Down Expand Up @@ -194,6 +195,7 @@ static const char *CoreKeywords[]=
"#include",
"material",
"lightsizefactor",
"colorization",
nullptr
};

Expand All @@ -218,6 +220,7 @@ enum
TAG_INCLUDE,
TAG_MATERIAL,
TAG_LIGHTSIZEFACTOR,
TAG_COLORIZATION,
};

//==========================================================================
Expand Down Expand Up @@ -1648,6 +1651,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:
Expand Down Expand Up @@ -1741,6 +1806,9 @@ class GLDefsParser
*/
}
break;
case TAG_COLORIZATION:
ParseColorization(sc);
break;
default:
sc.ScriptError("Error parsing defs. Unknown tag: %s.\n", sc.String);
break;
Expand Down

0 comments on commit 98ee0a7

Please sign in to comment.