我确信所有的东西都是正确链接的。我最初使用的是来自非官方GLSDK的glload和glfw,但后来我决定放弃glload,这意味着我必须使用glew才能获得现代的头文件。
#include <GL/glew.h>
#include <GL/glfw.h>根据说明,我已经在glfw之前包含了glew。
在运行时,OpenGL窗口会打开
//(relevant code)
if(!glewInit()) {return -1; }
if(!glfwInit()) {return -1; }
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// also tried glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
if(!glfwOpenWindow(1024, 768, 8, 8, 8, 8, 24, 8, GLFW_WINDOW)){
glfwTerminate();
return -1;
}
glfwSetWindowTitle("OpenGL 3.2");
//init method
glGenVertexArrays(1, &vao); //<< Access violation here.你知道我的问题出在哪里吗?
我看过了。"Access violation using VBO with glew“,但没有帮助。
发布于 2012-12-19 09:32:42
发布于 2013-11-01 13:30:14
有点晚了,但我想我还是来吧。
正如datenwolf所提到的,在你发布的相关代码中,由于glewInit()的定位,它应该会返回一个错误。
您可能会遇到的另一个潜在问题在http://www.opengl.org/wiki/OpenGL_Loading_Library的GLEW部分下进行了描述。
从上面复制-粘贴:
GLEW在核心上下文方面有一个问题。它调用
glGetString(GL_EXTENSIONS),一旦调用glewInit(),就会导致GL核心上下文上的GL_INVALID_ENUM。
GLEW的解决方案(也由上面的链接提供)是启用“实验性”支持。例如:
glewExperimental = GL_TRUE;
GLenum err = glewInit();
if( err != GLEW_OK )
{
printf("GlewInit error");
exit(1);
}发布于 2015-10-05 08:57:16
也很晚了,但对于任何还在寻找的人来说
glewExperimental = GL_TRUE;在初始化上下文之前,去掉了访问冲突错误,而是使程序退出时出现了GL_INVALID_ENUM错误。使用GLFW,我必须另外注释掉窗口提示:
//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);然后程序就开始编译了!
https://stackoverflow.com/questions/13943825
复制相似问题