- moved all GLDEFS parsing into a dedicated source file.
- split gl_postprocessshader.h in two so that the hardware independent part can be used by GLDEFS without pulling in all of OpenGL.
This commit is contained in:
parent
fd6fbc76c6
commit
1fc4c9801b
18 changed files with 1923 additions and 1839 deletions
|
|
@ -166,274 +166,6 @@ void FTexture::SetSpriteAdjust()
|
|||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Parses a material definition
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void gl_ParseMaterial(FScanner &sc, int deflump)
|
||||
{
|
||||
ETextureType type = ETextureType::Any;
|
||||
bool disable_fullbright = false;
|
||||
bool disable_fullbright_specified = false;
|
||||
bool thiswad = false;
|
||||
bool iwad = false;
|
||||
|
||||
FTexture *textures[6];
|
||||
const char *keywords[7] = { "brightmap", "normal", "specular", "metallic", "roughness", "ao", nullptr };
|
||||
const char *notFound[6] = { "Brightmap", "Normalmap", "Specular texture", "Metallic texture", "Roughness texture", "Ambient occlusion texture" };
|
||||
memset(textures, 0, sizeof(textures));
|
||||
|
||||
sc.MustGetString();
|
||||
if (sc.Compare("texture")) type = ETextureType::Wall;
|
||||
else if (sc.Compare("flat")) type = ETextureType::Flat;
|
||||
else if (sc.Compare("sprite")) type = ETextureType::Sprite;
|
||||
else sc.UnGet();
|
||||
|
||||
sc.MustGetString();
|
||||
FTextureID no = TexMan.CheckForTexture(sc.String, type, FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_Overridable);
|
||||
FTexture *tex = TexMan[no];
|
||||
|
||||
sc.MustGetToken('{');
|
||||
while (!sc.CheckToken('}'))
|
||||
{
|
||||
sc.MustGetString();
|
||||
if (sc.Compare("disablefullbright"))
|
||||
{
|
||||
// This can also be used without a brightness map to disable
|
||||
// fullbright in rotations that only use brightness maps on
|
||||
// other angles.
|
||||
disable_fullbright = true;
|
||||
disable_fullbright_specified = true;
|
||||
}
|
||||
else if (sc.Compare("thiswad"))
|
||||
{
|
||||
// only affects textures defined in the WAD containing the definition file.
|
||||
thiswad = true;
|
||||
}
|
||||
else if (sc.Compare ("iwad"))
|
||||
{
|
||||
// only affects textures defined in the IWAD.
|
||||
iwad = true;
|
||||
}
|
||||
else if (sc.Compare("glossiness"))
|
||||
{
|
||||
sc.MustGetFloat();
|
||||
if (tex)
|
||||
tex->gl_info.Glossiness = sc.Float;
|
||||
}
|
||||
else if (sc.Compare("specularlevel"))
|
||||
{
|
||||
sc.MustGetFloat();
|
||||
if (tex)
|
||||
tex->gl_info.SpecularLevel = sc.Float;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; keywords[i] != nullptr; i++)
|
||||
{
|
||||
if (sc.Compare (keywords[i]))
|
||||
{
|
||||
sc.MustGetString();
|
||||
if (textures[i])
|
||||
Printf("Multiple %s definitions in texture %s\n", keywords[i], tex? tex->Name.GetChars() : "(null)");
|
||||
textures[i] = TexMan.FindTexture(sc.String, ETextureType::Any, FTextureManager::TEXMAN_TryAny);
|
||||
if (!textures[i])
|
||||
Printf("%s '%s' not found in texture '%s'\n", notFound[i], sc.String, tex? tex->Name.GetChars() : "(null)");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!tex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (thiswad || iwad)
|
||||
{
|
||||
bool useme = false;
|
||||
int lumpnum = tex->GetSourceLump();
|
||||
|
||||
if (lumpnum != -1)
|
||||
{
|
||||
if (iwad && Wads.GetLumpFile(lumpnum) <= Wads.GetIwadNum()) useme = true;
|
||||
if (thiswad && Wads.GetLumpFile(lumpnum) == deflump) useme = true;
|
||||
}
|
||||
if (!useme) return;
|
||||
}
|
||||
|
||||
FTexture **bindings[6] =
|
||||
{
|
||||
&tex->Brightmap,
|
||||
&tex->Normal,
|
||||
&tex->Specular,
|
||||
&tex->Metallic,
|
||||
&tex->Roughness,
|
||||
&tex->AmbientOcclusion
|
||||
};
|
||||
for (int i = 0; keywords[i] != nullptr; i++)
|
||||
{
|
||||
if (textures[i])
|
||||
{
|
||||
textures[i]->bMasked = false;
|
||||
*bindings[i] = textures[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (disable_fullbright_specified)
|
||||
tex->gl_info.bDisableFullbright = disable_fullbright;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Parses a brightmap definition
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void gl_ParseBrightmap(FScanner &sc, int deflump)
|
||||
{
|
||||
ETextureType type = ETextureType::Any;
|
||||
bool disable_fullbright=false;
|
||||
bool thiswad = false;
|
||||
bool iwad = false;
|
||||
FTexture *bmtex = NULL;
|
||||
|
||||
sc.MustGetString();
|
||||
if (sc.Compare("texture")) type = ETextureType::Wall;
|
||||
else if (sc.Compare("flat")) type = ETextureType::Flat;
|
||||
else if (sc.Compare("sprite")) type = ETextureType::Sprite;
|
||||
else sc.UnGet();
|
||||
|
||||
sc.MustGetString();
|
||||
FTextureID no = TexMan.CheckForTexture(sc.String, type, FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_Overridable);
|
||||
FTexture *tex = TexMan[no];
|
||||
|
||||
sc.MustGetToken('{');
|
||||
while (!sc.CheckToken('}'))
|
||||
{
|
||||
sc.MustGetString();
|
||||
if (sc.Compare("disablefullbright"))
|
||||
{
|
||||
// This can also be used without a brightness map to disable
|
||||
// fullbright in rotations that only use brightness maps on
|
||||
// other angles.
|
||||
disable_fullbright = true;
|
||||
}
|
||||
else if (sc.Compare("thiswad"))
|
||||
{
|
||||
// only affects textures defined in the WAD containing the definition file.
|
||||
thiswad = true;
|
||||
}
|
||||
else if (sc.Compare ("iwad"))
|
||||
{
|
||||
// only affects textures defined in the IWAD.
|
||||
iwad = true;
|
||||
}
|
||||
else if (sc.Compare ("map"))
|
||||
{
|
||||
sc.MustGetString();
|
||||
|
||||
if (bmtex != NULL)
|
||||
{
|
||||
Printf("Multiple brightmap definitions in texture %s\n", tex? tex->Name.GetChars() : "(null)");
|
||||
}
|
||||
|
||||
bmtex = TexMan.FindTexture(sc.String, ETextureType::Any, FTextureManager::TEXMAN_TryAny);
|
||||
|
||||
if (bmtex == NULL)
|
||||
Printf("Brightmap '%s' not found in texture '%s'\n", sc.String, tex? tex->Name.GetChars() : "(null)");
|
||||
}
|
||||
}
|
||||
if (!tex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (thiswad || iwad)
|
||||
{
|
||||
bool useme = false;
|
||||
int lumpnum = tex->GetSourceLump();
|
||||
|
||||
if (lumpnum != -1)
|
||||
{
|
||||
if (iwad && Wads.GetLumpFile(lumpnum) <= Wads.GetIwadNum()) useme = true;
|
||||
if (thiswad && Wads.GetLumpFile(lumpnum) == deflump) useme = true;
|
||||
}
|
||||
if (!useme) return;
|
||||
}
|
||||
|
||||
if (bmtex != NULL)
|
||||
{
|
||||
/* I do not think this is needed any longer
|
||||
if (tex->bWarped != 0)
|
||||
{
|
||||
Printf("Cannot combine warping with brightmap on texture '%s'\n", tex->Name.GetChars());
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
bmtex->bMasked = false;
|
||||
tex->Brightmap = bmtex;
|
||||
}
|
||||
tex->gl_info.bDisableFullbright = disable_fullbright;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Parses a GLBoom+ detail texture definition
|
||||
//
|
||||
// Syntax is this:
|
||||
// detail
|
||||
// {
|
||||
// (walls | flats) [default_detail_name [width [height [offset_x [offset_y]]]]]
|
||||
// {
|
||||
// texture_name [detail_name [width [height [offset_x [offset_y]]]]]
|
||||
// }
|
||||
// }
|
||||
// This merely parses the block and returns no error if valid. The feature
|
||||
// is not actually implemented, so nothing else happens.
|
||||
//==========================================================================
|
||||
|
||||
void gl_ParseDetailTexture(FScanner &sc)
|
||||
{
|
||||
while (!sc.CheckToken('}'))
|
||||
{
|
||||
sc.MustGetString();
|
||||
if (sc.Compare("walls") || sc.Compare("flats"))
|
||||
{
|
||||
if (!sc.CheckToken('{'))
|
||||
{
|
||||
sc.MustGetString(); // Default detail texture
|
||||
if (sc.CheckFloat()) // Width
|
||||
if (sc.CheckFloat()) // Height
|
||||
if (sc.CheckFloat()) // OffsX
|
||||
if (sc.CheckFloat()) // OffsY
|
||||
{
|
||||
// Nothing
|
||||
}
|
||||
}
|
||||
else sc.UnGet();
|
||||
sc.MustGetToken('{');
|
||||
while (!sc.CheckToken('}'))
|
||||
{
|
||||
sc.MustGetString(); // Texture
|
||||
if (sc.GetString()) // Detail texture
|
||||
{
|
||||
if (sc.CheckFloat()) // Width
|
||||
if (sc.CheckFloat()) // Height
|
||||
if (sc.CheckFloat()) // OffsX
|
||||
if (sc.CheckFloat()) // OffsY
|
||||
{
|
||||
// Nothing
|
||||
}
|
||||
}
|
||||
else sc.UnGet();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// DFrameBuffer :: PrecacheTexture
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue