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
path: root/intern
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-04-04 16:47:58 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-04-04 16:47:58 +0300
commit7fc84d4e32e9188cd3c4b7b732f700a632099001 (patch)
treeebcaad453138c11c64d4dd0d7bf7c058327e6ca9 /intern
parentc8cff31922a1e1138929b8ccfdab744b106f8b09 (diff)
parent92aeb84fde6402c0d2e337b030c06cfd171f5ba1 (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/blender_shader.cpp22
-rw-r--r--intern/cycles/blender/blender_sync.h1
-rw-r--r--intern/cycles/blender/blender_util.h17
3 files changed, 19 insertions, 21 deletions
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index df21e2640bd..3f04f11aab4 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -27,7 +27,9 @@
#include "blender/blender_util.h"
#include "util/util_debug.h"
+#include "util/util_foreach.h"
#include "util/util_string.h"
+#include "util/util_set.h"
#include "util/util_task.h"
CCL_NAMESPACE_BEGIN
@@ -1158,13 +1160,6 @@ static void add_nodes(Scene *scene,
/* Sync Materials */
-void BlenderSync::sync_materials_simpligy(Shader *shader)
-{
- ShaderGraph *graph = shader->graph;
- graph->simplify(scene);
- shader->tag_update(scene);
-}
-
void BlenderSync::sync_materials(bool update_all)
{
shader_map.set_default(scene->default_surface);
@@ -1173,6 +1168,7 @@ void BlenderSync::sync_materials(bool update_all)
BL::BlendData::materials_iterator b_mat;
TaskPool pool;
+ set<Shader*> updated_shaders;
for(b_data.materials.begin(b_mat); b_mat != b_data.materials.end(); ++b_mat) {
Shader *shader;
@@ -1220,9 +1216,11 @@ void BlenderSync::sync_materials(bool update_all)
* right before compiling.
*/
if(!preview) {
- pool.push(function_bind(&BlenderSync::sync_materials_simpligy,
- this,
- shader));
+ pool.push(function_bind(&ShaderGraph::simplify, graph, scene));
+ /* NOTE: Update shaders out of the threads since those routines
+ * are accessing and writing to a global context.
+ */
+ updated_shaders.insert(shader);
}
else {
/* NOTE: Update tagging can access links which are being
@@ -1234,6 +1232,10 @@ void BlenderSync::sync_materials(bool update_all)
}
pool.wait_work();
+
+ foreach(Shader *shader, updated_shaders) {
+ shader->tag_update(scene);
+ }
}
/* Sync World */
diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h
index 62e2f8f563a..36bedc505af 100644
--- a/intern/cycles/blender/blender_sync.h
+++ b/intern/cycles/blender/blender_sync.h
@@ -96,7 +96,6 @@ public:
private:
/* sync */
void sync_lamps(bool update_all);
- void sync_materials_simpligy(Shader *shader);
void sync_materials(bool update_all);
void sync_objects(BL::SpaceView3D& b_v3d, float motion_time = 0.0f);
void sync_motion(BL::RenderSettings& b_render,
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 4d575330520..abdbb6be0fd 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -174,22 +174,19 @@ static inline void curvemapping_color_to_array(BL::CurveMapping& cumap,
if(rgb_curve) {
BL::CurveMap mapI = cumap.curves[3];
-
for(int i = 0; i < size; i++) {
- float t = min_x + (float)i/(float)(size-1) * range_x;
-
- data[i][0] = mapR.evaluate(mapI.evaluate(t));
- data[i][1] = mapG.evaluate(mapI.evaluate(t));
- data[i][2] = mapB.evaluate(mapI.evaluate(t));
+ const float t = min_x + (float)i/(float)(size-1) * range_x;
+ data[i] = make_float3(mapR.evaluate(mapI.evaluate(t)),
+ mapG.evaluate(mapI.evaluate(t)),
+ mapB.evaluate(mapI.evaluate(t)));
}
}
else {
for(int i = 0; i < size; i++) {
float t = min_x + (float)i/(float)(size-1) * range_x;
-
- data[i][0] = mapR.evaluate(t);
- data[i][1] = mapG.evaluate(t);
- data[i][2] = mapB.evaluate(t);
+ data[i] = make_float3(mapR.evaluate(t),
+ mapG.evaluate(t),
+ mapB.evaluate(t));
}
}
}