]> git.tdb.fi Git - libs/gl.git/blob - source/ext_framebuffer_object.cpp
Complete rewrite of extension handling
[libs/gl.git] / source / ext_framebuffer_object.cpp
1 #include "ext_framebuffer_object.h"
2
3 namespace Msp {
4 namespace GL {
5
6 PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = 0;
7 PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer = 0;
8 PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus = 0;
9 PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = 0;
10 PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers = 0;
11 PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer = 0;
12 PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D = 0;
13 PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D = 0;
14 PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D = 0;
15 PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = 0;
16 PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers = 0;
17 PFNGLGENERATEMIPMAPPROC glGenerateMipmap = 0;
18 PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv = 0;
19 PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv = 0;
20 PFNGLISFRAMEBUFFERPROC glIsFramebuffer = 0;
21 PFNGLISRENDERBUFFERPROC glIsRenderbuffer = 0;
22 PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage = 0;
23
24 Extension::SupportLevel init_ext_framebuffer_object()
25 {
26         if(is_version_at_least(3, 0) || is_supported("GL_ARB_framebuffer_object"))
27         {
28                 glBindFramebuffer = reinterpret_cast<PFNGLBINDFRAMEBUFFERPROC>(get_proc_address("glBindFramebuffer"));
29                 glBindRenderbuffer = reinterpret_cast<PFNGLBINDRENDERBUFFERPROC>(get_proc_address("glBindRenderbuffer"));
30                 glCheckFramebufferStatus = reinterpret_cast<PFNGLCHECKFRAMEBUFFERSTATUSPROC>(get_proc_address("glCheckFramebufferStatus"));
31                 glDeleteFramebuffers = reinterpret_cast<PFNGLDELETEFRAMEBUFFERSPROC>(get_proc_address("glDeleteFramebuffers"));
32                 glDeleteRenderbuffers = reinterpret_cast<PFNGLDELETERENDERBUFFERSPROC>(get_proc_address("glDeleteRenderbuffers"));
33                 glFramebufferRenderbuffer = reinterpret_cast<PFNGLFRAMEBUFFERRENDERBUFFERPROC>(get_proc_address("glFramebufferRenderbuffer"));
34                 glFramebufferTexture1D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE1DPROC>(get_proc_address("glFramebufferTexture1D"));
35                 glFramebufferTexture2D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE2DPROC>(get_proc_address("glFramebufferTexture2D"));
36                 glFramebufferTexture3D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE3DPROC>(get_proc_address("glFramebufferTexture3D"));
37                 glGenFramebuffers = reinterpret_cast<PFNGLGENFRAMEBUFFERSPROC>(get_proc_address("glGenFramebuffers"));
38                 glGenRenderbuffers = reinterpret_cast<PFNGLGENRENDERBUFFERSPROC>(get_proc_address("glGenRenderbuffers"));
39                 glGenerateMipmap = reinterpret_cast<PFNGLGENERATEMIPMAPPROC>(get_proc_address("glGenerateMipmap"));
40                 glGetFramebufferAttachmentParameteriv = reinterpret_cast<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC>(get_proc_address("glGetFramebufferAttachmentParameteriv"));
41                 glGetRenderbufferParameteriv = reinterpret_cast<PFNGLGETRENDERBUFFERPARAMETERIVPROC>(get_proc_address("glGetRenderbufferParameteriv"));
42                 glIsFramebuffer = reinterpret_cast<PFNGLISFRAMEBUFFERPROC>(get_proc_address("glIsFramebuffer"));
43                 glIsRenderbuffer = reinterpret_cast<PFNGLISRENDERBUFFERPROC>(get_proc_address("glIsRenderbuffer"));
44                 glRenderbufferStorage = reinterpret_cast<PFNGLRENDERBUFFERSTORAGEPROC>(get_proc_address("glRenderbufferStorage"));
45                 return Extension::CORE;
46         }
47         if(is_supported("GL_EXT_framebuffer_object"))
48         {
49                 glBindFramebuffer = reinterpret_cast<PFNGLBINDFRAMEBUFFERPROC>(get_proc_address("glBindFramebufferEXT"));
50                 glBindRenderbuffer = reinterpret_cast<PFNGLBINDRENDERBUFFERPROC>(get_proc_address("glBindRenderbufferEXT"));
51                 glCheckFramebufferStatus = reinterpret_cast<PFNGLCHECKFRAMEBUFFERSTATUSPROC>(get_proc_address("glCheckFramebufferStatusEXT"));
52                 glDeleteFramebuffers = reinterpret_cast<PFNGLDELETEFRAMEBUFFERSPROC>(get_proc_address("glDeleteFramebuffersEXT"));
53                 glDeleteRenderbuffers = reinterpret_cast<PFNGLDELETERENDERBUFFERSPROC>(get_proc_address("glDeleteRenderbuffersEXT"));
54                 glFramebufferRenderbuffer = reinterpret_cast<PFNGLFRAMEBUFFERRENDERBUFFERPROC>(get_proc_address("glFramebufferRenderbufferEXT"));
55                 glFramebufferTexture1D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE1DPROC>(get_proc_address("glFramebufferTexture1DEXT"));
56                 glFramebufferTexture2D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE2DPROC>(get_proc_address("glFramebufferTexture2DEXT"));
57                 glFramebufferTexture3D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE3DPROC>(get_proc_address("glFramebufferTexture3DEXT"));
58                 glGenFramebuffers = reinterpret_cast<PFNGLGENFRAMEBUFFERSPROC>(get_proc_address("glGenFramebuffersEXT"));
59                 glGenRenderbuffers = reinterpret_cast<PFNGLGENRENDERBUFFERSPROC>(get_proc_address("glGenRenderbuffersEXT"));
60                 glGenerateMipmap = reinterpret_cast<PFNGLGENERATEMIPMAPPROC>(get_proc_address("glGenerateMipmapEXT"));
61                 glGetFramebufferAttachmentParameteriv = reinterpret_cast<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC>(get_proc_address("glGetFramebufferAttachmentParameterivEXT"));
62                 glGetRenderbufferParameteriv = reinterpret_cast<PFNGLGETRENDERBUFFERPARAMETERIVPROC>(get_proc_address("glGetRenderbufferParameterivEXT"));
63                 glIsFramebuffer = reinterpret_cast<PFNGLISFRAMEBUFFERPROC>(get_proc_address("glIsFramebufferEXT"));
64                 glIsRenderbuffer = reinterpret_cast<PFNGLISRENDERBUFFERPROC>(get_proc_address("glIsRenderbufferEXT"));
65                 glRenderbufferStorage = reinterpret_cast<PFNGLRENDERBUFFERSTORAGEPROC>(get_proc_address("glRenderbufferStorageEXT"));
66                 return Extension::EXTENSION;
67         }
68         return Extension::UNSUPPORTED;
69 }
70
71 Extension EXT_framebuffer_object("GL_EXT_framebuffer_object", init_ext_framebuffer_object);
72
73 } // namespace GL
74 } // namespace Msp