| ShaderProgramGL | | ShaderProgramVK |
+--------------------+ +-----------------+
+
+
+
std::vector<Vec3> normals;
std::vector<Vec3> tangents;
std::vector<Vec2> tex_coords;
+
std::string name;
+ unsigned int mat_idx;
unsigned int which_mask;
Object::Object()
{
- material.diffuse = Vec3(0, 0, 0);
- material.specular = Vec3(0, 0, 0);
- material.shininess = 0;
- material.dtex = 0;
-
+ material = 0;
mesh = 0;
}
};
struct Material {
-// std::string name; <-TODO or id
-
Vec3 diffuse;
Vec3 specular;
float shininess;
class Object {
public:
Mat4 transform;
- Material material;
+ Material *material;
Mesh *mesh;
Object();
Scene::~Scene()
{
- /* clear meshes */
for(size_t i=0; i<meshes.size(); ++i)
delete meshes[i];
meshes.clear();
- /* clear materials */
for(size_t i=0; i<materials.size(); ++i)
delete materials[i];
materials.clear();
- /* clear textures */
- for(size_t i= 0; i<textures.size(); ++i)
+ for(size_t i=0; i<textures.size(); ++i)
delete textures[i];
textures.clear();
+
+ for(size_t i=0; i<objects.size(); ++i)
+ delete objects[i];
+ objects.clear();
}
bool Scene::load(const char *fname)
}
/* create objects */
-
+ for(unsigned int i=0; i<scene->mNumMeshes; ++i) {
+ Object *object = new Object();
+ object->mesh = meshes[i];
+ int idx = meshes[i]->mat_idx;
+ object->material = materials[idx];
+ objects.push_back(object);
+ }
aiReleaseImport(scene);
return true;
else
fprintf(stderr, "No faces found.\n");
+ mesh->mat_idx = amesh->mMaterialIndex;
+ printf("material idx:%u", mesh->mat_idx);
return mesh;
}
mat->dtex = 0;
mat->shininess = 40;
- // mat->name = std::string(amat->name.data);
+ // aiString name;
+ // amat->Get(AI_MATKEY_NAME, name);
+ // mat->name = std::string(name.data);
aiColor4D color;
aiGetMaterialColor(amat, AI_MATKEY_COLOR_DIFFUSE, &color);
Shader::Shader() {}
Shader::~Shader() {}
+bool Shader::load(const char *fname, SType type)
+{
+ switch(type) {
+ case SDR_VERTEX:
+ case SDR_FRAGMENT:
+ break;
+ default:
+ fprintf(stderr, "Invalid shader type used in loading.\n");
+ return false;
+ }
+ return true;
+}
+
ShaderProgram::ShaderProgram()
{
}
{
}
-void ShaderProgram::set_shader(Shader *sdr, SType type)
+void ShaderProgram::add_shader(Shader *sdr, SType type)
{
shaders[type] = sdr;
}
\ No newline at end of file
#define SHADER_H_
enum SType {
- SDR_VERTzX,
+ SDR_VERTEX,
SDR_FRAGMENT
};
Shader();
~Shader();
- virtual bool load(const char *fname, SType type) = 0;
+ virtual bool load(const char *fname, SType type);
};
class ShaderProgram {
ShaderProgram();
virtual ~ShaderProgram() = 0;
- void set_shader(Shader *sdr, SType type);
+ void add_shader(Shader *sdr, SType type);
+ bool link();
+ void bind();
};
#endif // SHADER_H_