diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-02-16 18:43:26 +0000 |
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-02-16 18:43:26 +0000 |
| commit | bcea70c226070b44cca2c20ff7d4cf29d5b018fd (patch) | |
| tree | 9fc4e8ed91d4e86aad81d92633127324e58210b2 | |
| parent | Support for testing if a point/sphere is within a Frustum (diff) | |
| download | ilt-bcea70c226070b44cca2c20ff7d4cf29d5b018fd.tar.bz2 ilt-bcea70c226070b44cca2c20ff7d4cf29d5b018fd.tar.xz ilt-bcea70c226070b44cca2c20ff7d4cf29d5b018fd.zip | |
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.
| -rw-r--r-- | application/resviewer.cpp | 1 | ||||
| -rw-r--r-- | assetFactory/asset.h | 2 | ||||
| -rw-r--r-- | gfx/renderable.cpp | 5 | ||||
| -rw-r--r-- | gfx/renderable.h | 1 | ||||
| -rw-r--r-- | ui/gameMainWindow.cpp | 6 |
5 files changed, 14 insertions, 1 deletions
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<Asset> { public: - using ManyPtr = ManySharedPtr<Asset, const Renderable>; + using ManyPtr = ManySharedPtr<Asset, Renderable>; using TexturePtr = std::shared_ptr<TextureAtlas>; /// 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,6 +1,11 @@ #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>()) { + renderable->preFrame(camera); + } + } + gameState->world.apply<const Renderable>(&Renderable::preFrame, camera); SceneRenderer::render(*this); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
