feat: assignment 3
This commit is contained in:
		
							
								
								
									
										27
									
								
								src/mesh.cpp
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								src/mesh.cpp
									
									
									
									
									
								
							| @@ -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()); | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user