无法在OpenGL中使用某些功能(glGenBuffers)

时间:2013-11-05 20:53:29

标签: opengl glew glfw

我在其他地方看到了类似的问题,但没有人回答或解决了我的问题。

我在上下文创建之后但在我致电glfwMakeContextCurrent()

之前正确启动了 GLEW

我启动后尝试使用glGenBuffers(),但它不起作用。引发错误。

我的OpenGL版本是3.2,所以根据我的阅读,我可以在我的程序中使用此功能。如果我不能,请让我知道。我将尝试找出一种不同的方法来做到这一点。

我正在使用 Windows 7 VS2012 ,似乎所有内容都已正确关联。希望我提供了我需要的所有信息。

#include <stdlib.h>

#include <stdio.h>

#include <GL/glew.h>

#include <GLFW/glfw3.h>

#include <thread>

int main(){

//Initialize GLFW
if(!glfwInit()){
    printf("GLFW was not initialized successfully!\n");
    std::this_thread::sleep_for(std::chrono::seconds(5));
    exit(EXIT_FAILURE);
}
else{
    printf("GLFW was initialized successfully!\n");
}

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

GLFWwindow* window = glfwCreateWindow(800, 600, "PONG!", nullptr, nullptr); // Windowed

glewExperimental = GL_TRUE;
if(!glewInit()){
    printf("GLEW was not initialized successfully!\n");
    std::this_thread::sleep_for(std::chrono::seconds(5));
    exit(EXIT_FAILURE);
}
else{
    printf("GLEW was initialized successfully!\n");
}

glfwMakeContextCurrent(window);

GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);

printf("%u\n", vertexbuffer);

fprintf(
    stdout,
    "INFO: The OpenGL version is: %s\n",
    glGetString(GL_VERSION)
);

fprintf(
    stdout,
    "INFO: The GLEW version is: %s\n",
    glewGetString(GLEW_VERSION)
);

while(!glfwWindowShouldClose(window)){
    glfwSwapBuffers(window);
    glfwPollEvents();

    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS){
        glfwDestroyWindow(window);
        window = glfwCreateWindow(800, 600, "PONG!", nullptr, nullptr);
    }
    else if (glfwGetKey(window, GLFW_KEY_F) == GLFW_PRESS){
        glfwDestroyWindow(window);
        window = glfwCreateWindow(800, 600, "PONG!", glfwGetPrimaryMonitor(), nullptr);
    }
}
}

1 个答案:

答案 0 :(得分:4)

  

我在上下文创建之后但在我致电glfwMakeContextCurrent()

之前正确启动了 GLEW

Welp,这是你的问题right there

  

成功创建不会更改当前的上下文。在使用新创建的上下文之前,您需要使用glfwMakeContextCurrent将其设置为当前。

glewInit()之后致电glfwMakeContextCurrent()