From ffcb6cb70a5940b45d483a506b5ce0d25b4a3bde Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 29 Jun 2014 11:00:21 +0200 Subject: [PATCH] - added second vertex coordinate attribute for model interpolation. --- src/gl/renderer/gl_renderstate.cpp | 9 ++++----- src/gl/renderer/gl_renderstate.h | 13 ++++++------- src/gl/shaders/gl_shader.cpp | 2 ++ src/gl/shaders/gl_shader.h | 7 +++++++ src/gl/system/gl_framebuffer.cpp | 5 +++++ wadsrc/static/shaders/glsl/main.vp | 4 +++- wadsrc/static/shaders/glsl/shaderdefs.i | 1 + 7 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/gl/renderer/gl_renderstate.cpp b/src/gl/renderer/gl_renderstate.cpp index 8ce695cbc..cf8604924 100644 --- a/src/gl/renderer/gl_renderstate.cpp +++ b/src/gl/renderer/gl_renderstate.cpp @@ -66,11 +66,8 @@ void FRenderState::Reset() { mTextureEnabled = true; mBrightmapEnabled = mFogEnabled = mGlowEnabled = mLightEnabled = false; - ffTextureEnabled = ffFogEnabled = false; - mSpecialEffect = ffSpecialEffect = EFF_NONE; - mFogColor.d = ffFogColor.d = -1; - ffFogDensity = 0; - mTextureMode = ffTextureMode = -1; + mFogColor.d = -1; + mTextureMode = -1; mDesaturation = 0; mSrcBlend = GL_SRC_ALPHA; mDstBlend = GL_ONE_MINUS_SRC_ALPHA; @@ -85,6 +82,7 @@ void FRenderState::Reset() mVertexBuffer = mCurrentVertexBuffer = NULL; mColormapState = CM_DEFAULT; mLightParms[3] = -1.f; + mSpecialEffect = EFF_NONE; } @@ -144,6 +142,7 @@ bool FRenderState::ApplyShader() activeShader->muFogColor.Set(mFogColor); activeShader->muObjectColor.Set(mObjectColor); activeShader->muDynLightColor.Set(mDynColor); + activeShader->muInterpolationFactor.Set(mInterpolationFactor); if (mGlowEnabled) { diff --git a/src/gl/renderer/gl_renderstate.h b/src/gl/renderer/gl_renderstate.h index c3ca1e273..1bfaf7135 100644 --- a/src/gl/renderer/gl_renderstate.h +++ b/src/gl/renderer/gl_renderstate.h @@ -56,6 +56,7 @@ class FRenderState bool mAlphaTest; int mBlendEquation; bool m2D; + float mInterpolationFactor; FVertexBuffer *mVertexBuffer, *mCurrentVertexBuffer; FStateVec4 mColor; @@ -75,13 +76,6 @@ class FRenderState bool glAlphaTest; int glBlendEquation; - bool ffTextureEnabled; - bool ffFogEnabled; - int ffTextureMode; - int ffSpecialEffect; - PalEntry ffFogColor; - float ffFogDensity; - bool ApplyShader(); public: @@ -290,6 +284,11 @@ public: { m2D = on; } + + void SetInterpolationFactor(float fac) + { + mInterpolationFactor = fac; + } }; extern FRenderState gl_RenderState; diff --git a/src/gl/shaders/gl_shader.cpp b/src/gl/shaders/gl_shader.cpp index 33381eb88..76049eb1f 100644 --- a/src/gl/shaders/gl_shader.cpp +++ b/src/gl/shaders/gl_shader.cpp @@ -192,10 +192,12 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char * muGlowBottomPlane.Init(hShader, "uGlowBottomPlane"); muGlowTopPlane.Init(hShader, "uGlowTopPlane"); muFixedColormap.Init(hShader, "uFixedColormap"); + muInterpolationFactor.Init(hShader, "uInterpolationFactor"); timer_index = glGetUniformLocation(hShader, "timer"); lights_index = glGetUniformLocation(hShader, "lights"); + glBindAttribLocation(hShader, VATTR_VERTEX2, "aVertex2"); glUseProgram(hShader); diff --git a/src/gl/shaders/gl_shader.h b/src/gl/shaders/gl_shader.h index 3497ed3b0..173a1c781 100644 --- a/src/gl/shaders/gl_shader.h +++ b/src/gl/shaders/gl_shader.h @@ -7,6 +7,12 @@ extern bool gl_shaderactive; +enum +{ + VATTR_VERTEX2 = 15 +}; + + //========================================================================== // // @@ -186,6 +192,7 @@ class FShader FUniform4f muGlowTopColor; FUniform4f muGlowBottomPlane; FUniform4f muGlowTopPlane; + FBufferedUniform1f muInterpolationFactor; int timer_index; int lights_index; diff --git a/src/gl/system/gl_framebuffer.cpp b/src/gl/system/gl_framebuffer.cpp index d22c6a5ed..30f791d50 100644 --- a/src/gl/system/gl_framebuffer.cpp +++ b/src/gl/system/gl_framebuffer.cpp @@ -386,6 +386,11 @@ FNativePalette *OpenGLFrameBuffer::CreatePalette(FRemapTable *remap) //========================================================================== bool OpenGLFrameBuffer::Begin2D(bool) { + glActiveTexture(GL_TEXTURE7); + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glActiveTexture(GL_TEXTURE0); + glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glMatrixMode(GL_PROJECTION); diff --git a/wadsrc/static/shaders/glsl/main.vp b/wadsrc/static/shaders/glsl/main.vp index 2cde5324b..5e7890a61 100644 --- a/wadsrc/static/shaders/glsl/main.vp +++ b/wadsrc/static/shaders/glsl/main.vp @@ -1,10 +1,12 @@ +in vec4 aVertex2; out vec4 pixelpos; out vec2 glowdist; + void main() { - vec4 worldcoord = ModelMatrix * gl_Vertex; + vec4 worldcoord = /* ModelMatrix * */ mix(gl_Vertex, aVertex2, uInterpolationFactor); vec4 eyeCoordPos = ViewMatrix * worldcoord; gl_FrontColor = gl_Color; diff --git a/wadsrc/static/shaders/glsl/shaderdefs.i b/wadsrc/static/shaders/glsl/shaderdefs.i index efedca5e5..5a36473bf 100644 --- a/wadsrc/static/shaders/glsl/shaderdefs.i +++ b/wadsrc/static/shaders/glsl/shaderdefs.i @@ -9,6 +9,7 @@ uniform vec4 uObjectColor; uniform vec4 uDynLightColor; uniform vec4 uFogColor; uniform float uDesaturationFactor; +uniform float uInterpolationFactor; // Fixed colormap stuff uniform int uFixedColormap; // 0, when no fixed colormap, 1 for a light value, 2 for a color blend, 3 for a fog layer