Программа на OpenGL & GLFW & GLEW зависает при попытке отрисовки треугольника

Я попытался вывести треугольник на экран с помощью OpenGL и GLEW, и при вызове функции отрисовки программа вроде запускается, но в итоге просто не отвечает... Думаю проблема в функции draw:

VAO.cpp

#include "VAO.h"
#include <GL/gl.h>

VAO::VAO()
{
    glGenVertexArrays(1, &VertexArrayID);
}

VAO::~VAO()
{
    glDeleteVertexArrays(1, &VertexArrayID);
    glDeleteBuffers(buffers.size(), buffers.data());
}

void VAO::addVBO(const std::vector <float>& g_vertex_buffer_data)
{
    glGenBuffers(1, &VertexBufferID);
    glBindBuffer(GL_ARRAY_BUFFER, VertexBufferID);
    glBufferData(GL_ARRAY_BUFFER, g_vertex_buffer_data.size() * sizeof(float), g_vertex_buffer_data.data(), GL_STATIC_DRAW);
    
    glVertexAttribPointer(buffers.size(), 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
    buffers.push_back(VertexArrayID);
}

void VAO::draw()
{
    glBindVertexArray(VertexArrayID);
    glEnableVertexAttribArray(0);

    glDrawArrays(GL_TRIANGLES, 0, 3);

    glDisableVertexAttribArray(0);
}

VAO.h

#pragma once
#include <vector>
#include <GL/gl.h>

class VAO
{
public:

    std::vector <GLuint> buffers;
    GLuint VertexArrayID;
    GLuint VertexBufferID;
    VAO();
    VAO(const VAO&) = delete;
    ~VAO();

    void addVBO(const std::vector<float> & g_vertex_buffer_data);
    void draw();
};

Window.cpp

#include "Window.h"
#include "GL/gl.h"
#include <GLFW/glfw3.h>
#include <stdexcept>


Window::Window(const std::string& title, int width, int height)
{

    mWindow = glfwCreateWindow(width, height, title.c_str(), nullptr, nullptr);
    if (!mWindow)
    {
        throw std::runtime_error("Couldn't initialize window");
    }
    setContextCurrent();
    glewExperimental = true;
    if (glewInit() != GLEW_OK)
    {
        throw std::runtime_error("Failed to initialize GLEW :(");
        
    }
}

Window::~Window()
{
    glfwDestroyWindow(mWindow);
}

void Window::setContextCurrent()
{
    glfwMakeContextCurrent(mWindow);
}

void Window::loop()
{
    VAO vao;
    vao.addVBO({
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        0.0f,  1.0f, 0.0f
        });
    while (!glfwWindowShouldClose(mWindow))
    {
        
        glClearColor(1, 0, 1, 1);
        glClear(GL_COLOR_BUFFER_BIT);

        vao.draw();

        glfwSwapBuffers(mWindow);
        glfwPollEvents();
    }
}

Ответы (1 шт):

Автор решения: luk_chesnok_xren

Видимо, OpenGL и GLEW не любят, когда биндят vertex array в цикле, нужно сделать это один раз в констукторе класса VAO, у меня все заработало)))

→ Ссылка