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