72 lines
1.3 KiB
C++
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
|