[Bf-blender-cvs] [0fc72070fe6] experimental-build: Squashed UDIM changes

Lukas Stockner noreply at git.blender.org
Mon Jul 23 19:05:41 CEST 2018


Commit: 0fc72070fe6b2008e8c286658a59a2203f2c8553
Author: Lukas Stockner
Date:   Mon Jul 23 19:02:38 2018 +0200
Branches: experimental-build
https://developer.blender.org/rB0fc72070fe6b2008e8c286658a59a2203f2c8553

Squashed UDIM changes

===================================================================

M	intern/cycles/blender/blender_mesh.cpp
M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_session.h
M	intern/cycles/blender/blender_shader.cpp
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/blender/blender_util.h
M	intern/cycles/kernel/svm/svm.h
M	intern/cycles/kernel/svm/svm_image.h
M	intern/cycles/render/graph.cpp
M	intern/cycles/render/graph.h
M	intern/cycles/render/image.cpp
M	intern/cycles/render/image.h
M	intern/cycles/render/light.cpp
M	intern/cycles/render/mesh.cpp
M	intern/cycles/render/mesh.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/nodes.h
M	intern/cycles/render/scene.h
M	intern/cycles/render/shader.cpp
M	release/scripts/addons
M	release/scripts/addons_contrib
M	release/scripts/startup/bl_ui/space_image.py
M	source/blender/blenfont/BLF_api.h
M	source/blender/blenfont/intern/blf.c
M	source/blender/blenkernel/BKE_image.h
M	source/blender/blenkernel/intern/bpath.c
M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/packedFile.c
M	source/blender/blenlib/BLI_math_vector.h
M	source/blender/blenlib/intern/math_vector_inline.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/compositor/operations/COM_ViewerOperation.cpp
M	source/blender/draw/engines/workbench/workbench_deferred.c
M	source/blender/draw/engines/workbench/workbench_forward.c
M	source/blender/draw/engines/workbench/workbench_materials.c
M	source/blender/draw/engines/workbench/workbench_private.h
M	source/blender/draw/intern/draw_cache.c
M	source/blender/draw/intern/draw_cache.h
M	source/blender/draw/intern/draw_cache_impl.h
M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/draw/intern/draw_manager_data.c
M	source/blender/draw/modes/paint_texture_mode.c
M	source/blender/editors/include/ED_image.h
M	source/blender/editors/include/ED_paint.h
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/interface/interface_ops.c
M	source/blender/editors/object/object_bake_api.c
M	source/blender/editors/render/render_preview.c
M	source/blender/editors/screen/area.c
M	source/blender/editors/sculpt_paint/paint_image.c
M	source/blender/editors/sculpt_paint/paint_image_2d.c
M	source/blender/editors/sculpt_paint/paint_image_proj.c
M	source/blender/editors/sculpt_paint/paint_intern.h
M	source/blender/editors/space_clip/clip_draw.c
M	source/blender/editors/space_image/image_buttons.c
M	source/blender/editors/space_image/image_draw.c
M	source/blender/editors/space_image/image_edit.c
M	source/blender/editors/space_image/image_intern.h
M	source/blender/editors/space_image/image_ops.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/gpu/GPU_material.h
M	source/blender/gpu/intern/gpu_codegen.c
M	source/blender/gpu/intern/gpu_codegen.h
M	source/blender/gpu/intern/gpu_draw.c
M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/imbuf/IMB_moviecache.h
M	source/blender/imbuf/intern/moviecache.c
M	source/blender/makesdna/DNA_color_types.h
M	source/blender/makesdna/DNA_image_types.h
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/intern/rna_image.c
M	source/blender/makesrna/intern/rna_image_api.c
M	source/blender/makesrna/intern/rna_space.c
M	source/blender/nodes/shader/nodes/node_shader_tex_environment.c
M	source/blender/nodes/shader/nodes/node_shader_tex_image.c

===================================================================

diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 08206dd5521..edb6d04f0bb 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -348,6 +348,7 @@ static void create_mesh_volume_attribute(BL::Object& b_ob,
 	        Attribute::standard_name(std),
 	        b_ob.ptr.data,
 	        animated,
+	        0,
 	        frame,
 	        INTERPOLATION_LINEAR,
 	        EXTENSION_CLIP,
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index cd55155e33b..1f5d67e4064 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -140,8 +140,8 @@ void BlenderSession::create_session()
 
 	/* setup callbacks for builtin image support */
 	scene->image_manager->builtin_image_info_cb = function_bind(&BlenderSession::builtin_image_info, this, _1, _2, _3);
-	scene->image_manager->builtin_image_pixels_cb = function_bind(&BlenderSession::builtin_image_pixels, this, _1, _2, _3, _4, _5);
-	scene->image_manager->builtin_image_float_pixels_cb = function_bind(&BlenderSession::builtin_image_float_pixels, this, _1, _2, _3, _4, _5);
+	scene->image_manager->builtin_image_pixels_cb = function_bind(&BlenderSession::builtin_image_pixels, this, _1, _2, _3, _4, _5, _6);
+	scene->image_manager->builtin_image_float_pixels_cb = function_bind(&BlenderSession::builtin_image_float_pixels, this, _1, _2, _3, _4, _5, _6);
 
 	session->scene = scene;
 
@@ -1113,6 +1113,7 @@ void BlenderSession::builtin_image_info(const string &builtin_name,
 
 bool BlenderSession::builtin_image_pixels(const string &builtin_name,
                                           void *builtin_data,
+                                          int tile,
                                           unsigned char *pixels,
                                           const size_t pixels_size,
                                           const bool free_cache)
@@ -1131,7 +1132,7 @@ bool BlenderSession::builtin_image_pixels(const string &builtin_name,
 	const int height = b_image.size()[1];
 	const int channels = b_image.channels();
 
-	unsigned char *image_pixels = image_get_pixels_for_frame(b_image, frame);
+	unsigned char *image_pixels = image_get_pixels_for_frame(b_image, frame, tile);
 	const size_t num_pixels = ((size_t)width) * height;
 
 	if(image_pixels && num_pixels * channels == pixels_size) {
@@ -1176,6 +1177,7 @@ bool BlenderSession::builtin_image_pixels(const string &builtin_name,
 
 bool BlenderSession::builtin_image_float_pixels(const string &builtin_name,
                                                 void *builtin_data,
+                                                int tile,
                                                 float *pixels,
                                                 const size_t pixels_size,
                                                 const bool free_cache)
@@ -1198,7 +1200,7 @@ bool BlenderSession::builtin_image_float_pixels(const string &builtin_name,
 		const int channels = b_image.channels();
 
 		float *image_pixels;
-		image_pixels = image_get_float_pixels_for_frame(b_image, frame);
+		image_pixels = image_get_float_pixels_for_frame(b_image, frame, tile);
 		const size_t num_pixels = ((size_t)width) * height;
 
 		if(image_pixels && num_pixels * channels == pixels_size) {
diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h
index 1d727e416a0..614da496081 100644
--- a/intern/cycles/blender/blender_session.h
+++ b/intern/cycles/blender/blender_session.h
@@ -158,11 +158,13 @@ protected:
 	                        ImageMetaData& metadata);
 	bool builtin_image_pixels(const string &builtin_name,
 	                          void *builtin_data,
+	                          int tile,
 	                          unsigned char *pixels,
 	                          const size_t pixels_size,
 	                          const bool free_cache);
 	bool builtin_image_float_pixels(const string &builtin_name,
 	                                void *builtin_data,
+	                                int tile,
 	                                float *pixels,
 	                                const size_t pixels_size,
 	                                const bool free_cache);
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 62c160ca503..830a3682a27 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -670,6 +670,12 @@ static ShaderNode *add_node(Scene *scene,
 			image->animated = b_image_node.image_user().use_auto_refresh();
 			image->use_alpha = b_image.use_alpha();
 
+			image->tiles.clear();
+			BL::Image::tiles_iterator b_iter;
+			for(b_image.tiles.begin(b_iter); b_iter != b_image.tiles.end(); ++b_iter) {
+				image->tiles.push_back(b_iter->tile_number());
+			}
+
 			/* TODO: restore */
 			/* TODO(sergey): Does not work properly when we change builtin type. */
 #if 0
@@ -884,6 +890,7 @@ static ShaderNode *add_node(Scene *scene,
 			scene->image_manager->tag_reload_image(
 			        point_density->filename.string(),
 			        point_density->builtin_data,
+			        0,
 			        point_density->interpolation,
 			        EXTENSION_CLIP,
 			        true);
@@ -1245,7 +1252,7 @@ void BlenderSync::sync_materials(BL::Depsgraph& b_depsgraph, bool update_all)
 
 		/* test if we need to sync */
 		if(shader_map.sync(&shader, b_mat) || shader->need_sync_object || update_all) {
-			ShaderGraph *graph = new ShaderGraph();
+			ShaderGraph *graph = new ShaderGraph(shader);
 
 			shader->name = b_mat.name().c_str();
 			shader->pass_id = b_mat.pass_index();
@@ -1320,7 +1327,7 @@ void BlenderSync::sync_world(BL::Depsgraph& b_depsgraph, bool update_all)
 
 	if(world_recalc || update_all || b_world.ptr.data != world_map) {
 		Shader *shader = scene->default_background;
-		ShaderGraph *graph = new ShaderGraph();
+		ShaderGraph *graph = new ShaderGraph(shader);
 
 		/* create nodes */
 		if(b_world && b_world.use_nodes() && b_world.node_tree()) {
@@ -1418,7 +1425,7 @@ void BlenderSync::sync_lights(BL::Depsgraph& b_depsgraph, bool update_all)
 
 		/* test if we need to sync */
 		if(shader_map.sync(&shader, b_light) || update_all) {
-			ShaderGraph *graph = new ShaderGraph();
+			ShaderGraph *graph = new ShaderGraph(shader);
 
 			/* create nodes */
 			if(b_light.use_nodes() && b_light.node_tree()) {
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 3204e0cd3f2..e7b6a570131 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -637,6 +637,8 @@ SceneParams BlenderSync::get_scene_params(BL::Scene& b_scene,
 
 	params.bvh_layout = DebugFlags().cpu.bvh_layout;
 
+	params.background = background;
+
 	return params;
 }
 
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 4e754d22984..04b2744cd10 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -34,8 +34,8 @@ extern "C" {
 size_t BLI_timecode_string_from_time_simple(char *str, size_t maxlen, double time_seconds);
 void BKE_image_user_frame_calc(void *iuser, int cfra, int fieldnr);
 void BKE_image_user_file_path(void *iuser, void *ima, char *path);
-unsigned char *BKE_image_get_pixels_for_frame(void *image, int frame);
-float *BKE_image_get_float_pixels_for_frame(void *image, int frame);
+unsigned char *BKE_image_get_pixels_for_frame(void *image, int frame, int tile);
+float *BKE_image_get_float_pixels_for_frame(void *image, int frame, int tile);
 }
 
 CCL_NAMESPACE_BEGIN
@@ -220,8 +220,15 @@ static inline string image_user_file_path(BL::ImageUser& iuser,
                                           int cfra)
 {
 	char filepath[1024];
+	iuser.tile(0);
 	BKE_image_user_frame_calc(iuser.ptr.data, cfra, 0);
 	BKE_image_user_file_path(iuser.ptr.data, ima.ptr.data, filepath);
+	if(ima.source() == BL::Image::source_TILED) {
+		char *udim_id = strstr(filepath, "1001");
+		if(udim_id) {
+			memcpy(udim_id, "%04d", 4);
+		}
+	}
 	return string(filepath);
 }
 
@@ -232,15 +239,15 @@ static inline int image_user_frame_number(BL::ImageUser& iuser, int cfra)
 }
 
 static inline unsigned char *image_get_pixels_for_frame(BL::Image& image,
-                                                        int frame)
+                                                        int frame, int tile)
 {
-	return BKE_image_get_pixels_for_frame(image.ptr.data, frame);
+	return BKE_image_get_pixels_for_frame(image.ptr.data, frame, tile);
 }
 
 static inline float *image_get_float_pixels_for_frame(BL::Image& image,
-                                                      int frame)
+                                                      int frame, int tile)
 {
-	return BKE_image_get_float_pixels_for_frame(image.ptr.data, frame);
+	return BKE_image_get_float_pixels_for_frame(image.ptr.data, frame, tile);
 }
 
 /* Utilities */
diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h
index ab69afa051e..6f0945b3d15 100644
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@ -277,7 +277,7 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ccl_a
 #  endif  /* NODES_FEATURE(NODE_FEATURE_BUMP) */
 #  ifdef __TEXTURES__
 			case NODE_TEX_IMAGE:
-				svm_node_tex_image(kg, sd, stack, node);
+				svm_node_tex_image(kg, sd, stack, node, &offset);
 				break;
 			case NODE_TEX_IMAGE_BOX:
 				svm_node_tex_image_box(kg, sd, stack, node);
diff --git a/intern/cycles/kernel/svm/svm_image.h b/intern/cycles/kernel/svm/svm_image.h
index 81ee79c984e..196c56b2cbe 100644
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@ -18,6 +18,9 @@ CCL_NAMESPACE_BEGIN
 
 ccl_device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y, uint srgb, uint use_alpha)
 {
+	if(id == -1) {
+		return make_float4(TEX_IMAGE_MISSING_R, TEX_IMAGE_MISSING_G, TEX_IMAGE_MISSING_B, TEX_IMAGE_MISSING_A);
+	}
 	float4 r = kernel_tex_image_interp(kg, id, x, y);
 	const float alpha = r.w;
 
@@ -46,9 +49,8 @@ ccl_device_inline float3

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list