glGenBuffers 为 NULL,在使用 glew 时给出 0x0000000 访问冲突
Posted
技术标签:
【中文标题】glGenBuffers 为 NULL,在使用 glew 时给出 0x0000000 访问冲突【英文标题】:glGenBuffers is NULL giving a 0x0000000 access violation when using glew 【发布时间】:2011-02-16 20:53:38 【问题描述】:> 我有 Visual Studio C++ Express 和 NVIDIA GeForce 7900 GS。我正在使用 glew 来获取 openGL 扩展。调用 glGenBuffers 会崩溃,因为它是一个 NULL 指针。在我拨打电话之前,我有一个开放的 GL 上下文( wglGetCurrentContext() != NULL )。我在通话前打电话给 glewInit() 。 glewGetString( GLEW_VERSION ) 正在返回 GLEW_VERSION_1_5。我究竟做错了什么 ?卡太旧了?是司机吗?
【问题讨论】:
您是否将 NULL 指针传递给 glGenBuffers? 不绝对不是 -> Gluint vbo; glGenBuffers(1, &vbo); 你能检查一下指向 glGenBuffers 的函数指针是否为零吗? 【参考方案1】:记得在您的代码中调用glewInit()
,以便获得指向 GL 函数的有效指针。
希望对你有帮助。
【讨论】:
【参考方案2】:如果没有看到您的代码,很难判断,但您尝试做的事情似乎可以通过使用 GLee 得到很大帮助。它旨在加载所有当前扩展,您可以检查支持的内容,例如:
#include <gl\GLee.h> // (no need to link to gl.h)
...
if (GLEE_ARB_multitexture) //is multitexture support available?
glMultiTexCoord2fARB(...); //safe to use multitexture
else
//fallback
以上内容是从GLee site 无耻地复制/粘贴的,但它显示了我想要展示的功能。
【讨论】:
但是我使用 glew 肯定就足够了? @Mark:从来没有用过glew,所以我不能确定。我只是提供 GLee 作为替代方案,因为它对我来说非常效果很好。一些似乎对 glew 有问题的人没有使用 GLee (nvnews.net/vbulletin/showthread.php?t=154581)。【参考方案3】:您需要调用 glewInit() 发布具有有效上下文的帖子。在你调用 glfwMakeContextCurrent(myWindow); 之后,在 glew 的世界中就是这样。
【讨论】:
【参考方案4】:我实际上遇到了 GLEW 的这个问题。对我来说,它使 glGenerateMipmap 的函数指针无效。我通过简单地将指针恢复到适当的函数来修复它。这是我在 Linux 中的示例:
glGenerateMipmap = (void(*)(GLenum))
glXGetProcAddressARB((GLubyte*)"glGenerateMipmap");
glXGetProcAddress 有一个 WGL 等价物;我只是不记得我头顶上的名字。尝试使用此方法手动恢复功能。如果您遇到 许多 为 null 的函数,那么您的设置过程肯定有问题。我记得唯一需要恢复的其他函数是 glGenVertexArrays、glBindVertexArray 和 glDeleteVertexArrays。如果您的 glGenBuffers 为空,则 glBindBuffer 和 glDeleteBuffers 也很可能为空。 :(
【讨论】:
wglGetProcAddress 是名称。【参考方案5】:通过检查 glGetString(GL_EXTENSIONS); 返回的字符串来测试是否实际支持所需的扩展。如果它不存在,您就知道是什么导致了您的问题。
【讨论】:
人们对这样做的根本原因一无所知。只知道不枚举。以上是关于glGenBuffers 为 NULL,在使用 glew 时给出 0x0000000 访问冲突的主要内容,如果未能解决你的问题,请参考以下文章