我检查了文档,并且说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,这没有任何意义!
答案 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支持;