Я использую (очень) недорогой графический адаптер (Intel G31).
Я пишу программу OpenGL, которая использует VBO и шейдеры (GLSL 1.2). Программа компилируется без нареканий, но потом, когда она вызывает glLinkProgram()
, исключение выдается:
Unhandled exception at 0x1027101A (ig4icd32.dll) in Test.exe: 0xC0000005: Access violation reading location 0x00000000.
Я использовал glew’s glewinfo.exe и OpenGL Extensions Viewer, чтобы узнать, glLinkProgram()
существует — и существует Также другие тесно связанные функции (glCreateProgram()
, glCreateShader()
, glCompileShader()
и т. д.) работает и работает по назначению.
Что может быть фактическим источником проблемы? Это проблема или ошибка glew? Это проблема моего водителя?
Я поставил glewExperimental
в GL_TRUE
который решил многие из моих других проблем.
РЕДАКТИРОВАТЬ: Я также использовал glLinkProgramARB()
и выдает ту же ошибку, что и выше.
При условии ig4icd32.dll это драйвер Intel, и вот где он падает, я предполагаю, что драйвер Intel дает сбой.
Это не должно делать это, но не чувствовать себя плохо. Intel довольно хорошо известна плохими драйверами OpenGL. Лучше всего избегать их везде, где это возможно.
У меня была та же проблема с набором микросхем Intel Mobile 4 Express, шейдер был скомпилирован просто отлично, но это исключение, возникающее при связывании реальной программы, даже с тривиальными вершинными или фрагментными шейдерами.
Я не использовал glew, и в моей программе glLinkProgram вызывался так:
((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"))(p);
Затем я решил эту проблему, сначала получив указатель, а затем вызвав реальную функцию.
Я не знаю, почему это так работает.
PFNGLLINKPROGRAMPROC glLinkProgram = ((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"));
glLinkProgram(p);
Я пытаюсь лучше отладить первое утверждение, чтобы найти причину сбоя программы.