Не могу использовать определенные функции в OpenGL (glGenBuffers)

Я видел вопросы, похожие на мои, но никто не ответил и не решил мою проблему.

Я правильно инициировал GLEW сразу после создания Context, но до вызова glfwMakeContextCurrent()

После того, как я инициировал, я пытаюсь использовать 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);
    }
}
}

person Wesley    schedule 05.11.2013    source источник
comment
Выдает ошибку. Вы собираетесь сказать нам, что это за сообщение об ошибке?   -  person Ben Voigt    schedule 06.11.2013
comment
Нарушение доступа. Это все, что он говорит.   -  person Wesley    schedule 06.11.2013
comment
Это уже весьма полезно. Запустите в режиме отладки и сообщите нам, на какую строку он указывает при сбое (и, если не в вашем коде, каков стек вызовов)   -  person Ben Voigt    schedule 06.11.2013
comment
Тогда ваш контекст имеет неправильную форму и/или функция не загружена должным образом.   -  person Bartek Banachewicz    schedule 06.11.2013


Ответы (1)


Я правильно инициировал GLEW сразу после создания Context, но до вызова glfwMakeContextCurrent()

Хорошо, вот ваша проблема прямо здесь:

Успешное создание не влияет на текущий контекст. Прежде чем вы сможете использовать только что созданный контекст, вам необходимо сделать его текущим с помощью glfwMakeContextCurrent.

Позвоните glewInit() после glfwMakeContextCurrent().

person genpfault    schedule 05.11.2013
comment
Хорошо, я сделал это. И я все еще получаю ту же ошибку. Может я что-то не то заказываю? - person Wesley; 06.11.2013
comment
@ Уэсли, ты принял это как ответ, сказав, что это не решило твою проблему. Итак, каково было решение? Этот сайт предназначен не только для того, чтобы помочь себе, знаете ли! Это должна быть база знаний. - person Engineer; 18.07.2015