OpenGL:如何检查用户是否支持glGenBuffers()?

时间:2010-11-30 18:20:22

标签: c++ visual-studio-2008 opengl

我检查了文档,并且说OpenGL版本必须至少为1.5才能使glGenBuffers()正常工作。用户使用版本1.5但函数调用将导致崩溃。这是文档中的错误,还是用户的驱动程序问题?

我正在将此glGenBuffers()用于VBO,如何检查用户是否支持此操作?

修改:使用glew和glewInit()初始化VBO

编辑2:我通过glGenBuffersARB()函数调用了用户。但是我仍然在寻找一种方法来找出我应该何时使用glGenBuffers()以及何时应该使用glGenBuffersARB()如何在使用VertexArrays时如果不支持任何VBO函数调用。

我还发现if(GLEW_VERSION_1_5)对用户返回false,但GL_VERSION给出1.5.0,这没有任何意义!

2 个答案:

答案 0 :(得分:2)

我现在要告诉你远离GLEW或任何这些库,主要是因为它们没用,这就是我一直这样做的。

#ifndef STRINGIFY
  #define STRINGIFY(x) #x
#endif
#ifdef WIN32
  #include <windows.h>
  #define glGetProcAddress(a) wglGetProcAddress(a)
#endif
#ifdef X11
  #define glGetProcAddress(a) glXGetProcAddress ( \
    reinterpret_cast<const unsigned char*>(a)     \
  )
#endif

#ifndef GetExtension
  #define GetExtension(Type, ExtenName)     \
    ExtenName = (Type)                      \
    glGetProcAddress(STRINGIFY(ExtenName)); \
    if(!ExtenName)                          \
    {                                       \
      std:cout << "Your Computer Does Not " \
               << "Support GL Extension: "  \
               << STRINGIFY(ExtenName)      \
               << std::endl;                \
      exit(1);                              \         
    }                                       \
    else                                    \
    {                                       \
      std::cout << "Loadded Extension: "    \
                << STRINGIFY(ExtenName)     \
                << std::endl;               \
    }
#endif

// then just use this :D
GetExtension(PFNGLGENBUFFERSARBPROC, glGenBuffersARB)
// after your done you can do this
#undef GetExtension
#undef glGetProcAddress
// you can then also undef the STRINGIFY macro
// though it does come in handy.

答案 1 :(得分:0)

检查link。也许它会对你有帮助;)

if (GLEW_VERSION_1_5)
{
  /* You have OpenGL 1.5 */
}

尝试glGenBuffersARB insted glGenBuffers;我想你只需要检查1.5支持;