Когда я пытаюсь поместить код для объектов массива вершин и буферов в класс для его автоматизации, это не работает. Но вне класса код работает нормально.
Я пытаюсь создать класс, который я могу вызвать для создания всего необходимого для рендеринга объекта в OpenGL (VBO, VAO, IBO). и атрибуты Vertex), а затем помещаю их в массив, чтобы мне не приходилось писать весь код вручную; и когда придет время рисовать, я могу просто пролистать список и нарисовать все. Но, кажется, ничего не работает, я пробовал malloc, векторы и статические массивы, и ни один из них не работает. Все они прекрасно работают вне классов, но когда я пишу их внутри классов, я получаю черный экран.
код, который работает:
std::vector VAOs;
unsigned int amountofVAOs = 0;
unsigned int VBO, VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
VAOs.push_back(VAO);
amountofVAOs++;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(array), array, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, (void*)0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
program.bind();
for (unsigned int i = 0; i < amountofVAOs; i++) {
glBindVertexArray(VAOs);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indicies);
}
glfwSwapBuffers(window);
glfwPollEvents();
}
код, который не работает:
Класс
class AM {
private:
std::vector VAOs;
unsigned int amountofVAOs = 0;
unsigned int indicies[6]{
0, 1, 2,
2, 3, 0
};
public:
void createobject(void* inputarray) {
unsigned int VBO, VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
VAOs.push_back(VAO);
amountofVAOs++;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(inputarray), inputarray, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, (void*)0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
void draw()
{
for (unsigned int i = 0; i < amountofVAOs; i++) {
glBindVertexArray(VAOs);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indicies);
};
};
};
массивы
float array[]{
0.5f, 0.5f, 0.0f,
0.5f, 0.0f, 0.0f,
-0.5f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f
};
float array2[]{
-0.5f, -0.5f, 0.0f,
-0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, -1.0f, 0.0f
};
создание объекта
AM am();
am.createobject(array);
am.createobject(array2);
Цикл рендеринга
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
program.bind();
am.draw();
glfwSwapBuffers(window);
glfwPollEvents();
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... in-classes