From 12d38a0114657cc468e93f7eb0f97b2b1ac8f924 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 24 Jan 2021 13:16:05 +0000 Subject: Big tidy up of shader wrapper --- utility/glRef.hpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 utility/glRef.hpp (limited to 'utility/glRef.hpp') diff --git a/utility/glRef.hpp b/utility/glRef.hpp new file mode 100644 index 0000000..aae6629 --- /dev/null +++ b/utility/glRef.hpp @@ -0,0 +1,56 @@ +#ifndef GLREF_H +#define GLREF_H + +#include +#include + +template class glRef { +public: + template explicit glRef(Args &&... args) : id {get(fixed..., std::forward(args)...)} + { + if (!id) { + throw std::runtime_error("Get function failed"); + } + }; + + glRef(glRef && other) : id {other.id} + { + other.id = {}; + } + + ~glRef() + { + if (id) { + release(id); + } + } + + NO_COPY(glRef); + + const auto & + operator=(glRef && other) + { + if (id) { + release(id); + } + id = other.id; + other.id = {}; + return *this; + } + + auto + operator*() const + { + return id; + } + + operator IdType() const + { + return id; + } + +private: + IdType id; +}; + +#endif -- cgit v1.2.3