使用glew时,glGenBuffers为NULL,表示0x0000000访问冲突

时间:2011-02-16 20:53:38

标签: windows opengl access-violation

>我有visual studio c ++ express和NVIDIA GeForce 7900 GS。我正在使用glew来获取openGL扩展。调用glGenBuffers崩溃为其NULL指针tho。在我进行调用之前,我有一个开放的GL上下文(wglGetCurrentContext()!= NULL)。我在通话前打电话给glewInit()。 glewGetString(GLEW_VERSION)返回GLEW_VERSION_1_5。我究竟做错了什么 ?这张卡太旧了吗?是司机吗?

5 个答案:

答案 0 :(得分:5)

请记住在代码中进行glewInit()调用,以便获得有关GL函数的有效指针。

希望它有所帮助。

答案 1 :(得分:1)

如果没有看到你的代码就很难说,但是你试图做的事情似乎可以通过使用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无耻地复制/粘贴,但它显示了我试图展示的功能。

答案 2 :(得分:0)

我实际上遇到了GLEW这个问题。对我来说,它使glGenerateMipmap的函数指针无效。我通过简单地恢复指向适当函数的指针来修复它。这是我在Linux中的例子:

glGenerateMipmap = (void(*)(GLenum))
    glXGetProcAddressARB((GLubyte*)"glGenerateMipmap");

glXGetProcAddress有一个WGL等价物;我只是不记得我头顶的名字了。尝试使用此方法手动还原功能。如果您遇到许多的null函数,那么在您的设置过程中肯定会出现问题。我记得必须恢复的唯一其他函数是glGenVertexArrays,glBindVertexArray和glDeleteVertexArrays。如果你的glGenBuffers是null,那么glBindBuffer和glDeleteBuffers也是空的。 :(

答案 3 :(得分:0)

通过检查glGetString返回的字符串(GL_EXTENSIONS)来测试是否实际支持所需的扩展名;如果它不存在,你就知道是什么导致了你的问题。

答案 4 :(得分:0)

您需要调用具有有效上下文的glewInit()帖子。在你调用glfwMakeContextCurrent(myWindow)之后,就在glew的世界里;