glLinkProgram()在程序执行中未定义,即使glew报告它存在

时间:2012-10-04 06:07:36

标签: c++ opengl glew

我正在使用(非常)低端图形适配器(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()并产生了与上述相同的错误。

2 个答案:

答案 0 :(得分:2)

鉴于ig4icd32.dll是英特尔的驱动程序,而且它正在崩溃,我猜测英特尔的驱动程序崩溃了。

它不应该这样做,但不要感觉不好。英特尔以糟糕的OpenGL驱动程序而闻名。尽可能避免使用它们。

答案 1 :(得分:0)

我在英特尔移动4高速芯片组上遇到了同样的问题,着色器编译得很好,但是在链接实际程序时抛出的异常,即使是简单的顶点或片段着色器也是如此。 我没有使用glew,在我的程序中,glLinkProgram以这种方式被调用:

   ((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"))(p);

然后我首先获取指针,然后调用实际函数来解决这个问题。 我不知道为什么它会以这种方式运作。

    PFNGLLINKPROGRAMPROC glLinkProgram = ((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"));
glLinkProgram(p);

我尝试更好地调试第一个语句,以便找到程序崩溃的原因。