summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--application/resviewer.cpp1
-rw-r--r--assetFactory/asset.h2
-rw-r--r--gfx/renderable.cpp5
-rw-r--r--gfx/renderable.h1
-rw-r--r--ui/gameMainWindow.cpp6
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);