mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 23:32:02 +00:00
- make the shader timer part of the render state.
This commit is contained in:
parent
637aa9d77e
commit
bdf5bbd34e
5 changed files with 12 additions and 48 deletions
|
@ -88,20 +88,6 @@ void FRenderState::Reset()
|
||||||
mClipHeightBottom = -65536.f;
|
mClipHeightBottom = -65536.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// Set texture shader info
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void FRenderState::SetupShader(int &shaderindex, float warptime)
|
|
||||||
{
|
|
||||||
mEffectState = shaderindex;
|
|
||||||
if (shaderindex > 0) GLRenderer->mShaderManager->SetWarpSpeed(shaderindex, warptime);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// Apply shader settings
|
// Apply shader settings
|
||||||
|
@ -149,6 +135,7 @@ bool FRenderState::ApplyShader()
|
||||||
activeShader->muInterpolationFactor.Set(mInterpolationFactor);
|
activeShader->muInterpolationFactor.Set(mInterpolationFactor);
|
||||||
activeShader->muClipHeightTop.Set(mClipHeightTop);
|
activeShader->muClipHeightTop.Set(mClipHeightTop);
|
||||||
activeShader->muClipHeightBottom.Set(mClipHeightBottom);
|
activeShader->muClipHeightBottom.Set(mClipHeightBottom);
|
||||||
|
activeShader->muTimer.Set(gl_frameMS * mShaderTimer / 1000.f);
|
||||||
|
|
||||||
#ifndef CORE_PROFILE
|
#ifndef CORE_PROFILE
|
||||||
if (!(gl.flags & RFL_COREPROFILE))
|
if (!(gl.flags & RFL_COREPROFILE))
|
||||||
|
|
|
@ -61,6 +61,7 @@ class FRenderState
|
||||||
float mClipHeightTop, mClipHeightBottom;
|
float mClipHeightTop, mClipHeightBottom;
|
||||||
bool mModelMatrixEnabled;
|
bool mModelMatrixEnabled;
|
||||||
bool mTextureMatrixEnabled;
|
bool mTextureMatrixEnabled;
|
||||||
|
float mShaderTimer;
|
||||||
|
|
||||||
FVertexBuffer *mVertexBuffer, *mCurrentVertexBuffer;
|
FVertexBuffer *mVertexBuffer, *mCurrentVertexBuffer;
|
||||||
FStateVec4 mColor;
|
FStateVec4 mColor;
|
||||||
|
@ -97,7 +98,12 @@ public:
|
||||||
|
|
||||||
void Reset();
|
void Reset();
|
||||||
|
|
||||||
void SetupShader(int &shaderindex, float warptime);
|
void SetShader(int shaderindex, float warptime)
|
||||||
|
{
|
||||||
|
mEffectState = shaderindex;
|
||||||
|
mShaderTimer = warptime;
|
||||||
|
}
|
||||||
|
|
||||||
void Apply();
|
void Apply();
|
||||||
void ApplyMatrices();
|
void ApplyMatrices();
|
||||||
|
|
||||||
|
|
|
@ -210,8 +210,8 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
|
||||||
muClipHeightTop.Init(hShader, "uClipHeightTop");
|
muClipHeightTop.Init(hShader, "uClipHeightTop");
|
||||||
muClipHeightBottom.Init(hShader, "uClipHeightBottom");
|
muClipHeightBottom.Init(hShader, "uClipHeightBottom");
|
||||||
muAlphaThreshold.Init(hShader, "uAlphaThreshold");
|
muAlphaThreshold.Init(hShader, "uAlphaThreshold");
|
||||||
|
muTimer.Init(hShader, "timer");
|
||||||
|
|
||||||
timer_index = glGetUniformLocation(hShader, "timer");
|
|
||||||
lights_index = glGetUniformLocation(hShader, "lights");
|
lights_index = glGetUniformLocation(hShader, "lights");
|
||||||
fakevb_index = glGetUniformLocation(hShader, "fakeVB");
|
fakevb_index = glGetUniformLocation(hShader, "fakeVB");
|
||||||
projectionmatrix_index = glGetUniformLocation(hShader, "ProjectionMatrix");
|
projectionmatrix_index = glGetUniformLocation(hShader, "ProjectionMatrix");
|
||||||
|
@ -481,34 +481,6 @@ void FShaderManager::SetActiveShader(FShader *sh)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// To avoid maintenance this will be set when a warped texture is bound
|
|
||||||
// because at that point the draw buffer needs to be flushed anyway.
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void FShaderManager::SetWarpSpeed(unsigned int eff, float speed)
|
|
||||||
{
|
|
||||||
// indices 0-2 match the warping modes, 3 is brightmap, 4 no texture, the following are custom
|
|
||||||
if (eff < mTextureEffects.Size())
|
|
||||||
{
|
|
||||||
FShader *sh = mTextureEffects[eff];
|
|
||||||
|
|
||||||
float warpphase = gl_frameMS * speed / 1000.f;
|
|
||||||
if (gl.flags & RFL_SEPARATE_SHADER_OBJECTS)
|
|
||||||
{
|
|
||||||
glProgramUniform1f(sh->GetHandle(), sh->timer_index, warpphase);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// not so pretty...
|
|
||||||
sh->Bind();
|
|
||||||
glUniform1f(sh->timer_index, warpphase);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -199,8 +199,8 @@ class FShader
|
||||||
FBufferedUniform1f muClipHeightTop;
|
FBufferedUniform1f muClipHeightTop;
|
||||||
FBufferedUniform1f muClipHeightBottom;
|
FBufferedUniform1f muClipHeightBottom;
|
||||||
FBufferedUniform1f muAlphaThreshold;
|
FBufferedUniform1f muAlphaThreshold;
|
||||||
|
FBufferedUniform1f muTimer;
|
||||||
|
|
||||||
int timer_index;
|
|
||||||
int lights_index;
|
int lights_index;
|
||||||
int projectionmatrix_index;
|
int projectionmatrix_index;
|
||||||
int viewmatrix_index;
|
int viewmatrix_index;
|
||||||
|
@ -262,7 +262,6 @@ public:
|
||||||
int Find(const char *mame);
|
int Find(const char *mame);
|
||||||
FShader *BindEffect(int effect);
|
FShader *BindEffect(int effect);
|
||||||
void SetActiveShader(FShader *sh);
|
void SetActiveShader(FShader *sh);
|
||||||
void SetWarpSpeed(unsigned int eff, float speed);
|
|
||||||
void ApplyMatrices(VSMatrix *proj, VSMatrix *view);
|
void ApplyMatrices(VSMatrix *proj, VSMatrix *view);
|
||||||
FShader *GetActiveShader() const
|
FShader *GetActiveShader() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -737,7 +737,7 @@ void FMaterial::Bind(int clampmode, int translation, int overrideshader)
|
||||||
int maxbound = 0;
|
int maxbound = 0;
|
||||||
bool allowhires = tex->xScale == FRACUNIT && tex->yScale == FRACUNIT;
|
bool allowhires = tex->xScale == FRACUNIT && tex->yScale == FRACUNIT;
|
||||||
|
|
||||||
gl_RenderState.SetupShader(shaderindex, tex->gl_info.shaderspeed);
|
gl_RenderState.SetShader(shaderindex, tex->gl_info.shaderspeed);
|
||||||
|
|
||||||
if (tex->bHasCanvas || tex->bWarped) clampmode = 0;
|
if (tex->bHasCanvas || tex->bWarped) clampmode = 0;
|
||||||
else if (clampmode != -1) clampmode &= 3;
|
else if (clampmode != -1) clampmode &= 3;
|
||||||
|
@ -784,7 +784,7 @@ void FMaterial::BindPatch(int translation, int overrideshader, bool alphatexture
|
||||||
int shaderindex = overrideshader > 0? overrideshader : mShaderIndex;
|
int shaderindex = overrideshader > 0? overrideshader : mShaderIndex;
|
||||||
int maxbound = 0;
|
int maxbound = 0;
|
||||||
|
|
||||||
gl_RenderState.SetupShader(shaderindex, tex->gl_info.shaderspeed);
|
gl_RenderState.SetShader(shaderindex, tex->gl_info.shaderspeed);
|
||||||
|
|
||||||
const FHardwareTexture *glpatch = mBaseLayer->BindPatch(0, translation, alphatexture);
|
const FHardwareTexture *glpatch = mBaseLayer->BindPatch(0, translation, alphatexture);
|
||||||
// The only multitexture effect usable on sprites is the brightmap.
|
// The only multitexture effect usable on sprites is the brightmap.
|
||||||
|
|
Loading…
Reference in a new issue