编程环境:
笔记本双显卡 HD 4600 + GTX860M
操作系统 Windows 8.1企业版
编程语言 VS2015企业版
OpenGL工具开发包 freeglut 3.0.0 + glew 1.12.0
折腾了两天加上查资料总算全解决了,下面把我遇到的情况总结一下。
OpenGL红皮书第8版全面转向着色器的使用,第一个例子就用到了着色语言。
1. 编译遇到的第一个问题就是出现异常:
停到
glGenVertexArrays(NumVAOs, VAOs);
glBindVertexArray(VAOs[Triangles]);
这两个语句。
错误提示
0x00000000 处(位于 WC4GL4.exe 中)引发的异常: 0xC0000005: 执行位置 0x00000000 时发生访问冲突。
如有适用于此异常的处理程序,该程序便可安全地继续运行。
查了很多网上资料很多说指针未赋值,为空怎么的,一个数组的全局变量怎么会这样,想到是不是开发包的问题,
重新下载了最新的源程序,重新编译,还是有这个问题,后来查到有人说到具体错误原因及解决方法:
在glewInit() 之前要加上这句:
glewExperimental = GL_TRUE;
具体说明请看原链接:
http://stackoverflow.com/questions/20822087/why-does-this-crash-when-using-opengl-core-profile
2.修改以后
glutInitContextVersion(4,5);
glutInitContextProfile(GLUT_CORE_PROFILE);
版本设置为3.3到4.2程序正常,但是设置为版本4.3到4.5,每次都在glutCreateWindow(argv[0]);处退出,跟踪到源文件
也没有用都是在最后建立窗口的时候直接1退出。
后来想是不是驱动问题,因为编译前用过GPU_Caps_Viewer查过显示OpenGL支持到4.5版本,这时候又用AIDA64 查了下
Intel HD4600显卡确实只支持到4.2版本,4.3版本只支持50%。后来又检查了下GTX 860M显卡支持4.5版本。
这牵扯到双显卡的选用,找到程序输出目录右键选择高性能NVIDIA处理器打开,设为默认高性能打开。
重新选择4.5版本编译后可以运行,但是显示黑屏,到程序目录选择用NVIDIA高性能打开可以正常显示。
3.还有着色语言编写错误可能会出现黑屏。