1 #pragma once 2 3 #include <mbgl/gl/types.hpp> 4 5 #include <unique_resource.hpp> 6 7 namespace mbgl { 8 namespace gl { 9 10 class Context; 11 12 namespace detail { 13 14 struct ProgramDeleter { 15 Context* context; 16 void operator()(ProgramID) const; 17 }; 18 19 struct ShaderDeleter { 20 Context* context; 21 void operator()(ShaderID) const; 22 }; 23 24 struct BufferDeleter { 25 Context* context; 26 void operator()(BufferID) const; 27 }; 28 29 struct TextureDeleter { 30 Context* context; 31 void operator()(TextureID) const; 32 }; 33 34 struct VertexArrayDeleter { 35 Context* context; 36 void operator()(VertexArrayID) const; 37 }; 38 39 struct FramebufferDeleter { 40 Context* context; 41 void operator()(FramebufferID) const; 42 }; 43 44 struct RenderbufferDeleter { 45 Context* context; 46 void operator()(RenderbufferID) const; 47 }; 48 49 } // namespace detail 50 51 using UniqueProgram = std_experimental::unique_resource<ProgramID, detail::ProgramDeleter>; 52 using UniqueShader = std_experimental::unique_resource<ShaderID, detail::ShaderDeleter>; 53 using UniqueBuffer = std_experimental::unique_resource<BufferID, detail::BufferDeleter>; 54 using UniqueTexture = std_experimental::unique_resource<TextureID, detail::TextureDeleter>; 55 using UniqueVertexArray = std_experimental::unique_resource<VertexArrayID, detail::VertexArrayDeleter>; 56 using UniqueFramebuffer = std_experimental::unique_resource<FramebufferID, detail::FramebufferDeleter>; 57 using UniqueRenderbuffer = std_experimental::unique_resource<RenderbufferID, detail::RenderbufferDeleter>; 58 59 } // namespace gl 60 } // namespace mbgl 61