32 template<BufferType T, BufferUsage U, BufferStorage S = GPU>
36 static constexpr BufferType Type = T;
37 static constexpr BufferUsage Usage = U;
38 static constexpr BufferStorage Storage = S;
65 [[nodiscard]]
operator bool()
const {
return Handle != 0; }
77 [[nodiscard]] SizeT Size()
const {
return Size; }
78 void Resize(SizeT size);
88 template <BufferType T, BufferUsage U, BufferStorage S>
94 glGenBuffers(1, &Handle);
98 glBindBuffer(Type, Handle);
99 glBufferStorage(Type, Size, data, Usage);
100 glBindBuffer(Type, 0);
103 template <BufferType T, BufferUsage U, BufferStorage S>
105 : Handle(other.Handle)
107 , Mapping(other.Size)
111 other.Mapping =
nullptr;
114 template <BufferType T, BufferUsage U, BufferStorage S>
118 if(Handle == NULL)
return;
119 if(other.Handle == NULL)
return;
121 glCopyNamedBufferSubData(other.Handle, Handle, 0, 0, Size);
124 template <BufferType T, BufferUsage U, BufferStorage S>
127 glDeleteBuffers(1, &Handle);
132 template <BufferType T, BufferUsage U, BufferStorage S>
136 return (*
this = std::move(temp));
139 template <BufferType T, BufferUsage U, BufferStorage S>
142 glDeleteBuffers(1, &Handle);
144 Handle = other.Handle;
146 Mapping = other.Mapping;
150 other.Mapping =
nullptr;
155 template <BufferType T, BufferUsage U, BufferStorage S>
159 glCopyNamedBufferSubData(Handle, temp.Handle, 0, 0, Size);
160 *
this = std::move(temp);
Definition BufferObject.h:34
BufferObject & operator=(const BufferObject &other)
Copy Assignment.
Definition BufferObject.h:133
BufferObject(SizeT size, void *data=nullptr)
BufferObject constructor.
Definition BufferObject.h:89
~BufferObject()
Destructor.
Definition BufferObject.h:125