summaryrefslogtreecommitdiff
path: root/gfx/gl/bufferedLocation.h
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2023-04-23 21:26:32 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2023-04-23 21:26:32 +0100
commit5e022ee1ea94812b3446cac76e4f9ff9f3856d8c (patch)
treee1041049d625bc3910117bae08fef2972fd067f4 /gfx/gl/bufferedLocation.h
parentUse Location::getTransform in Plant instead of duplicating (diff)
downloadilt-5e022ee1ea94812b3446cac76e4f9ff9f3856d8c.tar.bz2
ilt-5e022ee1ea94812b3446cac76e4f9ff9f3856d8c.tar.xz
ilt-5e022ee1ea94812b3446cac76e4f9ff9f3856d8c.zip
Add BufferedLocation
Wraps Location, storing a pre-computed mat4 transformation of the position/rotation in a VBO handled by InstanceVertices.
Diffstat (limited to 'gfx/gl/bufferedLocation.h')
-rw-r--r--gfx/gl/bufferedLocation.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/gfx/gl/bufferedLocation.h b/gfx/gl/bufferedLocation.h
new file mode 100644
index 0000000..cf7afed
--- /dev/null
+++ b/gfx/gl/bufferedLocation.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "instanceVertices.h"
+#include "location.hpp"
+#include <glm/mat4x4.hpp>
+#include <glm/vec3.hpp>
+
+class BufferedLocation {
+public:
+ BufferedLocation(InstanceVertices<glm::mat4> &, glm::vec3 = {}, glm::vec3 = {});
+ BufferedLocation(InstanceVertices<glm::mat4> &, const Location &);
+
+ BufferedLocation & operator=(const Location &);
+
+ operator const Location &() const;
+
+ glm::vec3 position() const;
+ glm::vec3 rotation() const;
+ void setPosition(glm::vec3, bool update = true);
+ void setRotation(glm::vec3, bool update = true);
+ void setLocation(glm::vec3, glm::vec3);
+
+ glm::mat4 getTransform() const;
+
+private:
+ void updateBuffer();
+
+ Location loc;
+ InstanceVertices<glm::mat4>::InstanceProxy buffer;
+};