У меня есть простая, но сложная проблема. Я запускаю следующий код:
OpenGL::PrintError(__FILE__, __LINE__);
GLuint raytracer = CompileRayTracer();
OpenGL::SetProgram(raytracer);
OpenGL::PrintError(__FILE__, __LINE__);
// Generate the buffer.
OpenGL::PrintError(__FILE__, __LINE__);
GLuint pixelbuffer;
glGenBuffers(1, &pixelbuffer);
OpenGL::PrintError(__FILE__, __LINE__);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, pixelbuffer);
OpenGL::PrintError(__FILE__, __LINE__);
glBufferData(GL_SHADER_STORAGE_BUFFER, window.GetWidth() * window.GetHeight() * 4 * 3, NULL, GL_DYNAMIC_COPY);
OpenGL::PrintError(__FILE__, __LINE__);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, NULL);
OpenGL::PrintError(__FILE__, __LINE__);
GLuint index = glGetProgramResourceIndex(raytracer, GL_SHADER_STORAGE_BLOCK, "PixelBuffer");
OpenGL::PrintError(__FILE__, __LINE__);
glShaderStorageBlockBinding(raytracer, index, 1);
OpenGL::PrintError(__FILE__, __LINE__);
Содержимое следующих переменных:
raytracer: 2
window.GetWidth() * window.GetHeight() * 4 * 3: 1228800
pixelbuffer: 1
Вместо какого-то отображения ошибок OpenGL я получаю ошибку исключения, и моя программа прерывает/прерывает именно эту строку.
Кто-нибудь знает, в чем проблема?
РЕДАКТИРОВАТЬ:
Я выяснил, что glGetProgramResourceIndex имеет значение NULL (как я полагаю, указатель на функцию), поэтому я думаю, что это имеет какое-то отношение к GLEW?
Ответ был следующим:
glewExperimental = GL_TRUE;
К сожалению, некоторые из функций не загружаются без этого флага.