]> git.tdb.fi Git - libs/gl.git/blob - source/ext_framebuffer_object.cpp
Function pointer typedefs for core functions are not available everywhere
[libs/gl.git] / source / ext_framebuffer_object.cpp
1 #include "ext_framebuffer_object.h"
2
3 namespace Msp {
4 namespace GL {
5
6 PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebuffer = 0;
7 PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbuffer = 0;
8 PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatus = 0;
9 PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffers = 0;
10 PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffers = 0;
11 PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbuffer = 0;
12 PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1D = 0;
13 PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2D = 0;
14 PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3D = 0;
15 PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffers = 0;
16 PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffers = 0;
17 PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmap = 0;
18 PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameteriv = 0;
19 PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameteriv = 0;
20 PFNGLISFRAMEBUFFEREXTPROC glIsFramebuffer = 0;
21 PFNGLISRENDERBUFFEREXTPROC glIsRenderbuffer = 0;
22 PFNGLRENDERBUFFERSTORAGEEXTPROC 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<PFNGLBINDFRAMEBUFFEREXTPROC>(get_proc_address("glBindFramebuffer"));
29                 glBindRenderbuffer = reinterpret_cast<PFNGLBINDRENDERBUFFEREXTPROC>(get_proc_address("glBindRenderbuffer"));
30                 glCheckFramebufferStatus = reinterpret_cast<PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC>(get_proc_address("glCheckFramebufferStatus"));
31                 glDeleteFramebuffers = reinterpret_cast<PFNGLDELETEFRAMEBUFFERSEXTPROC>(get_proc_address("glDeleteFramebuffers"));
32                 glDeleteRenderbuffers = reinterpret_cast<PFNGLDELETERENDERBUFFERSEXTPROC>(get_proc_address("glDeleteRenderbuffers"));
33                 glFramebufferRenderbuffer = reinterpret_cast<PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC>(get_proc_address("glFramebufferRenderbuffer"));
34                 glFramebufferTexture1D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE1DEXTPROC>(get_proc_address("glFramebufferTexture1D"));
35                 glFramebufferTexture2D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE2DEXTPROC>(get_proc_address("glFramebufferTexture2D"));
36                 glFramebufferTexture3D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE3DEXTPROC>(get_proc_address("glFramebufferTexture3D"));
37                 glGenFramebuffers = reinterpret_cast<PFNGLGENFRAMEBUFFERSEXTPROC>(get_proc_address("glGenFramebuffers"));
38                 glGenRenderbuffers = reinterpret_cast<PFNGLGENRENDERBUFFERSEXTPROC>(get_proc_address("glGenRenderbuffers"));
39                 glGenerateMipmap = reinterpret_cast<PFNGLGENERATEMIPMAPEXTPROC>(get_proc_address("glGenerateMipmap"));
40                 glGetFramebufferAttachmentParameteriv = reinterpret_cast<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC>(get_proc_address("glGetFramebufferAttachmentParameteriv"));
41                 glGetRenderbufferParameteriv = reinterpret_cast<PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC>(get_proc_address("glGetRenderbufferParameteriv"));
42                 glIsFramebuffer = reinterpret_cast<PFNGLISFRAMEBUFFEREXTPROC>(get_proc_address("glIsFramebuffer"));
43                 glIsRenderbuffer = reinterpret_cast<PFNGLISRENDERBUFFEREXTPROC>(get_proc_address("glIsRenderbuffer"));
44                 glRenderbufferStorage = reinterpret_cast<PFNGLRENDERBUFFERSTORAGEEXTPROC>(get_proc_address("glRenderbufferStorage"));
45                 return Extension::CORE;
46         }
47         if(is_supported("GL_EXT_framebuffer_object"))
48         {
49                 glBindFramebuffer = reinterpret_cast<PFNGLBINDFRAMEBUFFEREXTPROC>(get_proc_address("glBindFramebufferEXT"));
50                 glBindRenderbuffer = reinterpret_cast<PFNGLBINDRENDERBUFFEREXTPROC>(get_proc_address("glBindRenderbufferEXT"));
51                 glCheckFramebufferStatus = reinterpret_cast<PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC>(get_proc_address("glCheckFramebufferStatusEXT"));
52                 glDeleteFramebuffers = reinterpret_cast<PFNGLDELETEFRAMEBUFFERSEXTPROC>(get_proc_address("glDeleteFramebuffersEXT"));
53                 glDeleteRenderbuffers = reinterpret_cast<PFNGLDELETERENDERBUFFERSEXTPROC>(get_proc_address("glDeleteRenderbuffersEXT"));
54                 glFramebufferRenderbuffer = reinterpret_cast<PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC>(get_proc_address("glFramebufferRenderbufferEXT"));
55                 glFramebufferTexture1D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE1DEXTPROC>(get_proc_address("glFramebufferTexture1DEXT"));
56                 glFramebufferTexture2D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE2DEXTPROC>(get_proc_address("glFramebufferTexture2DEXT"));
57                 glFramebufferTexture3D = reinterpret_cast<PFNGLFRAMEBUFFERTEXTURE3DEXTPROC>(get_proc_address("glFramebufferTexture3DEXT"));
58                 glGenFramebuffers = reinterpret_cast<PFNGLGENFRAMEBUFFERSEXTPROC>(get_proc_address("glGenFramebuffersEXT"));
59                 glGenRenderbuffers = reinterpret_cast<PFNGLGENRENDERBUFFERSEXTPROC>(get_proc_address("glGenRenderbuffersEXT"));
60                 glGenerateMipmap = reinterpret_cast<PFNGLGENERATEMIPMAPEXTPROC>(get_proc_address("glGenerateMipmapEXT"));
61                 glGetFramebufferAttachmentParameteriv = reinterpret_cast<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC>(get_proc_address("glGetFramebufferAttachmentParameterivEXT"));
62                 glGetRenderbufferParameteriv = reinterpret_cast<PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC>(get_proc_address("glGetRenderbufferParameterivEXT"));
63                 glIsFramebuffer = reinterpret_cast<PFNGLISFRAMEBUFFEREXTPROC>(get_proc_address("glIsFramebufferEXT"));
64                 glIsRenderbuffer = reinterpret_cast<PFNGLISRENDERBUFFEREXTPROC>(get_proc_address("glIsRenderbufferEXT"));
65                 glRenderbufferStorage = reinterpret_cast<PFNGLRENDERBUFFERSTORAGEEXTPROC>(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