From ce5395868fde010e39d0e2db2e48aa4d84d9a40a Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Fri, 21 Mar 2014 17:22:41 +0100 Subject: [PATCH] Cycles Standalone: Support for relative paths and string OSL parameters. Patch by John Haddon. Differential Revision: https://developer.blender.org/D418 --- intern/cycles/app/cycles_xml.cpp | 7 ++++++- intern/cycles/util/util_path.cpp | 5 +++++ intern/cycles/util/util_path.h | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp index 998531a577b..8db96074dc7 100644 --- a/intern/cycles/app/cycles_xml.cpp +++ b/intern/cycles/app/cycles_xml.cpp @@ -406,7 +406,9 @@ static void xml_read_shader_graph(const XMLReadState& state, Shader *shader, pug /* Source */ xml_read_string(&osl->filepath, node, "src"); - osl->filepath = path_join(state.base, osl->filepath); + if(path_is_relative(osl->filepath)) { + osl->filepath = path_join(state.base, osl->filepath); + } /* Generate inputs/outputs from node sockets * @@ -763,6 +765,9 @@ static void xml_read_shader_graph(const XMLReadState& state, Shader *shader, pug case SHADER_SOCKET_NORMAL: xml_read_float3(&in->value, node, attr.name()); break; + case SHADER_SOCKET_STRING: + xml_read_ustring( &in->value_string, node, attr.name() ); + break; default: break; } diff --git a/intern/cycles/util/util_path.cpp b/intern/cycles/util/util_path.cpp index 4fd5df4316d..85d19b6a325 100644 --- a/intern/cycles/util/util_path.cpp +++ b/intern/cycles/util/util_path.cpp @@ -111,6 +111,11 @@ string path_escape(const string& path) return result; } +bool path_is_relative(const string& path) +{ + return to_boost(path).is_relative(); +} + bool path_exists(const string& path) { return boost::filesystem::exists(to_boost(path)); diff --git a/intern/cycles/util/util_path.h b/intern/cycles/util/util_path.h index e9041e63dae..fd9ea11740d 100644 --- a/intern/cycles/util/util_path.h +++ b/intern/cycles/util/util_path.h @@ -41,6 +41,7 @@ string path_filename(const string& path); string path_dirname(const string& path); string path_join(const string& dir, const string& file); string path_escape(const string& path); +bool path_is_relative(const string& path); /* file info */ bool path_exists(const string& path);