Reflection
[opengl.git] / model.hpp
index 98c630e83306e36c72053760629eba52d52970e4..e0c8a2d93acd0a4e7fedcd542bcc4a36cb1746a9 100644 (file)
--- a/model.hpp
+++ b/model.hpp
@@ -7,23 +7,26 @@
 #include <glm/glm.hpp>
 #include <assimp/scene.h>
 #include <assimp/Importer.hpp>
+#include "material.hpp"
+#include "program.hpp"
+#include "skybox.hpp"
 
 class Model {
 
        struct Mesh {
                Mesh(const aiMesh *aiMesh, GLuint progId);
-               GLuint vao;
-               GLuint numIndices;
+               GLuint progId, vao, numIndices;
+               unsigned int materialIndex;
        };
        
        public:
-               Model(const std::string &path, GLuint progId);
+               Model(const std::string &path, Program p, Skybox s);
                void draw() const;
 
                class Node {
                        public:
                                Node(const aiNode &aiNode, GLuint progId);
-                               void draw(const std::vector<Mesh> &meshes, glm::mat4 parentModel) const;
+                               void draw(const std::vector<Mesh> &meshes, const std::vector<Material> &materials, const Skybox s, glm::mat4 parentModel) const;
                                const std::vector<Node*> &getChildren() const { return children; }
                                Node* findNode(const aiNode &aiNode);
                                glm::mat4 model = glm::mat4(1);
@@ -39,10 +42,14 @@ class Model {
                Node* find(const std::string &name);
        
        private:
-               const GLuint progId;
+               const Program program;
+               const Skybox skybox;
                
                std::vector<Mesh> meshes;
                Node *root;
+
+               std::vector<Material> materials;
+
                void loadModel(const std::string &path);
 
                Assimp::Importer importer;