Я пытаюсь запрограммировать некоторую игру с OpenGL и прочитать целую кучу учебников. К сожалению, у меня возникла небольшая проблема, которая просто прерывает мой прогресс.Передача массива OpenGL не работает
Я создал класс «Mesh», где передаю массив GLfloats. Эти поплавки включены в VAO и VBO. Пока я создаю массив внутри конструктора (с целыми функциями инициализации), он отлично работает. Но если я хочу передать массив в качестве аргумента, OpenGL просто не будет рисовать. Я что-то забыл?
Вот мой основной код:
Mesh.cpp
Mesh::Mesh(GLfloat* vertices)
{
glGenVertexArrays(1, &m_vertexArray);
glBindVertexArray(m_vertexArray);
glGenBuffers(1, &m_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glBindVertexArray(0);
}
Mesh::~Mesh()
{
glDeleteVertexArrays(1, &m_vertexArray);
}
void Mesh::draw()
{
glBindVertexArray(m_vertexArray);
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);
}
main.cpp
[...]
GLfloat vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f,
-1.0f, -1.0f, 0.0f,
0.0f, -1.0f, 0.0f,
-0.5f, 0.0f, 0.0f
};
Mesh mesh(vertices);
while (!mainWindow->isClosed())
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
shaders->bind();
// here main functions:
mesh.draw();
mainWindow->update();
}
Вы пробовали динамически выделять массив? Компилятор может в конечном итоге вывести массив из области видимости и, следовательно, из стека, прежде чем он получит шанс нарисовать. Впрочем, догадка. – Cedric