我正在使用(非常)低端图形适配器(intel g31)。
我正在编写一个使用VBO和着色器的OpenGL程序(GLSL 1.2)。该程序完美编译,但当它调用glLinkProgram()
时,抛出异常:
Unhandled exception at 0x1027101A (ig4icd32.dll) in Test.exe: 0xC0000005: Access violation reading location 0x00000000.
我使用glew的glewinfo.exe和OpenGL Extensions Viewer来查看glLinkProgram()
是否存在 - 它确实存在。其他密切相关的函数(glCreateProgram()
,glCreateShader()
,glCompileShader()
等)也可以正常运行。
问题的实际根源是什么?这是一个问题还是一个虫子的错误?这是我司机的问题吗?
我已将glewExperimental
设置为GL_TRUE
,这解决了我的许多其他问题。
编辑:我还使用了glLinkProgramARB()
并产生了与上述相同的错误。
答案 0 :(得分:2)
鉴于ig4icd32.dll是英特尔的驱动程序,而且它正在崩溃,我猜测英特尔的驱动程序崩溃了。
它不应该这样做,但不要感觉不好。英特尔以糟糕的OpenGL驱动程序而闻名。尽可能避免使用它们。
答案 1 :(得分:0)
我在英特尔移动4高速芯片组上遇到了同样的问题,着色器编译得很好,但是在链接实际程序时抛出的异常,即使是简单的顶点或片段着色器也是如此。 我没有使用glew,在我的程序中,glLinkProgram以这种方式被调用:
((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"))(p);
然后我首先获取指针,然后调用实际函数来解决这个问题。 我不知道为什么它会以这种方式运作。
PFNGLLINKPROGRAMPROC glLinkProgram = ((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"));
glLinkProgram(p);
我尝试更好地调试第一个语句,以便找到程序崩溃的原因。