From bcea70c226070b44cca2c20ff7d4cf29d5b018fd Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 16 Feb 2026 18:43:26 +0000 Subject: Add Renderable::preFrame for doing non-const frame prep work In theory, this phase should be parallelisable before being pushed out by the render loop. --- application/resviewer.cpp | 1 + assetFactory/asset.h | 2 +- gfx/renderable.cpp | 5 +++++ gfx/renderable.h | 1 + ui/gameMainWindow.cpp | 6 ++++++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/application/resviewer.cpp b/application/resviewer.cpp index c82017b..e0c36f6 100644 --- a/application/resviewer.cpp +++ b/application/resviewer.cpp @@ -141,6 +141,7 @@ private: selectedAssetId = asset.first; selectedAsset = renderable; location = asset.second->createAt(position); + renderable->preFrame(camera); } } } diff --git a/assetFactory/asset.h b/assetFactory/asset.h index 061a7c8..d8b42f6 100644 --- a/assetFactory/asset.h +++ b/assetFactory/asset.h @@ -12,7 +12,7 @@ class Location; class Asset : public Persistence::Persistable, public StdTypeDefs { public: - using ManyPtr = ManySharedPtr; + using ManyPtr = ManySharedPtr; using TexturePtr = std::shared_ptr; /// Used only for the asset viewer diff --git a/gfx/renderable.cpp b/gfx/renderable.cpp index 27f2459..7df5851 100644 --- a/gfx/renderable.cpp +++ b/gfx/renderable.cpp @@ -1,5 +1,10 @@ #include "renderable.h" +void +Renderable::preFrame(const Frustum &) +{ +} + void Renderable::lights(const SceneShader &) const { diff --git a/gfx/renderable.h b/gfx/renderable.h index 140c570..d7f593a 100644 --- a/gfx/renderable.h +++ b/gfx/renderable.h @@ -13,6 +13,7 @@ public: virtual ~Renderable() = default; DEFAULT_MOVE_COPY(Renderable); + virtual void preFrame(const Frustum &); virtual void render(const SceneShader & shader, const Frustum &) const = 0; virtual void lights(const SceneShader & shader) const; virtual void shadows(const ShadowMapper & shadowMapper, const Frustum &) const; diff --git a/ui/gameMainWindow.cpp b/ui/gameMainWindow.cpp index dbbf8a7..eec5512 100644 --- a/ui/gameMainWindow.cpp +++ b/ui/gameMainWindow.cpp @@ -85,6 +85,12 @@ GameMainWindow::handleInput(const SDL_Event & event) void GameMainWindow::render() { + for (const auto & [assetId, asset] : gameState->assets) { + if (const auto renderable = asset.getAs()) { + renderable->preFrame(camera); + } + } + gameState->world.apply(&Renderable::preFrame, camera); SceneRenderer::render(*this); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -- cgit v1.3