aboutsummaryrefslogtreecommitdiff
path: root/include/RenderBackend/OpenGL/DeviceMemory.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/RenderBackend/OpenGL/DeviceMemory.hpp')
-rw-r--r--include/RenderBackend/OpenGL/DeviceMemory.hpp42
1 files changed, 32 insertions, 10 deletions
diff --git a/include/RenderBackend/OpenGL/DeviceMemory.hpp b/include/RenderBackend/OpenGL/DeviceMemory.hpp
index 974c7cf..163b0ad 100644
--- a/include/RenderBackend/OpenGL/DeviceMemory.hpp
+++ b/include/RenderBackend/OpenGL/DeviceMemory.hpp
@@ -2,27 +2,49 @@
#include "../../DataView.hpp"
#include "../../utils.hpp"
+#include <stdexcept>
namespace amalgine
{
+ class DeviceMemoryEmpty : public std::runtime_error
+ {
+ public:
+ DeviceMemoryEmpty(const std::string &errMsg) : std::runtime_error(errMsg) {}
+ };
+
class DeviceMemory
{
DISABLE_COPY(DeviceMemory)
+ friend class DeviceFrame;
+ friend class ShaderInputVec4;
public:
- DeviceMemory();
- ~DeviceMemory();
-
- // Uploaded once, drawn many times
- void copyAsStatic(const DataView<f32> &data);
+ enum class StorageType
+ {
+ // Uploaded once, drawn many times
+ STATIC,
+
+ // Created once, changed from time to time but drawn many times more than that
+ DYNAMIC,
+
+ // Uploaded once, drawn once (for example data that is changed every frame)
+ STREAM
+ };
- // Created once, changed from time to time but drawn many times more than that
- void copyAsDynamic(const DataView<f32> &data);
+ enum class PrimitiveType
+ {
+ TRIANGLE
+ };
- // Uploaded once, drawn once (for example data that is changed every frame)
- void copyAsStream(const DataView<f32> &data);
+ ~DeviceMemory();
+ void copy(const DataView<f32> &data, StorageType storageType, PrimitiveType primitiveType = PrimitiveType::TRIANGLE);
+ void draw();
private:
- void copy(const DataView<f32> &data, i32 storageType);
+ DeviceMemory();
+ void operator delete(void *data);
+ void use() const;
private:
u32 vertexBufferObjectId;
+ u32 primitiveType;
+ u32 numVertices;
};
}