[Bf-blender-cvs] [6568074b942] cycles_texture_cache: Cycles: Added option for custom texture cache path.

Stefan Werner noreply at git.blender.org
Fri Oct 19 14:49:48 CEST 2018


Commit: 6568074b94211007dec99287d3ecae26876431ba
Author: Stefan Werner
Date:   Fri Oct 19 14:49:37 2018 +0200
Branches: cycles_texture_cache
https://developer.blender.org/rB6568074b94211007dec99287d3ecae26876431ba

Cycles: Added option for custom texture cache path.

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

M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/render/image.cpp
M	intern/cycles/render/image.h
M	intern/cycles/render/scene.h

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

diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 85fa99a172d..3c2c6c8a4a9 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -717,10 +717,23 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
         cls.texture_blur_glossy = FloatProperty(
             name="Glossy Blur",
             default=0.0,
-            description="The amount of texture blur applied to diffuse bounces",
+            description="The amount of texture blur applied to glossy bounces",
             min = 0.0, max = 1.0
         )
 
+        cls.use_custom_cache_path = BoolProperty(
+            name="Use Custom Cache Path",
+            default=False,
+            description="Use a custom path for the texture cache, as oppoosed to placing cache files next to the original file"
+        )
+
+        cls.custom_cache_path = StringProperty(
+            name="Custom Cache Path",
+            default="",
+            subtype="DIR_PATH",
+            description="Custom path for the texture cache"
+        )
+
         cls.ao_bounces = IntProperty(
             name="AO Bounces",
             default=0,
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index b55992a25cc..ba905a35ad9 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -460,8 +460,7 @@ class CYCLES_RENDER_PT_texture_cache(CyclesButtonsPanel, Panel):
         rd = scene.render
         layout.active = cscene.use_texture_cache
 
-        col = layout.column()
-        split = col.split()
+        split = layout.split()
         col = split.column()
         col.prop(cscene, "texture_auto_convert")
         col.prop(cscene, "texture_accept_unmipped")
@@ -473,6 +472,11 @@ class CYCLES_RENDER_PT_texture_cache(CyclesButtonsPanel, Panel):
         col.prop(cscene, "texture_tile_size")
         col.prop(cscene, "texture_blur_diffuse")
         col.prop(cscene, "texture_blur_glossy")
+        row = layout.row()
+        row.prop(cscene, "use_custom_cache_path")
+        row = layout.row()
+        row.active = cscene.use_custom_cache_path
+        row.prop(cscene, "custom_cache_path")
 
 class CYCLES_RENDER_PT_layer_options(CyclesButtonsPanel, Panel):
     bl_label = "Layer"
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index a5c3de71195..01b71624394 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -699,6 +699,17 @@ SceneParams BlenderSync::get_scene_params(BL::Scene& b_scene,
 	params.texture.auto_tile = RNA_boolean_get(&cscene, "texture_auto_tile");
 	params.texture.diffuse_blur = RNA_float_get(&cscene, "texture_blur_diffuse");
 	params.texture.glossy_blur = RNA_float_get(&cscene, "texture_blur_glossy");
+	params.texture.use_custom_cache_path  = RNA_boolean_get(&cscene, "use_custom_cache_path");
+	if(params.texture.use_custom_cache_path) {
+		char *path = RNA_string_get_alloc(&cscene, "custom_cache_path", NULL, 0);
+		if(path) {
+			params.texture.custom_cache_path = path;
+			MEM_freeN(path);
+		}
+	}
+	else {
+		params.texture.custom_cache_path.clear();
+	}
 	
 	return params;
 }
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index e951d0266ea..fae7a7f19a6 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -765,7 +765,9 @@ void ImageManager::device_load_image(Device *device,
 	if(oiio_texture_system && !img->builtin_data) {
 		/* Get or generate a mip mapped tile image file.
 		 * If we have a mip map, assume it's linear, not sRGB. */
-		bool have_mip = get_tx(img, progress, scene->params.texture.auto_convert);
+		const char *cache_path = scene->params.texture.use_custom_cache_path ?
+		                         scene->params.texture.custom_cache_path.c_str() : NULL;
+		bool have_mip = get_tx(img, progress, scene->params.texture.auto_convert, cache_path);
 
 		/* When using OIIO directly from SVM, store the TextureHandle
 		 * in an array for quicker lookup at shading time */
@@ -1145,7 +1147,7 @@ bool ImageManager::make_tx(const string &filename, const string &outputfilename,
 	return ImageBufAlgo::make_texture(ImageBufAlgo::MakeTxTexture, filename, outputfilename, config);
 }
 
-bool ImageManager::get_tx(Image *image, Progress *progress, bool auto_convert)
+bool ImageManager::get_tx(Image *image, Progress *progress, bool auto_convert, const char *cache_path)
 {
 	if(!path_exists(image->filename)) {
 		return false;
@@ -1160,6 +1162,10 @@ bool ImageManager::get_tx(Image *image, Progress *progress, bool auto_convert)
 	}
 	
 	string tx_name = image->filename.substr(0, idx) + ".tx";
+	if(cache_path) {
+		string filename = path_filename(tx_name);
+		tx_name = path_join(string(cache_path), filename);
+	}
 	if(path_exists(tx_name)) {
 		image->filename = tx_name;
 		return true;
diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h
index 2cfd25028b0..c76c8a69113 100644
--- a/intern/cycles/render/image.h
+++ b/intern/cycles/render/image.h
@@ -168,7 +168,7 @@ private:
 	                       ImageDataType type,
 	                       int slot);
 		
-	bool get_tx(Image *image, Progress *progress, bool auto_convert);
+	bool get_tx(Image *image, Progress *progress, bool auto_convert, const char *cache_path);
 };
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/scene.h b/intern/cycles/render/scene.h
index 27fa4fa3be4..49854641302 100644
--- a/intern/cycles/render/scene.h
+++ b/intern/cycles/render/scene.h
@@ -133,7 +133,7 @@ class TextureCacheParams {
 public:
 	TextureCacheParams() : use_cache(false), cache_size(1024), tile_size(64), diffuse_blur(1.0f/64.f),
 	glossy_blur(0.0f), auto_convert(true), accept_unmipped(true), accept_untiled(true),
-	auto_tile(true), auto_mip(true) { }
+	auto_tile(true), auto_mip(true), use_custom_cache_path(false) { }
 	
 	bool modified(const TextureCacheParams& params)
 	{
@@ -146,7 +146,9 @@ public:
 				 && accept_unmipped == params.accept_unmipped
 				 && accept_untiled == params.accept_untiled
 				 && auto_tile == params.auto_tile
-				 && auto_mip == params.auto_mip);
+				 && auto_mip == params.auto_mip
+				 && use_custom_cache_path == params.use_custom_cache_path
+				 && custom_cache_path == params.custom_cache_path);
 	}
 
 	bool use_cache;
@@ -159,6 +161,8 @@ public:
 	bool accept_untiled;
 	bool auto_tile;
 	bool auto_mip;
+	bool use_custom_cache_path;
+	string custom_cache_path;
 };
 
 /* Scene Parameters */



More information about the Bf-blender-cvs mailing list