diff options
Diffstat (limited to 'src/mbgl/gl/gl_object_store.hpp')
-rw-r--r-- | src/mbgl/gl/gl_object_store.hpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/mbgl/gl/gl_object_store.hpp b/src/mbgl/gl/gl_object_store.hpp index ac8ddd2748..be25728660 100644 --- a/src/mbgl/gl/gl_object_store.hpp +++ b/src/mbgl/gl/gl_object_store.hpp @@ -4,15 +4,40 @@ #include <mbgl/gl/gl.hpp> #include <mbgl/util/noncopyable.hpp> +#include <memory> #include <vector> namespace mbgl { namespace gl { -class GLObjectStore : private util::noncopyable { +class GLHolder : private util::noncopyable { +public: + GLHolder() {} + + GLHolder(GLHolder&& o) noexcept : id(o.id) { o.id = 0; } + GLHolder& operator=(GLHolder&& o) noexcept { id = o.id; o.id = 0; return *this; } + + explicit operator bool() const { return id; } + GLuint getID() const { return id; } + +protected: + GLuint id = 0; +}; + +class ProgramHolder : public GLHolder { public: - GLObjectStore() = default; + ProgramHolder() = default; + ~ProgramHolder() { reset(); } + + ProgramHolder(ProgramHolder&& o) noexcept : GLHolder(std::move(o)) {} + ProgramHolder& operator=(ProgramHolder&& o) noexcept { GLHolder::operator=(std::move(o)); return *this; } + + void create(); + void reset(); +}; +class GLObjectStore : private util::noncopyable { +public: // Mark OpenGL objects for deletion void abandonVAO(GLuint vao); void abandonBuffer(GLuint buffer); |