]> git.tdb.fi Git - libs/gl.git/blob - source/arb_vertex_buffer_object.cpp
Function pointer typedefs for core functions are not available everywhere
[libs/gl.git] / source / arb_vertex_buffer_object.cpp
1 #include "arb_vertex_buffer_object.h"
2
3 namespace Msp {
4 namespace GL {
5
6 PFNGLBINDBUFFERARBPROC glBindBuffer = 0;
7 PFNGLBUFFERDATAARBPROC glBufferData = 0;
8 PFNGLBUFFERSUBDATAARBPROC glBufferSubData = 0;
9 PFNGLDELETEBUFFERSARBPROC glDeleteBuffers = 0;
10 PFNGLGENBUFFERSARBPROC glGenBuffers = 0;
11 PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameteriv = 0;
12 PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointerv = 0;
13 PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubData = 0;
14 PFNGLISBUFFERARBPROC glIsBuffer = 0;
15 PFNGLMAPBUFFERARBPROC glMapBuffer = 0;
16 PFNGLUNMAPBUFFERARBPROC glUnmapBuffer = 0;
17
18 Extension::SupportLevel init_arb_vertex_buffer_object()
19 {
20         if(is_version_at_least(1, 5))
21         {
22                 glBindBuffer = reinterpret_cast<PFNGLBINDBUFFERARBPROC>(get_proc_address("glBindBuffer"));
23                 glBufferData = reinterpret_cast<PFNGLBUFFERDATAARBPROC>(get_proc_address("glBufferData"));
24                 glBufferSubData = reinterpret_cast<PFNGLBUFFERSUBDATAARBPROC>(get_proc_address("glBufferSubData"));
25                 glDeleteBuffers = reinterpret_cast<PFNGLDELETEBUFFERSARBPROC>(get_proc_address("glDeleteBuffers"));
26                 glGenBuffers = reinterpret_cast<PFNGLGENBUFFERSARBPROC>(get_proc_address("glGenBuffers"));
27                 glGetBufferParameteriv = reinterpret_cast<PFNGLGETBUFFERPARAMETERIVARBPROC>(get_proc_address("glGetBufferParameteriv"));
28                 glGetBufferPointerv = reinterpret_cast<PFNGLGETBUFFERPOINTERVARBPROC>(get_proc_address("glGetBufferPointerv"));
29                 glGetBufferSubData = reinterpret_cast<PFNGLGETBUFFERSUBDATAARBPROC>(get_proc_address("glGetBufferSubData"));
30                 glIsBuffer = reinterpret_cast<PFNGLISBUFFERARBPROC>(get_proc_address("glIsBuffer"));
31                 glMapBuffer = reinterpret_cast<PFNGLMAPBUFFERARBPROC>(get_proc_address("glMapBuffer"));
32                 glUnmapBuffer = reinterpret_cast<PFNGLUNMAPBUFFERARBPROC>(get_proc_address("glUnmapBuffer"));
33                 return Extension::CORE;
34         }
35         if(is_supported("GL_ARB_vertex_buffer_object"))
36         {
37                 glBindBuffer = reinterpret_cast<PFNGLBINDBUFFERARBPROC>(get_proc_address("glBindBufferARB"));
38                 glBufferData = reinterpret_cast<PFNGLBUFFERDATAARBPROC>(get_proc_address("glBufferDataARB"));
39                 glBufferSubData = reinterpret_cast<PFNGLBUFFERSUBDATAARBPROC>(get_proc_address("glBufferSubDataARB"));
40                 glDeleteBuffers = reinterpret_cast<PFNGLDELETEBUFFERSARBPROC>(get_proc_address("glDeleteBuffersARB"));
41                 glGenBuffers = reinterpret_cast<PFNGLGENBUFFERSARBPROC>(get_proc_address("glGenBuffersARB"));
42                 glGetBufferParameteriv = reinterpret_cast<PFNGLGETBUFFERPARAMETERIVARBPROC>(get_proc_address("glGetBufferParameterivARB"));
43                 glGetBufferPointerv = reinterpret_cast<PFNGLGETBUFFERPOINTERVARBPROC>(get_proc_address("glGetBufferPointervARB"));
44                 glGetBufferSubData = reinterpret_cast<PFNGLGETBUFFERSUBDATAARBPROC>(get_proc_address("glGetBufferSubDataARB"));
45                 glIsBuffer = reinterpret_cast<PFNGLISBUFFERARBPROC>(get_proc_address("glIsBufferARB"));
46                 glMapBuffer = reinterpret_cast<PFNGLMAPBUFFERARBPROC>(get_proc_address("glMapBufferARB"));
47                 glUnmapBuffer = reinterpret_cast<PFNGLUNMAPBUFFERARBPROC>(get_proc_address("glUnmapBufferARB"));
48                 return Extension::EXTENSION;
49         }
50         return Extension::UNSUPPORTED;
51 }
52
53 Extension ARB_vertex_buffer_object("GL_ARB_vertex_buffer_object", init_arb_vertex_buffer_object);
54
55 } // namespace GL
56 } // namespace Msp