feat: assignment 3

This commit is contained in:
2025-10-13 18:23:01 +02:00
parent db6e548476
commit 49219fc597
13 changed files with 364 additions and 61 deletions

View File

@@ -1,33 +1,20 @@
#include "mesh.h"
#include "buffer.h"
#include "shader.h"
#include "state.h"
#include "material.h"
void Mesh::add_buffer(const std::shared_ptr<Buffer>& buffer,
const std::shared_ptr<Shader>& shader)
const Material& material)
{
buffers_.push_back(buffer);
shaders_.push_back(shader);
materials_.push_back(material);
}
void Mesh::draw()
{
// Calculate MVP matrix
glm::mat4 mvp = state::projection_matrix * state::view_matrix
* state::model_matrix;
// Draw each buffer with its shader
// Draw each buffer with its material
for (size_t i = 0; i < buffers_.size(); ++i) {
// Use buffer's shader if available, otherwise use default
// shader
std::shared_ptr<Shader> shader =
shaders_[i] ? shaders_[i] : state::default_shader;
if (shader) {
shader->use();
int mvpLoc = shader->uniform_location("mvp");
Shader::set_mat4(mvpLoc, mvp);
buffers_[i]->draw(*shader);
}
materials_[i].prepare();
buffers_[i]->draw(*materials_[i].shader());
}
}