Header: mesh.h

#pragma once
#include "vertex.h"

class Mesh
{
    public:
    Mesh(Vertex*, int);
    ~Mesh();
    void draw();

    private:
    unsigned int VAO, VBO;
    int vertexCount;
    void init(Vertex*, int);
};

Implementierung: mesh.cpp

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include "mesh.h"

Mesh::Mesh(Vertex* vertices, int vc)
{
    init(vertices, vc);
}

void Mesh::init(Vertex* vertices, int vc)
{
    vertexCount = vc;
    glGenVertexArrays(1, &VAO);
    glBindVertexArray(VAO);

    glGenBuffers(1, &VBO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);

    glBufferData(GL_ARRAY_BUFFER, vertexCount * sizeof(Vertex), vertices, GL_STATIC_DRAW);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)0);
    glEnableVertexAttribArray(0);
}

void Mesh::draw()
{
    glBindVertexArray(VAO);
    glDrawArrays(GL_TRIANGLES, 0, vertexCount);
}

Mesh::~Mesh()
{
    glDeleteVertexArrays(1, &VAO);
    glDeleteBuffers(1, &VBO);
}

Makefile anpassen

Fügen Sie eine neue Regel für die Übersetzungseinheit obj/mesh.o hinzu. Außerdem muss die obj/mesh.o auch als Abhängigkeit für die Hauptregel angegeben werden.