#pragma once #include "../../DataView.hpp" #include "../../utils.hpp" #include "../../Triangle.hpp" #include "../../Vec.hpp" #include namespace amalgine { enum class DeviceMemoryType { NONE, VEC2, VEC3 }; class DeviceMemory { DISABLE_COPY(DeviceMemory) friend class ShaderFrame; friend class std::default_delete; 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 }; void set(const DataView &texture_coords, StorageType storageType); void set(const DataView &triangles, StorageType storageType); void set(const DataView &triangles, StorageType storageType); i32 get_num_vertices() const { return num_vertices; } private: DeviceMemory(u32 vertex_array_object_id, i32 attrib_location); ~DeviceMemory(); void use(); private: u32 vertex_array_object_id; u32 vertex_buffer_object_id; i32 attrib_location; i32 num_vertices; DeviceMemoryType memory_type; }; }