Вызов OpenGL для gldrawelements вызывает ошибку сегментации

Я пытаюсь настроить мой рендерер на использование индексных буферов, однако при использовании glDrawElements я получаю ошибку сегментации. Код настройки ниже:

IndexBuffer::IndexBuffer(std::vector<unsigned int> indices){
    glGenBuffers(1, &m_id);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_id);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(indices[0]), indices.data(), GL_STATIC_DRAW);
}

Это код в классе массива вершин, который вызывает вышеуказанный метод:

void VertexArray::addIndices(std::vector<unsigned int> indices) {
    bind();
    IndexBuffer indexBuffer(indices);
}

Это основной метод:

int main() {
    Window* window = new Window("My Game", 1280, 720);

    Shader shader("shader.vert", "shader.frag");
    Renderer renderer(shader);
    Camera camera;
    std::vector<Entity*> entities;

    std::vector<float> vertices = {-0.5f, -0.5f, 0.0f,
                                    0.5f, -0.5f, 0.0f,
                                    0.5f,  0.5f, 0.5f,
                                  -0.5f,  0.5f, 0.0f
    };

    std::vector<float> textureCoords = {0, 0,
                                        1, 0,
                                        1, 1,
                                        0, 1
    };

    std::vector<unsigned int> indices = {0, 1, 2,
                                  2, 3, 0};

    Model model(vertices, indices, textureCoords);
    Entity entity(model, glm::vec3(0, 0, 0), glm::vec3(0, 0, 0), glm::vec3(1, 1, 1));
    entities.push_back(&entity);

    Texture texture("texture.png");

    shader.bind();
    texture.bind();

    while(window->isOpen()){
        camera.update(window->getM_Keys());
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        renderer.render(entities, camera);
        window->update();
    }
}

Это метод рендеринга:

void Renderer::render(std::vector<Entity*> entities, const Camera& camera) {
    m_Shader.loadViewMatrix(Maths::createViewMatrix(camera));
    for(Entity* entity : entities){
        prepareEntity(*entity);
        glDrawElements(GL_TRIANGLES, entity->getModel().getVerticesCount(), GL_UNSIGNED_INT, 0);
    }
}

0 ответов

Другие вопросы по тегам