#pragma once #include "../../DataView.hpp" #include "../../utils.hpp" #include 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 ShaderInputVec2; public: 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 }; enum class PrimitiveType { TRIANGLE }; ~DeviceMemory(); void copy(const DataView &data, StorageType storageType, PrimitiveType primitiveType = PrimitiveType::TRIANGLE); void draw(); private: DeviceMemory(); void operator delete(void *data); void use() const; private: u32 vertexBufferObjectId; u32 primitiveType; u32 numVertices; }; }