#include namespace psemek::gfx { buffer::buffer() { gl::GenBuffers(1, &id_); } buffer::buffer(buffer && other) : id_{other.id_} { other.id_ = 0; } buffer & buffer::operator = (buffer && other) { if (this == &other) return *this; reset(); std::swap(id_, other.id_); return *this; } buffer::~buffer() { reset(); } buffer buffer::null() { return buffer(nullptr); } void buffer::bind() const { gl::BindBuffer(gl::ARRAY_BUFFER, id_); } void buffer::reset() { if (id_ != 0) gl::DeleteBuffers(1, &id_); id_ = 0; } void buffer::load(void const * data, std::size_t size, GLenum usage) { bind(); gl::BufferData(gl::ARRAY_BUFFER, size, data, usage); } buffer::buffer(std::nullptr_t) : id_{0} {} }