Почему фигура не выводится на экран в приложении написанном на C++ OpenGL?

Есть программа написанная на C++ с использованием OpenGL(GLFW, GLEW, GLM), которая должна выводить разноцветный вращающийся пятиугольник на экран.

Код:

#include "GL/glew.h"
#include "GLFW/glfw3.h"

#include "glm.hpp"
#include "gtc/matrix_transform.hpp"
#include "gtc/type_ptr.hpp"

#include <iostream>

#include <math.h>

const GLchar* vertexShaderSource =
"#version 330 core\n"
"layout (location = 0) in vec3 position;\n"
"layout (location = 1) in vec3 color;\n"
"uniform mat4 transform;\n"
"out vec3 pass_color;\n"
"void main()\n"
"{\n"
"gl_Position = transform * vec4(position, 1.0f);\n"
"pass_color = color;\n"
"}\n";

const GLchar* fragmentShaderSource =
"#version 330 core\n"
"in vec3 pass_color;\n"
"uniform float animation;\n"
"out vec4 color;\n"
"void main()\n"
"{\n"
"color = vec4(pass_color, 1.0f) * animation;\n"
"}\n";

GLfloat vertices[] = {
     0.0, 0.5, 0.0,
     0.5, 0.0, 0.0,
     0.25, -0.5, 0.0,
     -0.25, -0.5, 0.0,
     -0.5, 0.0, 0.0
};

GLfloat color[] = {
    1.0, 0.0, 0.0,
    0.0, 1.0, 0.0,
    0.0, 0.0, 1.0,
    0.0, 1.0, 0.0,
    1.0, 0.0, 0.0
};

GLuint indices[] = {
    0, 1, 2,
    4, 2, 3,
    4, 0, 2
};

int main()
{
    glfwInit();

    glewExperimental = GL_TRUE;

    GLFWwindow* window = glfwCreateWindow(1024, 512, "OpenGL Engine", nullptr, nullptr);
    glfwMakeContextCurrent(window);

    glewInit();

    GLuint vertexShader, fragmentShader, shaderProgram;

    vertexShader    = glCreateShader(GL_VERTEX_SHADER);
    fragmentShader  = glCreateShader(GL_FRAGMENT_SHADER);

    glShaderSource(vertexShader, 1, &vertexShaderSource, nullptr);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, nullptr);

    glCompileShader(vertexShader);
    glCompileShader(fragmentShader);

    shaderProgram = glCreateProgram();

    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);

    glLinkProgram(shaderProgram);

    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);

    GLuint VBO1, VBO2, VAO, EBO;

    glGenVertexArrays(1, &VAO);

    glGenBuffers(1, &VBO1);
    glGenBuffers(1, &VBO2);

    glGenBuffers(1, &EBO);

    glBindVertexArray(VAO);

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

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
    glEnableVertexAttribArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, VBO2);
    glBufferData(GL_ARRAY_BUFFER, sizeof(color), color, GL_STATIC_DRAW);

    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
    glEnableVertexAttribArray(1);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

    glBindVertexArray(0);

    glClearColor(0.75f, 0.0f, 1.0f, 1.0f);

    GLfloat animation = 0.0;
glm::mat4 transform;

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

    glClear(GL_COLOR_BUFFER_BIT);

    glUseProgram(shaderProgram);

    animation = sin(glfwGetTime()) / 2 + 0.5;
    transform = glm::rotate(transform, (GLfloat)glfwGetTime() * 50.0f, glm::vec3(0.0f, 0.0f, 1.0f));

    glUniform1f(glGetUniformLocation(shaderProgram, "animation"), animation);
    glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "transform"), 1, GL_FALSE, glm::value_ptr(transform));

    glBindVertexArray(VAO);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
    glBindVertexArray(0);

    glfwSwapBuffers(window);
}

    glDetachShader(shaderProgram, vertexShader);
    glDetachShader(shaderProgram, fragmentShader);

    glDeleteProgram(shaderProgram);

    glDeleteBuffers(1, &VBO1);
    glDeleteBuffers(1, &VBO2);

    glDeleteVertexArrays(1, &VAO);

    glfwDestroyWindow(window);

    glfwTerminate();

    return 0;
}

Вместо выполнения своей работы, она просто выводит пустое окно:


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