- remove all uses of builtin matrices.

This commit is contained in:
Christoph Oelckers 2014-07-13 23:13:40 +02:00
parent 2214c0ac06
commit ce3653f6e1
6 changed files with 59 additions and 10 deletions

View file

@ -80,7 +80,7 @@ public:
#ifdef __GL_PCH_H // we need the system includes for this but we cannot include them ourselves without creating #define clashes. The affected files wouldn't try to draw anyway.
void RenderArray(unsigned int primtype, unsigned int offset, unsigned int count)
{
drawcalls.Clock();
//drawcalls.Clock();
if (gl.flags & RFL_BUFFER_STORAGE)
{
glDrawArrays(primtype, offset, count);
@ -89,7 +89,7 @@ public:
{
ImmRenderBuffer(primtype, offset, count);
}
drawcalls.Unclock();
//drawcalls.Unclock();
}
void RenderCurrent(FFlatVertex *newptr, unsigned int primtype, unsigned int *poffset = NULL, unsigned int *pcount = NULL)

View file

@ -301,8 +301,10 @@ void FRenderState::Apply()
void FRenderState::ApplyMatrices()
{
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(mViewMatrix.get());
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(mProjectionMatrix.get());
drawcalls.Clock();
if (GLRenderer->mShaderManager != NULL)
{
GLRenderer->mShaderManager->ApplyMatrices(&mProjectionMatrix, &mViewMatrix);
}
drawcalls.Unclock();
}

View file

@ -298,9 +298,9 @@ void GLFlat::DrawSubsectors(int pass, bool istrans)
if (gl_drawinfo->ss_renderflags[sub-subsectors]&renderflags || istrans)
{
if (pass == GLPASS_ALL) lightsapplied = SetupSubsectorLights(lightsapplied, sub);
drawcalls.Clock();
//drawcalls.Clock();
glDrawArrays(GL_TRIANGLE_FAN, index, sub->numlines);
drawcalls.Unclock();
//drawcalls.Unclock();
flatvertices += sub->numlines;
flatprimitives++;
}

View file

@ -51,6 +51,7 @@
#include "gl/system/gl_interface.h"
#include "gl/data/gl_data.h"
#include "gl/data/gl_matrix.h"
#include "gl/renderer/gl_renderer.h"
#include "gl/renderer/gl_renderstate.h"
#include "gl/system/gl_cvars.h"
@ -206,6 +207,8 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
timer_index = glGetUniformLocation(hShader, "timer");
lights_index = glGetUniformLocation(hShader, "lights");
fakevb_index = glGetUniformLocation(hShader, "fakeVB");
projectionmatrix_index = glGetUniformLocation(hShader, "ProjectionMatrix");
viewmatrix_index = glGetUniformLocation(hShader, "ViewMatrix");
modelmatrix_index = glGetUniformLocation(hShader, "ModelMatrix");
texturematrix_index = glGetUniformLocation(hShader, "TextureMatrix");
@ -277,6 +280,19 @@ FShader *FShaderManager::Compile (const char *ShaderName, const char *ShaderPath
return shader;
}
//==========================================================================
//
//
//
//==========================================================================
void FShader::ApplyMatrices(VSMatrix *proj, VSMatrix *view)
{
glProgramUniformMatrix4fv(hShader, projectionmatrix_index, 1, false, proj->get());
glProgramUniformMatrix4fv(hShader, viewmatrix_index, 1, false, view->get());
}
//==========================================================================
//
//
@ -486,6 +502,33 @@ FShader *FShaderManager::BindEffect(int effect)
}
//==========================================================================
//
//
//
//==========================================================================
EXTERN_CVAR(Int, gl_fuzztype)
void FShaderManager::ApplyMatrices(VSMatrix *proj, VSMatrix *view)
{
for (int i = 0; i <= 4; i++)
{
mTextureEffects[i]->ApplyMatrices(proj, view);
}
if (gl_fuzztype != 0)
{
mTextureEffects[4+gl_fuzztype]->ApplyMatrices(proj, view);
}
for (unsigned i = 12; i < mTextureEffects.Size(); i++)
{
mTextureEffects[i]->ApplyMatrices(proj, view);
}
for (int i = 0; i < MAX_EFFECTS; i++)
{
mEffectShaders[i]->ApplyMatrices(proj, view);
}
}
//==========================================================================
//
//

View file

@ -198,6 +198,8 @@ class FShader
int timer_index;
int lights_index;
int projectionmatrix_index;
int viewmatrix_index;
int modelmatrix_index;
int texturematrix_index;
public:
@ -230,6 +232,7 @@ public:
bool Bind();
unsigned int GetHandle() const { return hShader; }
void ApplyMatrices(VSMatrix *proj, VSMatrix *view);
};
@ -256,6 +259,7 @@ public:
FShader *BindEffect(int effect);
void SetActiveShader(FShader *sh);
void SetWarpSpeed(unsigned int eff, float speed);
void ApplyMatrices(VSMatrix *proj, VSMatrix *view);
FShader *GetActiveShader() const
{
return mActiveShader;

View file

@ -36,8 +36,8 @@ uniform ivec4 uLightRange;
// redefine the matrix names to what they actually represent.
#define ProjectionMatrix gl_ProjectionMatrix
#define ViewMatrix gl_ModelViewMatrix
uniform mat4 ProjectionMatrix;
uniform mat4 ViewMatrix;
uniform mat4 ModelMatrix;
uniform mat4 TextureMatrix;