From 51acf3053cc5a2b6167f065cb9304637f0af3ae5 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 27 Oct 2018 23:33:22 +0200 Subject: [PATCH] - fixed model vertex buffer setup. Setting the buffer and its attribute bindings must be one step, not twp. With Vulkan this is a single API call. This removes the now obsolete SetVertexBuffer method from the model renderer's interface. --- src/gl/models/gl_models.cpp | 20 +++----------------- src/gl/models/gl_models.h | 3 +-- src/polyrenderer/scene/poly_model.cpp | 4 ---- src/polyrenderer/scene/poly_model.h | 1 - src/r_data/models/models.cpp | 1 - src/r_data/models/models.h | 1 - src/swrenderer/things/r_model.cpp | 4 ---- src/swrenderer/things/r_model.h | 1 - 8 files changed, 4 insertions(+), 31 deletions(-) diff --git a/src/gl/models/gl_models.cpp b/src/gl/models/gl_models.cpp index cb3230a5b..13ee5ade4 100644 --- a/src/gl/models/gl_models.cpp +++ b/src/gl/models/gl_models.cpp @@ -110,11 +110,6 @@ IModelVertexBuffer *FGLModelRenderer::CreateVertexBuffer(bool needindex, bool si return new FModelVertexBuffer(needindex, singleframe); } -void FGLModelRenderer::SetVertexBuffer(IModelVertexBuffer *buffer) -{ - static_cast(buffer)->Bind(state); -} - void FGLModelRenderer::ResetVertexBuffer() { GLRenderer->mVBO->Bind(state); @@ -168,18 +163,6 @@ FModelVertexBuffer::FModelVertexBuffer(bool needindex, bool singleframe) // //=========================================================================== -void FModelVertexBuffer::Bind(FRenderState &state) -{ - state.SetVertexBuffer(mVertexBuffer, mIndexFrame[0], mIndexFrame[1]); - if (mIndexBuffer) state.SetIndexBuffer(mIndexBuffer); -} - -//=========================================================================== -// -// -// -//=========================================================================== - FModelVertexBuffer::~FModelVertexBuffer() { if (mIndexBuffer) delete mIndexBuffer; @@ -242,4 +225,7 @@ void FModelVertexBuffer::SetupFrame(FModelRenderer *renderer, unsigned int frame { mIndexFrame[0] = frame1; mIndexFrame[1] = frame2; + auto state = static_cast(renderer)->state; + state.SetVertexBuffer(mVertexBuffer, mIndexFrame[0], mIndexFrame[1]); + if (mIndexBuffer) state.SetIndexBuffer(mIndexBuffer); } diff --git a/src/gl/models/gl_models.h b/src/gl/models/gl_models.h index a6b31660b..01d596879 100644 --- a/src/gl/models/gl_models.h +++ b/src/gl/models/gl_models.h @@ -49,11 +49,11 @@ public: void UnlockIndexBuffer() override; void SetupFrame(FModelRenderer *renderer, unsigned int frame1, unsigned int frame2, unsigned int size) override; - void Bind(FRenderState &state); }; class FGLModelRenderer : public FModelRenderer { + friend class FModelVertexBuffer; int modellightindex = -1; FDrawInfo *di; FRenderState &state; @@ -64,7 +64,6 @@ public: void BeginDrawModel(AActor *actor, FSpriteModelFrame *smf, const VSMatrix &objectToWorldMatrix, bool mirrored) override; void EndDrawModel(AActor *actor, FSpriteModelFrame *smf) override; IModelVertexBuffer *CreateVertexBuffer(bool needindex, bool singleframe) override; - void SetVertexBuffer(IModelVertexBuffer *buffer) override; void ResetVertexBuffer() override; VSMatrix GetViewToWorldMatrix() override; void BeginDrawHUDModel(AActor *actor, const VSMatrix &objectToWorldMatrix, bool mirrored) override; diff --git a/src/polyrenderer/scene/poly_model.cpp b/src/polyrenderer/scene/poly_model.cpp index a49212989..4b5cccf62 100644 --- a/src/polyrenderer/scene/poly_model.cpp +++ b/src/polyrenderer/scene/poly_model.cpp @@ -143,10 +143,6 @@ IModelVertexBuffer *PolyModelRenderer::CreateVertexBuffer(bool needindex, bool s return new PolyModelVertexBuffer(needindex, singleframe); } -void PolyModelRenderer::SetVertexBuffer(IModelVertexBuffer *buffer) -{ -} - void PolyModelRenderer::ResetVertexBuffer() { } diff --git a/src/polyrenderer/scene/poly_model.h b/src/polyrenderer/scene/poly_model.h index bb3008a19..11e61de7b 100644 --- a/src/polyrenderer/scene/poly_model.h +++ b/src/polyrenderer/scene/poly_model.h @@ -41,7 +41,6 @@ public: void BeginDrawModel(AActor *actor, FSpriteModelFrame *smf, const VSMatrix &objectToWorldMatrix, bool mirrored) override; void EndDrawModel(AActor *actor, FSpriteModelFrame *smf) override; IModelVertexBuffer *CreateVertexBuffer(bool needindex, bool singleframe) override; - void SetVertexBuffer(IModelVertexBuffer *buffer) override; void ResetVertexBuffer() override; VSMatrix GetViewToWorldMatrix() override; void BeginDrawHUDModel(AActor *actor, const VSMatrix &objectToWorldMatrix, bool mirrored) override; diff --git a/src/r_data/models/models.cpp b/src/r_data/models/models.cpp index 178aabb6c..5b4bf520b 100644 --- a/src/r_data/models/models.cpp +++ b/src/r_data/models/models.cpp @@ -270,7 +270,6 @@ void FModelRenderer::RenderFrameModels(const FSpriteModelFrame *smf, const FStat FModel * mdl = Models[smf->modelIDs[i]]; FTexture *tex = smf->skinIDs[i].isValid() ? TexMan(smf->skinIDs[i]) : nullptr; mdl->BuildVertexBuffer(this); - SetVertexBuffer(mdl->GetVertexBuffer(this)); mdl->PushSpriteMDLFrame(smf, i); diff --git a/src/r_data/models/models.h b/src/r_data/models/models.h index e4da6efac..ba4ed668f 100644 --- a/src/r_data/models/models.h +++ b/src/r_data/models/models.h @@ -70,7 +70,6 @@ public: virtual IModelVertexBuffer *CreateVertexBuffer(bool needindex, bool singleframe) = 0; - virtual void SetVertexBuffer(IModelVertexBuffer *buffer) = 0; virtual void ResetVertexBuffer() = 0; virtual VSMatrix GetViewToWorldMatrix() = 0; diff --git a/src/swrenderer/things/r_model.cpp b/src/swrenderer/things/r_model.cpp index 70995c32c..392618708 100644 --- a/src/swrenderer/things/r_model.cpp +++ b/src/swrenderer/things/r_model.cpp @@ -218,10 +218,6 @@ namespace swrenderer return new SWModelVertexBuffer(needindex, singleframe); } - void SWModelRenderer::SetVertexBuffer(IModelVertexBuffer *buffer) - { - } - void SWModelRenderer::ResetVertexBuffer() { } diff --git a/src/swrenderer/things/r_model.h b/src/swrenderer/things/r_model.h index bd9b868dc..6f83daf76 100644 --- a/src/swrenderer/things/r_model.h +++ b/src/swrenderer/things/r_model.h @@ -65,7 +65,6 @@ namespace swrenderer void BeginDrawModel(AActor *actor, FSpriteModelFrame *smf, const VSMatrix &objectToWorldMatrix, bool mirrored) override; void EndDrawModel(AActor *actor, FSpriteModelFrame *smf) override; IModelVertexBuffer *CreateVertexBuffer(bool needindex, bool singleframe) override; - void SetVertexBuffer(IModelVertexBuffer *buffer) override; void ResetVertexBuffer() override; VSMatrix GetViewToWorldMatrix() override; void BeginDrawHUDModel(AActor *actor, const VSMatrix &objectToWorldMatrix, bool mirrored) override;