mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 07:11:54 +00:00
- move colorization parser from 'textures' to 'gldefs'
This commit is contained in:
parent
b209fd9572
commit
98ee0a7035
3 changed files with 76 additions and 73 deletions
|
@ -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();
|
||||||
|
|
|
@ -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:
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue