-#include "extension.h"
#include "arb_vertex_buffer_object.h"
namespace Msp {
namespace GL {
-PFNGLBINDBUFFERARBPROC glBindBufferARB=0;
-PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB=0;
-PFNGLGENBUFFERSARBPROC glGenBuffersARB=0;
-PFNGLISBUFFERARBPROC glIsBufferARB=0;
-PFNGLBUFFERDATAARBPROC glBufferDataARB=0;
-PFNGLBUFFERSUBDATAARBPROC glBufferSubDataARB=0;
-PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubDataARB=0;
-PFNGLMAPBUFFERARBPROC glMapBufferARB=0;
-PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB=0;
-PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB=0;
-PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB=0;
+PFNGLBINDBUFFERARBPROC glBindBuffer = 0;
+PFNGLBUFFERDATAARBPROC glBufferData = 0;
+PFNGLBUFFERSUBDATAARBPROC glBufferSubData = 0;
+PFNGLDELETEBUFFERSARBPROC glDeleteBuffers = 0;
+PFNGLGENBUFFERSARBPROC glGenBuffers = 0;
+PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameteriv = 0;
+PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointerv = 0;
+PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubData = 0;
+PFNGLISBUFFERARBPROC glIsBuffer = 0;
+PFNGLMAPBUFFERARBPROC glMapBuffer = 0;
+PFNGLUNMAPBUFFERARBPROC glUnmapBuffer = 0;
-void init_arb_vertex_buffer_object()
+Extension::SupportLevel init_arb_vertex_buffer_object()
{
- glBindBufferARB=reinterpret_cast<PFNGLBINDBUFFERARBPROC>(get_proc_address("glBindBufferARB"));
- glDeleteBuffersARB=reinterpret_cast<PFNGLDELETEBUFFERSARBPROC>(get_proc_address("glDeleteBuffersARB"));
- glGenBuffersARB=reinterpret_cast<PFNGLGENBUFFERSARBPROC>(get_proc_address("glGenBuffersARB"));
- glIsBufferARB=reinterpret_cast<PFNGLISBUFFERARBPROC>(get_proc_address("glIsBufferARB"));
- glBufferDataARB=reinterpret_cast<PFNGLBUFFERDATAARBPROC>(get_proc_address("glBufferDataARB"));
- glBufferSubDataARB=reinterpret_cast<PFNGLBUFFERSUBDATAARBPROC>(get_proc_address("glBufferSubDataARB"));
- glGetBufferSubDataARB=reinterpret_cast<PFNGLGETBUFFERSUBDATAARBPROC>(get_proc_address("glGetBufferSubDataARB"));
- glMapBufferARB=reinterpret_cast<PFNGLMAPBUFFERARBPROC>(get_proc_address("glMapBufferARB"));
- glUnmapBufferARB=reinterpret_cast<PFNGLUNMAPBUFFERARBPROC>(get_proc_address("glUnmapBufferARB"));
- glGetBufferParameterivARB=reinterpret_cast<PFNGLGETBUFFERPARAMETERIVARBPROC>(get_proc_address("glGetBufferParameterivARB"));
- glGetBufferPointervARB=reinterpret_cast<PFNGLGETBUFFERPOINTERVARBPROC>(get_proc_address("glGetBufferPointervARB"));
+ if(is_version_at_least(1, 5))
+ {
+ glBindBuffer = reinterpret_cast<PFNGLBINDBUFFERARBPROC>(get_proc_address("glBindBuffer"));
+ glBufferData = reinterpret_cast<PFNGLBUFFERDATAARBPROC>(get_proc_address("glBufferData"));
+ glBufferSubData = reinterpret_cast<PFNGLBUFFERSUBDATAARBPROC>(get_proc_address("glBufferSubData"));
+ glDeleteBuffers = reinterpret_cast<PFNGLDELETEBUFFERSARBPROC>(get_proc_address("glDeleteBuffers"));
+ glGenBuffers = reinterpret_cast<PFNGLGENBUFFERSARBPROC>(get_proc_address("glGenBuffers"));
+ glGetBufferParameteriv = reinterpret_cast<PFNGLGETBUFFERPARAMETERIVARBPROC>(get_proc_address("glGetBufferParameteriv"));
+ glGetBufferPointerv = reinterpret_cast<PFNGLGETBUFFERPOINTERVARBPROC>(get_proc_address("glGetBufferPointerv"));
+ glGetBufferSubData = reinterpret_cast<PFNGLGETBUFFERSUBDATAARBPROC>(get_proc_address("glGetBufferSubData"));
+ glIsBuffer = reinterpret_cast<PFNGLISBUFFERARBPROC>(get_proc_address("glIsBuffer"));
+ glMapBuffer = reinterpret_cast<PFNGLMAPBUFFERARBPROC>(get_proc_address("glMapBuffer"));
+ glUnmapBuffer = reinterpret_cast<PFNGLUNMAPBUFFERARBPROC>(get_proc_address("glUnmapBuffer"));
+ return Extension::CORE;
+ }
+ if(is_supported("GL_ARB_vertex_buffer_object"))
+ {
+ glBindBuffer = reinterpret_cast<PFNGLBINDBUFFERARBPROC>(get_proc_address("glBindBufferARB"));
+ glBufferData = reinterpret_cast<PFNGLBUFFERDATAARBPROC>(get_proc_address("glBufferDataARB"));
+ glBufferSubData = reinterpret_cast<PFNGLBUFFERSUBDATAARBPROC>(get_proc_address("glBufferSubDataARB"));
+ glDeleteBuffers = reinterpret_cast<PFNGLDELETEBUFFERSARBPROC>(get_proc_address("glDeleteBuffersARB"));
+ glGenBuffers = reinterpret_cast<PFNGLGENBUFFERSARBPROC>(get_proc_address("glGenBuffersARB"));
+ glGetBufferParameteriv = reinterpret_cast<PFNGLGETBUFFERPARAMETERIVARBPROC>(get_proc_address("glGetBufferParameterivARB"));
+ glGetBufferPointerv = reinterpret_cast<PFNGLGETBUFFERPOINTERVARBPROC>(get_proc_address("glGetBufferPointervARB"));
+ glGetBufferSubData = reinterpret_cast<PFNGLGETBUFFERSUBDATAARBPROC>(get_proc_address("glGetBufferSubDataARB"));
+ glIsBuffer = reinterpret_cast<PFNGLISBUFFERARBPROC>(get_proc_address("glIsBufferARB"));
+ glMapBuffer = reinterpret_cast<PFNGLMAPBUFFERARBPROC>(get_proc_address("glMapBufferARB"));
+ glUnmapBuffer = reinterpret_cast<PFNGLUNMAPBUFFERARBPROC>(get_proc_address("glUnmapBufferARB"));
+ return Extension::EXTENSION;
+ }
+ return Extension::UNSUPPORTED;
}
+Extension ARB_vertex_buffer_object("GL_ARB_vertex_buffer_object", init_arb_vertex_buffer_object);
+
} // namespace GL
} // namespace Msp