X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farb_uniform_buffer_object.cpp;h=9b224ffb607343fe01d5d7afb5d6aefe6ea90e24;hb=6afbace895a7bbcf216ab8e48280ea0303ab5892;hp=5de8da78f2fc45d27c1b4bfffefe1b6be10c49e6;hpb=5f8bc38419379b7d47aa69cb68d380728f5ee26f;p=libs%2Fgl.git diff --git a/source/arb_uniform_buffer_object.cpp b/source/arb_uniform_buffer_object.cpp index 5de8da78..9b224ffb 100644 --- a/source/arb_uniform_buffer_object.cpp +++ b/source/arb_uniform_buffer_object.cpp @@ -1,27 +1,37 @@ -#include "extension.h" #include "arb_uniform_buffer_object.h" namespace Msp { namespace GL { -PFNGLGETUNIFORMINDICESPROC glGetUniformIndices = 0; -PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv = 0; +PFNGLBINDBUFFERBASEPROC glBindBufferBase = 0; +PFNGLBINDBUFFERRANGEPROC glBindBufferRange = 0; +PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName = 0; +PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv = 0; PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName = 0; +PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv = 0; PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex = 0; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv = 0; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName = 0; +PFNGLGETUNIFORMINDICESPROC glGetUniformIndices = 0; PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding = 0; -void init_arb_uniform_buffer_object() +Extension::SupportLevel init_arb_uniform_buffer_object() { - glGetUniformIndices = reinterpret_cast(get_proc_address("glGetUniformIndices")); - glGetActiveUniformsiv = reinterpret_cast(get_proc_address("glGetActiveUniformsiv")); - glGetActiveUniformName = reinterpret_cast(get_proc_address("glGetActiveUniformName")); - glGetUniformBlockIndex = reinterpret_cast(get_proc_address("glGetUniformBlockIndex")); - glGetActiveUniformBlockiv = reinterpret_cast(get_proc_address("glGetActiveUniformBlockiv")); - glGetActiveUniformBlockName = reinterpret_cast(get_proc_address("glGetActiveUniformBlockName")); - glUniformBlockBinding = reinterpret_cast(get_proc_address("glUniformBlockBinding")); + if(is_version_at_least(3, 0) || is_supported("GL_ARB_uniform_buffer_object")) + { + glBindBufferBase = reinterpret_cast(get_proc_address("glBindBufferBase")); + glBindBufferRange = reinterpret_cast(get_proc_address("glBindBufferRange")); + glGetActiveUniformBlockName = reinterpret_cast(get_proc_address("glGetActiveUniformBlockName")); + glGetActiveUniformBlockiv = reinterpret_cast(get_proc_address("glGetActiveUniformBlockiv")); + glGetActiveUniformName = reinterpret_cast(get_proc_address("glGetActiveUniformName")); + glGetActiveUniformsiv = reinterpret_cast(get_proc_address("glGetActiveUniformsiv")); + glGetUniformBlockIndex = reinterpret_cast(get_proc_address("glGetUniformBlockIndex")); + glGetUniformIndices = reinterpret_cast(get_proc_address("glGetUniformIndices")); + glUniformBlockBinding = reinterpret_cast(get_proc_address("glUniformBlockBinding")); + return Extension::CORE; + } + return Extension::UNSUPPORTED; } +Extension ARB_uniform_buffer_object("GL_ARB_uniform_buffer_object", init_arb_uniform_buffer_object); + } // namespace GL } // namespace Msp