“0x00000000的第一次机会异常”我做错了什么?

时间:2013-12-04 22:00:33

标签: c++ glut

这是我的代码到目前为止,它只是来自open.gl的教程代码

#include <GL/GL.h>
#include <GL/glew.h>    
#include <GLFW/glfw3.h>
#include <thread>
#define GLEW_STATIC

int main(){
    //printf("%s\n", glGetString(GL_EXTENSIONS))
    glewExperimental = GL_TRUE;

    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr); // Windowed
    //GLFWwindow* window = glfwCreateWindow(1920, 1080, "OpenGL", glfwGetPrimaryMonitor(), nullptr); fs

    //typedef void (*GENBUFFERS) (GLsizei, GLuint*);
    //GENBUFFERS glGenBuffers = (GENBUFFERS)glfwGetProcAddress("glGenBuffers");

    printf("%s\n", glGetString(GL_EXTENSIONS));

    glfwMakeContextCurrent(window);


    glewInit();


    GLuint vertexBuffer;

    glGenBuffers(1, &vertexBuffer);
    printf("%u\n", vertexBuffer);

    float vertices[] = {
     0.0f,  0.5f, // Vertex 1 (X, Y)
     0.5f, -0.5f, // Vertex 2 (X, Y)
    -0.5f, -0.5f  // Vertex 3 (X, Y)
    };


    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);


    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);



    //glfwSetWindowShouldClose(window, GL_FALSE);


    while(!glfwWindowShouldClose(window)){
    glfwSwapBuffers(window);
    glfwPollEvents();
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
    }


    glfwTerminate();
}

返回上面的异常......发生了什么,出了什么问题?

错误在glGenBuffers(1,&vertexBuffer);

处下降

我仍然是opengl编程的新手,所以如果可以的话,请将它分解为autismally小件:)

1 个答案:

答案 0 :(得分:1)

位置0发生错误表明您正在尝试使用空函数指针调用函数。您案件中的罪魁祸首似乎是glGenBuffers。它已经存在了很长一段时间,所以几乎可以肯定你的机器支持它。它可能还没有正确初始化。

您可以使用GLEW(GL Extension Wrangler)这样的库来帮助您。这不是你应该长期依赖的东西,但绝对可以帮助你开始而不用担心很多细节。

或者,一个非常快速和肮脏的解决方案可能只是调用glGenBuffersARB()。再说一次,这绝对不是长期依赖的东西!

这些问题可能有所帮助: