Add OpenGL array class
This commit is contained in:
parent
6709792abf
commit
b0ecc6c056
2 changed files with 88 additions and 0 deletions
34
libs/gfx/include/psemek/gfx/array.hpp
Normal file
34
libs/gfx/include/psemek/gfx/array.hpp
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <psemek/gfx/gl.hpp>
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace psemek::gfx
|
||||||
|
{
|
||||||
|
|
||||||
|
struct array
|
||||||
|
{
|
||||||
|
array();
|
||||||
|
array(array &&);
|
||||||
|
array & operator = (array &&);
|
||||||
|
~array();
|
||||||
|
|
||||||
|
array(array const &) = delete;
|
||||||
|
array & operator = (array const &) = delete;
|
||||||
|
|
||||||
|
static array null();
|
||||||
|
|
||||||
|
GLuint id() const { return id_; }
|
||||||
|
|
||||||
|
void bind() const;
|
||||||
|
|
||||||
|
void reset();
|
||||||
|
|
||||||
|
private:
|
||||||
|
GLuint id_;
|
||||||
|
|
||||||
|
explicit array(std::nullptr_t);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
54
libs/gfx/source/array.cpp
Normal file
54
libs/gfx/source/array.cpp
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
#include <psemek/gfx/array.hpp>
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
namespace psemek::gfx
|
||||||
|
{
|
||||||
|
|
||||||
|
array::array()
|
||||||
|
{
|
||||||
|
gl::GenVertexArrays(1, &id_);
|
||||||
|
}
|
||||||
|
|
||||||
|
array::array(array && other)
|
||||||
|
: id_{other.id_}
|
||||||
|
{
|
||||||
|
other.id_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
array & array::operator = (array && other)
|
||||||
|
{
|
||||||
|
if (this == &other) return *this;
|
||||||
|
|
||||||
|
reset();
|
||||||
|
std::swap(id_, other.id_);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
array::~array()
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
array array::null()
|
||||||
|
{
|
||||||
|
return array(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void array::bind() const
|
||||||
|
{
|
||||||
|
gl::BindVertexArray(id_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void array::reset()
|
||||||
|
{
|
||||||
|
if (id_ != 0)
|
||||||
|
gl::DeleteVertexArrays(1, &id_);
|
||||||
|
id_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
array::array(std::nullptr_t)
|
||||||
|
: id_{0}
|
||||||
|
{}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue