- no, we do not want to use global variables to pass parameters around...

This commit is contained in:
Christoph Oelckers 2018-04-02 18:13:18 +02:00
parent 60aebff4a1
commit 5d94af913a
6 changed files with 14 additions and 14 deletions

View file

@ -54,8 +54,6 @@
CVAR(Bool, gl_light_models, true, CVAR_ARCHIVE)
extern int modellightindex;
VSMatrix FGLModelRenderer::GetViewToWorldMatrix()
{
VSMatrix objectToWorldMatrix;
@ -359,9 +357,9 @@ void FModelVertexBuffer::SetupFrame(FModelRenderer *renderer, unsigned int frame
//
//===========================================================================
void gl_RenderModel(GLSprite * spr)
void gl_RenderModel(GLSprite * spr, int mli)
{
FGLModelRenderer renderer;
FGLModelRenderer renderer(mli);
renderer.RenderModel(spr->x, spr->y, spr->z, spr->modelframe, spr->actor);
}
@ -371,8 +369,8 @@ void gl_RenderModel(GLSprite * spr)
//
//===========================================================================
void gl_RenderHUDModel(DPSprite *psp, float ofsX, float ofsY)
void gl_RenderHUDModel(DPSprite *psp, float ofsX, float ofsY, int mli)
{
FGLModelRenderer renderer;
FGLModelRenderer renderer(mli);
renderer.RenderHUDModel(psp, ofsX, ofsY);
}

View file

@ -32,7 +32,10 @@ class GLSprite;
class FGLModelRenderer : public FModelRenderer
{
int modellightindex = -1;
public:
FGLModelRenderer(int mli) : modellightindex(mli)
{}
void BeginDrawModel(AActor *actor, FSpriteModelFrame *smf, const VSMatrix &objectToWorldMatrix) override;
void EndDrawModel(AActor *actor, FSpriteModelFrame *smf) override;
IModelVertexBuffer *CreateVertexBuffer(bool needindex, bool singleframe) override;
@ -48,5 +51,5 @@ public:
double GetTimeFloat() override;
};
void gl_RenderModel(GLSprite * spr);
void gl_RenderHUDModel(DPSprite *psp, float ofsx, float ofsy);
void gl_RenderModel(GLSprite * spr, int mli);
void gl_RenderHUDModel(DPSprite *psp, float ofsx, float ofsy, int mli);

View file

@ -79,7 +79,6 @@ EXTERN_CVAR (Bool, r_debug_disable_vis_filter)
extern TArray<spritedef_t> sprites;
extern TArray<spriteframe_t> SpriteFrames;
extern uint32_t r_renderercaps;
extern int modellightindex;
enum HWRenderStyle
{
@ -474,7 +473,7 @@ void GLSprite::Draw(int pass)
}
else
{
gl_RenderModel(this);
gl_RenderModel(this, dynlightindex);
}
}

View file

@ -44,8 +44,6 @@
#include "gl/textures/gl_material.h"
#include "gl/dynlights/gl_lightbuffer.h"
FDynLightData modellightdata;
int modellightindex = -1;
template<class T>
T smoothstep(const T edge0, const T edge1, const T x)
@ -198,6 +196,8 @@ void BSPWalkCircle(float x, float y, float radiusSquared, const Callback &callba
int gl_SetDynModelLight(AActor *self, int dynlightindex)
{
static FDynLightData modellightdata; // If this ever gets multithreaded, this variable must either be made non-static or thread_local.
// For deferred light mode this function gets called twice. First time for list upload, and second for draw.
if (gl.lightmethod == LM_DEFERRED && dynlightindex != -1)
{

View file

@ -73,7 +73,7 @@ void GLSceneDrawer::DrawPSprite (player_t * player,DPSprite *psp, float sx, floa
// [BB] In the HUD model step we just render the model and break out.
if ( hudModelStep )
{
gl_RenderHUDModel(psp, sx, sy);
gl_RenderHUDModel(psp, sx, sy, weapondynlightindex[psp]);
return;
}

View file

@ -314,7 +314,7 @@ void gl_PrecacheTexture(uint8_t *texhitlist, TMap<PClassActor*, bool> &actorhitl
}
// cache all used models
FGLModelRenderer renderer;
FGLModelRenderer renderer(-1);
for (unsigned i = 0; i < Models.Size(); i++)
{
if (modellist[i])