diff options
Diffstat (limited to 'include/RenderBackend/OpenGL/DeviceMemory.hpp')
-rw-r--r-- | include/RenderBackend/OpenGL/DeviceMemory.hpp | 42 |
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; }; } |