diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-05-14 15:50:03 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2016-06-08 22:45:40 +0300 |
commit | 64c9b93513b4f3e8a3c3ed19fe6fa8176334446a (patch) | |
tree | 70558c3cfbfde40e727c5a414d7660e668c83d2e /intern/cycles/blender | |
parent | 40453dbca1ee07dc1ecc4a8ad148b8c20e622270 (diff) |
Code refactor: use shader pointers rather than shader indexes.
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r-- | intern/cycles/blender/blender_curves.cpp | 3 | ||||
-rw-r--r-- | intern/cycles/blender/blender_mesh.cpp | 15 | ||||
-rw-r--r-- | intern/cycles/blender/blender_object.cpp | 7 | ||||
-rw-r--r-- | intern/cycles/blender/blender_shader.cpp | 21 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.h | 2 |
6 files changed, 20 insertions, 32 deletions
diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp index 0178bfbe8d9..64f1b66405e 100644 --- a/intern/cycles/blender/blender_curves.cpp +++ b/intern/cycles/blender/blender_curves.cpp @@ -138,8 +138,7 @@ bool ObtainCacheParticleData(Mesh *mesh, BL::Mesh *b_mesh, BL::Object *b_ob, Par BL::ParticleSettings b_part((const PointerRNA)b_psys.settings().ptr); if((b_part.render_type() == BL::ParticleSettings::render_type_PATH) && (b_part.type() == BL::ParticleSettings::type_HAIR)) { - int mi = clamp(b_part.material()-1, 0, mesh->used_shaders.size()-1); - int shader = mesh->used_shaders[mi]; + int shader = clamp(b_part.material()-1, 0, mesh->used_shaders.size()-1); int draw_step = background ? b_part.render_step() : b_part.draw_step(); int totparts = b_psys.particles.length(); int totchild = background ? b_psys.child_particles.length() : (int)((float)b_psys.child_particles.length() * (float)b_part.draw_percentage() / 100.0f); diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp index 55ef913408f..4a0ad79f3ae 100644 --- a/intern/cycles/blender/blender_mesh.cpp +++ b/intern/cycles/blender/blender_mesh.cpp @@ -532,7 +532,7 @@ static void attr_create_pointiness(Scene *scene, static void create_mesh(Scene *scene, Mesh *mesh, BL::Mesh& b_mesh, - const vector<uint>& used_shaders) + const vector<Shader*>& used_shaders) { /* count vertices and faces */ int numverts = b_mesh.vertices.length(); @@ -588,8 +588,7 @@ static void create_mesh(Scene *scene, for(b_mesh.tessfaces.begin(f); f != b_mesh.tessfaces.end(); ++f, ++fi) { int4 vi = get_int4(f->vertices_raw()); int n = (vi[3] == 0)? 3: 4; - int mi = clamp(f->material_index(), 0, used_shaders.size()-1); - int shader = used_shaders[mi]; + int shader = clamp(f->material_index(), 0, used_shaders.size()-1); bool smooth = f->use_smooth() || use_loop_normals; /* split vertices if normal is different @@ -660,14 +659,14 @@ static void create_subd_mesh(Scene *scene, BL::Object& b_ob, BL::Mesh& b_mesh, PointerRNA *cmesh, - const vector<uint>& used_shaders, + const vector<Shader*>& used_shaders, float dicing_rate, int max_subdivisions) { Mesh basemesh; create_mesh(scene, &basemesh, b_mesh, used_shaders); - SubdParams sdparams(mesh, used_shaders[0], true, false); + SubdParams sdparams(mesh, 0, true, false); sdparams.dicing_rate = max(0.1f, RNA_float_get(cmesh, "dicing_rate") * dicing_rate); sdparams.max_level = max_subdivisions; @@ -700,7 +699,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob, BL::Material material_override = render_layer.material_override; /* find shader indices */ - vector<uint> used_shaders; + vector<Shader*> used_shaders; BL::Object::material_slots_iterator slot; for(b_ob.material_slots.begin(slot); slot != b_ob.material_slots.end(); ++slot) { @@ -742,8 +741,8 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob, * because the shader needs different mesh attributes */ bool attribute_recalc = false; - foreach(uint shader, mesh->used_shaders) - if(scene->shaders[shader]->need_update_attributes) + foreach(Shader *shader, mesh->used_shaders) + if(shader->need_update_attributes) attribute_recalc = true; if(!attribute_recalc) diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index 5c0c30f28de..edd5f292c79 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -155,13 +155,8 @@ void BlenderSync::sync_light(BL::Object& b_parent, light->dir = -transform_get_column(&tfm, 2); /* shader */ - vector<uint> used_shaders; - + vector<Shader*> used_shaders; find_shader(b_lamp, used_shaders, scene->default_light); - - if(used_shaders.size() == 0) - used_shaders.push_back(scene->default_light); - light->shader = used_shaders[0]; /* shadow */ diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp index 04d8b14cba0..a56c2e75e4e 100644 --- a/intern/cycles/blender/blender_shader.cpp +++ b/intern/cycles/blender/blender_shader.cpp @@ -37,18 +37,13 @@ typedef map<std::string, ConvertNode*> ProxyMap; /* Find */ void BlenderSync::find_shader(BL::ID& id, - vector<uint>& used_shaders, - int default_shader) + vector<Shader*>& used_shaders, + Shader *default_shader) { - Shader *shader = (id)? shader_map.find(id): scene->shaders[default_shader]; + Shader *shader = (id)? shader_map.find(id): default_shader; - for(size_t i = 0; i < scene->shaders.size(); i++) { - if(scene->shaders[i] == shader) { - used_shaders.push_back(i); - scene->shaders[i]->tag_used(scene); - break; - } - } + used_shaders.push_back(shader); + shader->tag_used(scene); } /* RNA translation utilities */ @@ -1207,7 +1202,7 @@ static void add_nodes(Scene *scene, void BlenderSync::sync_materials(bool update_all) { - shader_map.set_default(scene->shaders[scene->default_surface]); + shader_map.set_default(scene->default_surface); /* material loop */ BL::BlendData::materials_iterator b_mat; @@ -1262,7 +1257,7 @@ void BlenderSync::sync_world(bool update_all) BL::World b_world = b_scene.world(); if(world_recalc || update_all || b_world.ptr.data != world_map) { - Shader *shader = scene->shaders[scene->default_background]; + Shader *shader = scene->default_background; ShaderGraph *graph = new ShaderGraph(); /* create nodes */ @@ -1342,7 +1337,7 @@ void BlenderSync::sync_world(bool update_all) void BlenderSync::sync_lamps(bool update_all) { - shader_map.set_default(scene->shaders[scene->default_light]); + shader_map.set_default(scene->default_light); /* lamp loop */ BL::BlendData::lamps_iterator b_lamp; diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 6291b38d462..fd24593c6b6 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -175,8 +175,8 @@ bool BlenderSync::sync_recalc() world_recalc = true; } else if(b_world->node_tree() && b_world->use_nodes()) { - Shader *shader = scene->shaders[scene->default_background]; - if(has_updated_objects && shader != NULL && shader->has_object_dependency) { + Shader *shader = scene->default_background; + if(has_updated_objects && shader->has_object_dependency) { world_recalc = true; } } diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index 6ff5326f39f..e7062d1322a 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -146,7 +146,7 @@ private: void sync_images(); /* util */ - void find_shader(BL::ID& id, vector<uint>& used_shaders, int default_shader); + void find_shader(BL::ID& id, vector<Shader*>& used_shaders, Shader *default_shader); bool BKE_object_is_modified(BL::Object& b_ob); bool object_is_mesh(BL::Object& b_ob); bool object_is_light(BL::Object& b_ob); |