Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2016-05-14 15:50:03 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2016-05-17 22:39:16 +0300
commit0e8cd14dfee9788f24854aa8f4148033ef042f51 (patch)
tree4fd7fdb358f9ef4ccdcb934025b74ee6f25598ad /intern/cycles/blender
parent08670d3b8117cda608c178688f261e1204794a0d (diff)
Code refactor: use shader pointers rather than shader indexes.
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r--intern/cycles/blender/blender_curves.cpp3
-rw-r--r--intern/cycles/blender/blender_mesh.cpp15
-rw-r--r--intern/cycles/blender/blender_object.cpp7
-rw-r--r--intern/cycles/blender/blender_shader.cpp21
-rw-r--r--intern/cycles/blender/blender_sync.cpp4
-rw-r--r--intern/cycles/blender/blender_sync.h2
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);