diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2024-01-10 01:10:44 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2024-01-10 01:10:44 +0000 |
commit | 8740d30b01f6c12e2fcea0450df73736cd17dc87 (patch) | |
tree | de7715148889aba33d1ccca6740a0e661c866087 /game/scenary/illuminator.h | |
parent | Add lights resource set and test scene (diff) | |
download | ilt-8740d30b01f6c12e2fcea0450df73736cd17dc87.tar.bz2 ilt-8740d30b01f6c12e2fcea0450df73736cd17dc87.tar.xz ilt-8740d30b01f6c12e2fcea0450df73736cd17dc87.zip |
Add spot light definition, loader, and rendering
Rendering is untested, data is passed to whatever GL program is currently active.
Diffstat (limited to 'game/scenary/illuminator.h')
-rw-r--r-- | game/scenary/illuminator.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/game/scenary/illuminator.h b/game/scenary/illuminator.h index db9acfb..99b87eb 100644 --- a/game/scenary/illuminator.h +++ b/game/scenary/illuminator.h @@ -11,11 +11,27 @@ class Texture; class Illuminator : public Asset, public Renderable, public StdTypeDefs<Illuminator> { Mesh::Ptr bodyMesh; std::shared_ptr<Texture> texture; - glVertexArray instanceVAO; + glVertexArray instanceVAO, instancesSpotLightVAO; + +public: + struct SpotLightVertex { + RelativePosition3D position; + Direction3D direction; + RGB colour; + RelativeDistance kq; + Angle arc; + }; + + struct SpotLight : Persistence::Persistable, SpotLightVertex, StdTypeDefs<SpotLight> { + private: + friend Persistence::SelectionPtrBase<std::shared_ptr<SpotLight>>; + bool persist(Persistence::PersistenceStore & store) override; + }; public: using LocationVertex = std::pair<glm::mat4, GlobalPosition3D>; mutable InstanceVertices<LocationVertex> instances; + mutable InstanceVertices<SpotLightVertex> instancesSpotLight; void render(const SceneShader &) const override; void lights(const SceneShader &) const override; @@ -23,4 +39,7 @@ protected: friend Persistence::SelectionPtrBase<std::shared_ptr<Illuminator>>; bool persist(Persistence::PersistenceStore & store) override; void postLoad() override; + + std::vector<SpotLight::Ptr> spotLight; + std::vector<InstanceVertices<SpotLightVertex>::InstanceProxy> spotLightInstances; }; |