我正在尝试使用freeglut创建一个窗口,然后使用glew创建一个3.2上下文,以便使用现代OpenGL函数(使用c ++和Windows pc)。我的问题是上下文创建(我尝试在freeglut init之前和之后都做了)似乎没有用,每次我尝试使用像glCreateShader这样的函数时我都会遇到访问冲突。
我使用的代码看起来像这样(它位于int main(int argc,char ** argv)方法的开头):
glutInit(&argc, argv);
glutInitWindowPosition(-1, -1);
glutInitWindowSize(640, 480);
glutInitDisplayMode(GLUT_RGBA || GLUT_DOUBLE || GLUT_DEPTH);
glutCreateWindow("some title");
glewExperimental = GL_TRUE;
GLenum err = glewInit();
if (GLEW_OK != err)
{
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
if (GLEW_VERSION_3_2)
{
fprintf(stdout, "OpenGL 3.2 ready", glewGetString(GLEW_VERSION));
}
...
vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER); //<-- Access Violation
此外,glew init代码从其网站以1:1复制。 我希望我的错误不是太明显,而且有人找时间来帮助我。
答案 0 :(得分:2)
你遇到了问题:
glutInitDisplayMode(GLUT_RGBA || GLUT_DOUBLE || GLUT_DEPTH);
布尔值OR ||
与位OR |
不同。你想要位 OR位掩码|
,而不是布尔值或它们。除此之外,通过这种方式,您将获得OpenGL-3兼容性配置文件上下文,而不是核心上下文。