Что не так с классом для создания VBO, VAO и EBO
что я сделал не так в классе для создания VBO, VAO и EBO?
класс .h:
#pragma once
#include <vector>
class VO {
private:
unsigned int VAO;
unsigned int VBO;
public:
void createVertexObjects(std::vector<float> vertices, int8_t verticesCount, std::vector<unsigned int> indices);
void unBind();
unsigned int getVAO() { return VAO; }
~VO();
};
класс .cpp:
#include "VertexObjects.h"
#include "GLAD/glad.h"
void VO::createVertexObjects(std::vector<float> vertices, int8_t verticesCount, std::vector<unsigned int> indices)
{
unsigned int EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), vertices.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), indices.data(), GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, verticesCount * sizeof(float), (void*)0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
void VO::unBind()
{
glBindVertexArray(0);
}
VO::~VO()
{
glDisableVertexAttribArray(0);
glDeleteBuffers(1, &this->VBO);
glDeleteVertexArrays(1, &this->VAO);
}
Данные для VBO и EBO:
Координаты вершин:
std::vector<float> vertices = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f };Индексы для EBO:
std::vector<unsigned int> indices = { 1, 2, 3 };
Ответы (1 шт):
Автор решения: LGL
→ Ссылка
Я решил проблему. Раньше в классе треугольника, в функции "createVO()"(где и создавался VAO, VBO и EBO через функцию "VO::createVertexObject()") я объявлял объект класса VO, теперь же я объявил объект как член класса(в .h файле). И заработало! Но я так и не понял почему тогда оно не работало.