- Rename mTextureEffects to mMaterialShaders to help distinguish between those and effect shaders (mEffectShaders)

- Add MaterialShaderIndex enum
This commit is contained in:
Magnus Norddahl 2018-01-21 01:19:16 +01:00
parent f3c55c01c8
commit 4dd2d789f4
3 changed files with 51 additions and 37 deletions

View file

@ -376,8 +376,7 @@ struct FDefaultShader
const char * gettexelfunc;
};
// Note: the FIRST_USER_SHADER constant in gl_shader.h needs
// to be updated whenever the size of this array is modified.
// Note: the ShaderIndex enum in gl_shader.h needs to be updated whenever this array is modified.
static const FDefaultShader defaultshaders[]=
{
{"Default", "shaders/glsl/func_normal.fp"},
@ -522,8 +521,8 @@ FShaderCollection::~FShaderCollection()
void FShaderCollection::CompileShaders(EPassType passType)
{
mTextureEffects.Clear();
mTextureEffectsNAT.Clear();
mMaterialShaders.Clear();
mMaterialShadersNAT.Clear();
for (int i = 0; i < MAX_EFFECTS; i++)
{
mEffectShaders[i] = NULL;
@ -532,11 +531,11 @@ void FShaderCollection::CompileShaders(EPassType passType)
for(int i=0;defaultshaders[i].ShaderName != NULL;i++)
{
FShader *shc = Compile(defaultshaders[i].ShaderName, defaultshaders[i].gettexelfunc, true, passType);
mTextureEffects.Push(shc);
if (i <= 3)
mMaterialShaders.Push(shc);
if (i <= SHADER_Brightmap)
{
FShader *shc = Compile(defaultshaders[i].ShaderName, defaultshaders[i].gettexelfunc, false, passType);
mTextureEffectsNAT.Push(shc);
mMaterialShadersNAT.Push(shc);
}
}
@ -546,7 +545,7 @@ void FShaderCollection::CompileShaders(EPassType passType)
FName sfn = name;
FShader *shc = Compile(sfn, usershaders[i], true, passType);
mTextureEffects.Push(shc);
mMaterialShaders.Push(shc);
}
for(int i=0;i<MAX_EFFECTS;i++)
@ -569,21 +568,21 @@ void FShaderCollection::CompileShaders(EPassType passType)
void FShaderCollection::Clean()
{
for (unsigned int i = 0; i < mTextureEffectsNAT.Size(); i++)
for (unsigned int i = 0; i < mMaterialShadersNAT.Size(); i++)
{
if (mTextureEffectsNAT[i] != NULL) delete mTextureEffectsNAT[i];
if (mMaterialShadersNAT[i] != NULL) delete mMaterialShadersNAT[i];
}
for (unsigned int i = 0; i < mTextureEffects.Size(); i++)
for (unsigned int i = 0; i < mMaterialShaders.Size(); i++)
{
if (mTextureEffects[i] != NULL) delete mTextureEffects[i];
if (mMaterialShaders[i] != NULL) delete mMaterialShaders[i];
}
for (int i = 0; i < MAX_EFFECTS; i++)
{
if (mEffectShaders[i] != NULL) delete mEffectShaders[i];
mEffectShaders[i] = NULL;
}
mTextureEffects.Clear();
mTextureEffectsNAT.Clear();
mMaterialShaders.Clear();
mMaterialShadersNAT.Clear();
}
//==========================================================================
@ -596,9 +595,9 @@ int FShaderCollection::Find(const char * shn)
{
FName sfn = shn;
for(unsigned int i=0;i<mTextureEffects.Size();i++)
for(unsigned int i=0;i<mMaterialShaders.Size();i++)
{
if (mTextureEffects[i]->mName == sfn)
if (mMaterialShaders[i]->mName == sfn)
{
return i;
}
@ -636,19 +635,19 @@ void FShaderCollection::ApplyMatrices(VSMatrix *proj, VSMatrix *view)
VSMatrix norm;
norm.computeNormalMatrix(*view);
for (int i = 0; i < 4; i++)
for (int i = 0; i < SHADER_NoTexture; i++)
{
mTextureEffects[i]->ApplyMatrices(proj, view, &norm);
mTextureEffectsNAT[i]->ApplyMatrices(proj, view, &norm);
mMaterialShaders[i]->ApplyMatrices(proj, view, &norm);
mMaterialShadersNAT[i]->ApplyMatrices(proj, view, &norm);
}
mTextureEffects[4]->ApplyMatrices(proj, view, &norm);
mMaterialShaders[SHADER_NoTexture]->ApplyMatrices(proj, view, &norm);
if (gl_fuzztype != 0)
{
mTextureEffects[4 + gl_fuzztype]->ApplyMatrices(proj, view, &norm);
mMaterialShaders[SHADER_NoTexture + gl_fuzztype]->ApplyMatrices(proj, view, &norm);
}
for (unsigned i = 12; i < mTextureEffects.Size(); i++)
for (unsigned i = FIRST_USER_SHADER; i < mMaterialShaders.Size(); i++)
{
mTextureEffects[i]->ApplyMatrices(proj, view, &norm);
mMaterialShaders[i]->ApplyMatrices(proj, view, &norm);
}
for (int i = 0; i < MAX_EFFECTS; i++)
{

View file

@ -355,8 +355,8 @@ private:
class FShaderCollection
{
TArray<FShader*> mTextureEffects;
TArray<FShader*> mTextureEffectsNAT;
TArray<FShader*> mMaterialShaders;
TArray<FShader*> mMaterialShadersNAT;
FShader *mEffectShaders[MAX_EFFECTS];
void Clean();
@ -372,13 +372,13 @@ public:
void ResetFixedColormap()
{
for (unsigned i = 0; i < mTextureEffects.Size(); i++)
for (unsigned i = 0; i < mMaterialShaders.Size(); i++)
{
mTextureEffects[i]->currentfixedcolormap = -1;
mMaterialShaders[i]->currentfixedcolormap = -1;
}
for (unsigned i = 0; i < mTextureEffectsNAT.Size(); i++)
for (unsigned i = 0; i < mMaterialShadersNAT.Size(); i++)
{
mTextureEffectsNAT[i]->currentfixedcolormap = -1;
mMaterialShadersNAT[i]->currentfixedcolormap = -1;
}
}
@ -387,17 +387,32 @@ public:
// indices 0-2 match the warping modes, 3 is brightmap, 4 no texture, the following are custom
if (!alphateston && eff <= 3)
{
return mTextureEffectsNAT[eff]; // Non-alphatest shaders are only created for default, warp1+2 and brightmap. The rest won't get used anyway
return mMaterialShadersNAT[eff]; // Non-alphatest shaders are only created for default, warp1+2 and brightmap. The rest won't get used anyway
}
if (eff < mTextureEffects.Size())
if (eff < mMaterialShaders.Size())
{
return mTextureEffects[eff];
return mMaterialShaders[eff];
}
return NULL;
}
};
#define FIRST_USER_SHADER 12
enum MaterialShaderIndex
{
SHADER_Default = 0,
SHADER_Warp1 = 1,
SHADER_Warp2 = 2,
SHADER_Brightmap = 3,
SHADER_NoTexture = 4,
SHADER_BasicFuzz = 5,
SHADER_SmoothFuzz = 6,
SHADER_SwirlyFuzz = 7,
SHADER_TranslucentFuzz = 8,
SHADER_JaggedFuzz = 9,
SHADER_NoiseFuzz = 10,
SHADER_SmoothNoiseFuzz = 11,
FIRST_USER_SHADER = 12
};
enum
{

View file

@ -438,7 +438,7 @@ int FMaterial::mMaxBound;
FMaterial::FMaterial(FTexture * tx, bool expanded)
{
mShaderIndex = 0;
mShaderIndex = SHADER_Default;
tex = tx;
// TODO: apply custom shader object here
@ -449,7 +449,7 @@ FMaterial::FMaterial(FTexture * tx, bool expanded)
*/
if (tx->bWarped)
{
mShaderIndex = tx->bWarped;
mShaderIndex = tx->bWarped; // This picks SHADER_Warp1 or SHADER_Warp2
tx->gl_info.shaderspeed = static_cast<FWarpTexture*>(tx)->GetSpeed();
}
else if (tx->bHasCanvas)
@ -474,7 +474,7 @@ FMaterial::FMaterial(FTexture * tx, bool expanded)
ValidateSysTexture(tx->gl_info.Brightmap, expanded);
FTextureLayer layer = {tx->gl_info.Brightmap, false};
mTextureLayers.Push(layer);
mShaderIndex = 3;
mShaderIndex = SHADER_Brightmap;
}
}
}
@ -804,7 +804,7 @@ void FMaterial::GetTexCoordInfo(FTexCoordInfo *tci, float x, float y) const
int FMaterial::GetAreas(FloatRect **pAreas) const
{
if (mShaderIndex == 0) // texture splitting can only be done if there's no attached effects
if (mShaderIndex == SHADER_Default) // texture splitting can only be done if there's no attached effects
{
FTexture *tex = mBaseLayer->tex;
*pAreas = tex->gl_info.areas;