]> git.tdb.fi Git - libs/gl.git/blob - source/extension.h
Refactor version number extraction and checks
[libs/gl.git] / source / extension.h
1 #ifndef MSP_GL_EXTENSION_H_
2 #define MSP_GL_EXTENSION_H_
3
4 #include <string>
5
6 namespace Msp {
7 namespace GL {
8
9 struct Version
10 {
11         unsigned short major;
12         unsigned short minor;
13
14         Version();
15         Version(unsigned short, unsigned short);
16         Version(const std::string &);
17
18         bool operator>=(const Version &) const;
19 };
20
21
22 class Extension
23 {
24 public:
25         enum SupportLevel
26         {
27                 UNSUPPORTED,
28                 EXTENSION,
29                 CORE
30         };
31
32         typedef SupportLevel (*InitFunc)();
33
34 private:
35         const char *name;
36         InitFunc init_func;
37         mutable bool init_done;
38         mutable SupportLevel support;
39
40 public:
41         Extension(const char *, InitFunc);
42
43         const char *get_name() const { return name; }
44         operator bool() const;
45 };
46
47
48 struct Require
49 {
50         Require(const Extension &);
51 };
52
53
54 typedef void ExtFunc();
55
56 /** Indicates whether an extension is supported. */
57 bool is_supported(const std::string &);
58
59 /** Returns the OpenGL version number, as reported by the implementation. */
60 const Version &get_gl_version();
61
62 /** Indicates whether the OpenGL version is at least a.b. */
63 bool is_version_at_least(unsigned a, unsigned b);
64
65 /** Returns the address of an extension function.  Only indended for internal
66 use. */
67 ExtFunc *get_proc_address(const std::string &);
68
69 } // namespace GL
70 } // namespace Msp
71
72 #endif