#pragma once #include "../../DataView.hpp" #include "../../utils.hpp" #include "../../Triangle.hpp" namespace amalgine { enum class DeviceMemoryType { NONE, VEC2, VEC3 }; class DeviceMemory { DISABLE_COPY(DeviceMemory) friend class DeviceFrame; friend class ShaderProgram; 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 copy(const DataView &triangles, StorageType storageType); void copy(const DataView &triangles, StorageType storageType); void draw(); DeviceMemoryType get_type() const { return type; } private: DeviceMemory(); void use() const; private: u32 vertexBufferObjectId; u32 primitiveType; u32 numVertices; DeviceMemoryType type; }; }