freeglut窗口初始化+ glew 3.0上下文创建不起作用[关闭]
Posted
技术标签:
【中文标题】freeglut窗口初始化+ glew 3.0上下文创建不起作用[关闭]【英文标题】:freeglut window init + glew 3.0 context creation does not work [closed] 【发布时间】:2013-05-24 18:28:11 【问题描述】:我正在尝试使用 freeglut 创建一个窗口,然后使用 glew 创建一个 3.2 上下文,以便使用现代 OpenGL 函数(使用 c++ 和 Windows pc)。我的问题是上下文创建(我在 freeglut 初始化之前和之后都尝试过)似乎不起作用,每次我尝试使用 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 初始化代码是从他们的网站 1:1 复制的。 我希望我的错误不是太明显,并且有人找到时间来帮助我。
【问题讨论】:
你确定你的显卡支持吗? 对不起,我没有提到这一点。我是。我有一个带有最新驱动程序的 hd 7950,它应该支持甚至 4.2 所以您的代码显示 OpenGL 3.2 已准备就绪等,但函数崩溃了? Tile 说 3.0,body 说 3.2。你真正想要哪个?核心还是兼容性? 你为什么不用glutInitContext*()
and friends?
【参考方案1】:
你有问题:
glutInitDisplayMode(GLUT_RGBA || GLUT_DOUBLE || GLUT_DEPTH);
布尔 OR ||
与位 OR |
不同。您想要位 OR 位掩码|
,而不是布尔值或它们。除此之外,通过这种方式,您将获得 OpenGL-3 兼容性配置文件上下文,而不是核心上下文。
【讨论】:
哦,谢谢。这个错误只是愚蠢的,我真的不知道我为什么这样做......但是我怎样才能创建一个核心上下文? @user1059863: FreeGLUT 提供了一组扩展函数glutInitContextVersion(majorVersion, minorVersion)
、glutInitContextFlags(flags); flags: GLUT_DEBUG, GLUT_FORWARD_COMPATIBLE
、glutInitContextProfile(profile); profile: GLUT_CORE_PROFILE ^ GLUT_COMPATIBILITY_PROFILE
,如果在调用glutCreateWindow(…)
之前设置它们将影响上下文创建使用选定的属性创建上下文。以上是关于freeglut窗口初始化+ glew 3.0上下文创建不起作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Win10 VS2015 OpenGL + freeglut + glew + glm 环境配置
OpenGL环境配置 win10,vs2015,glew,freeglut, glm