我已经开始使用 OpenGL 3.3 开发一个新项目。我使用 GLFW 和 GLEW 进行窗口设置和加载 GL 函数,但切换到非官方 OpenGL SDK 而不是 GLEW。但问题仍然存在:
我在调用 glCreateShader(G_VERTEX_SHADER) 时遇到了分段错误,结果发现函数指针为 NULL。后来我发现它是由无效的GL Context引起的。
这是设置代码:
#include <glload/gl_3_3.h>
#include <glload/gll.h>
#include <GL/glfw.h>
#include <glm.hpp>
#include <gtc/matrix_transform.hpp>
#include "Cube.h"
template <class T>
int arraySize(T *a) {
return (sizeof(a) / sizeof(*a));
}
int main() {
if(!glfwInit()) {
fprintf(stderr, "Failed to initialize GLFW\n");
return -1;
}
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
// Open a window and create its OpenGL context
if(!glfwOpenWindow(1024, 768, 0,0,0,0, 0,0, GLFW_WINDOW)) {
fprintf(stderr, "Failed to open GLFW window\n");
glfwTerminate();
return -1;
}
if(LoadFunctions() == LS_LOAD_FAILED) {
fprintf(stderr, "Failed to load GL functions.\n");
return -1;
}
我已经在谷歌和这里搜索了答案,但没有找到任何东西。我还在 Freenode 上的 OpenGL IRC 频道中询问过,他们告诉我尝试使用非官方 SDK 而不是 GLEW,因为带有核心配置文件的 GLEW 不好。但是,这没有用。
最奇怪的是,它以前工作过,设置与现在完全相同。
顺便说一句,我正在使用带有最新可用驱动程序的 Windows 7 x64。
解决方案:我很笨,在 glewInit() 之前调用 glCreateShader()。抱歉我笨了:(