Files
wc3re/render/GlResource.hh
2015-04-29 16:45:10 +02:00

72 lines
1.3 KiB
C++

#ifndef WC3RE_RENDER_GLRESOURCE_HH__
#define WC3RE_RENDER_GLRESOURCE_HH__
#include <glbinding/gl/types.h>
struct TextureDeleter {
void operator() (gl::GLuint tex) const;
void operator() (gl::GLsizei count, gl::GLuint tex[]) const;
};
struct FramebufferDeleter {
void operator() (gl::GLuint tex) const;
};
struct ShaderDeleter {
void operator() (gl::GLuint tex) const;
};
struct ProgramDeleter {
void operator() (gl::GLuint tex) const;
};
struct VertexArrayDeleter {
void operator() (gl::GLuint tex) const;
};
struct BufferDeleter {
void operator() (gl::GLuint tex) const;
};
template<class Deleter, class Handle = gl::GLuint>
class GlResource {
public:
GlResource()
: handle_() {
}
GlResource(Handle handle)
: handle_(handle) {
}
~GlResource() {
if (handle_)
Deleter()(handle_);
handle_ = Handle();
}
operator Handle() const {
return handle_;
}
Handle& get() {
return handle_;
}
Handle const& get() const {
return handle_;
}
private:
Handle handle_;
};
using TextureResource = GlResource<TextureDeleter>;
using FramebufferResource = GlResource<FramebufferDeleter>;
using ShaderResource = GlResource<ShaderDeleter>;
using ProgramResource = GlResource<ProgramDeleter>;
using VertexArrayResource = GlResource<VertexArrayDeleter>;
using BufferResource = GlResource<BufferDeleter>;
#endif