1

我已经开始使用 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()。抱歉我笨了:(

4

0 回答 0