diff --git a/src/common/models/modelrenderer.h b/src/common/models/modelrenderer.h index cf1d7648a..538712f26 100644 --- a/src/common/models/modelrenderer.h +++ b/src/common/models/modelrenderer.h @@ -25,5 +25,6 @@ class FModelRenderer virtual void DrawArrays(int start, int count) = 0; virtual void DrawElements(int numIndices, size_t offset) = 0; virtual void SetupFrame(FModel* model, unsigned int frame1, unsigned int frame2, unsigned int size, int boneStartIndex) {}; + virtual int UploadBones(const TArray<VSMatrix>& bones) = 0; }; diff --git a/src/common/models/models_iqm.cpp b/src/common/models/models_iqm.cpp index d22f293ae..5fac867a9 100644 --- a/src/common/models/models_iqm.cpp +++ b/src/common/models/models_iqm.cpp @@ -470,7 +470,7 @@ double IQMModel::FindFramerate(FName name) void IQMModel::RenderFrame(FModelRenderer* renderer, FGameTexture* skin, int frame1, int frame2, double inter, FTranslationID translation, const FTextureID* surfaceskinids, int boneStartPosition, void * act) { - renderer->SetupFrame(this, 0, 0, NumVertices, boneStartPosition >= 0 ? boneStartPosition : screen->mBones->UploadBones(boneData)); + renderer->SetupFrame(this, 0, 0, NumVertices, boneStartPosition >= 0 ? boneStartPosition : renderer->UploadBones(boneData)); FGameTexture* lastSkin = nullptr; for (unsigned i = 0; i < Meshes.Size(); i++) diff --git a/src/r_data/models.cpp b/src/r_data/models.cpp index cea33bd5c..73c332a14 100644 --- a/src/r_data/models.cpp +++ b/src/r_data/models.cpp @@ -564,7 +564,7 @@ void RenderFrameModels(FModelRenderer *renderer, FLevelLocals *Level, const FSpr if(smf_flags & MDL_MODELSAREATTACHMENTS || is_decoupled) { - boneStartingPosition = boneData ? screen->mBones->UploadBones(*boneData) : -1; + boneStartingPosition = boneData ? renderer->UploadBones(*boneData) : -1; evaluatedSingle = true; } diff --git a/src/rendering/hwrenderer/hw_models.cpp b/src/rendering/hwrenderer/hw_models.cpp index 4a9ea5758..cd99cc4e2 100644 --- a/src/rendering/hwrenderer/hw_models.cpp +++ b/src/rendering/hwrenderer/hw_models.cpp @@ -169,6 +169,11 @@ void FHWModelRenderer::DrawElements(int numIndices, size_t offset) // //=========================================================================== +int FHWModelRenderer::UploadBones(const TArray<VSMatrix>& bones) +{ + return state.UploadBones(bones); +} + void FHWModelRenderer::SetupFrame(FModel *model, unsigned int frame1, unsigned int frame2, unsigned int size, int boneStartIndex) { auto mdbuff = static_cast<FModelVertexBuffer*>(model->GetVertexBuffer(GetType())); diff --git a/src/rendering/hwrenderer/hw_models.h b/src/rendering/hwrenderer/hw_models.h index 1507e5ff4..b19ad23a7 100644 --- a/src/rendering/hwrenderer/hw_models.h +++ b/src/rendering/hwrenderer/hw_models.h @@ -60,6 +60,7 @@ class FHWModelRenderer : public FModelRenderer void DrawArrays(int start, int count) override; void DrawElements(int numIndices, size_t offset) override; void SetupFrame(FModel *model, unsigned int frame1, unsigned int frame2, unsigned int size, int boneStartIndex) override; + int UploadBones(const TArray<VSMatrix>& bones) override; };