- changed rendering of glowing walls so that it doesn't require an additional vertex attribute, just pass the floor and ceiling planes as uniforms.

This commit is contained in:
Christoph Oelckers 2014-05-10 17:09:43 +02:00
commit b09405a8bd
9 changed files with 57 additions and 49 deletions

View file

@ -237,7 +237,18 @@ bool FRenderState::ApplyShader()
{
glUniform4fv(activeShader->glowtopcolor_index, 1, mGlowTop.vec);
glUniform4fv(activeShader->glowbottomcolor_index, 1, mGlowBottom.vec);
glUniform4fv(activeShader->glowtopplane_index, 1, mGlowTopPlane.vec);
glUniform4fv(activeShader->glowbottomplane_index, 1, mGlowBottomPlane.vec);
activeShader->currentglowstate = 1;
}
else if (activeShader->currentglowstate)
{
// if glowing is on, disable it.
glUniform4f(activeShader->glowtopcolor_index, 0.f, 0.f, 0.f, 0.f);
glUniform4f(activeShader->glowbottomcolor_index, 0.f, 0.f, 0.f, 0.f);
activeShader->currentglowstate = 0;
}
if (mLightEnabled)
{
glUniform3iv(activeShader->lightrange_index, 1, mNumLights);

View file

@ -3,6 +3,7 @@
#include <string.h>
#include "c_cvars.h"
#include "r_defs.h"
EXTERN_CVAR(Bool, gl_direct_state_change)
@ -105,6 +106,7 @@ class FRenderState
FStateVec3 mCameraPos;
FStateVec4 mGlowTop, mGlowBottom;
FStateVec4 mGlowTopPlane, mGlowBottomPlane;
PalEntry mFogColor;
float mFogDensity;
@ -184,7 +186,13 @@ public:
mGlowBottom.Set(b[0], b[1], b[2], b[3]);
}
void SetDynLight(float r,float g, float b)
void SetGlowPlanes(const secplane_t &top, const secplane_t &bottom)
{
mGlowTopPlane.Set(FIXED2FLOAT(top.a), FIXED2FLOAT(top.b), FIXED2FLOAT(top.ic), FIXED2FLOAT(top.d));
mGlowBottomPlane.Set(FIXED2FLOAT(bottom.a), FIXED2FLOAT(bottom.b), FIXED2FLOAT(bottom.ic), FIXED2FLOAT(bottom.d));
}
void SetDynLight(float r, float g, float b)
{
mDynLight[0] = r;
mDynLight[1] = g;