diff options
Diffstat (limited to 'intern/cycles/render/osl.cpp')
-rw-r--r-- | intern/cycles/render/osl.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp index 5ee453275b9..a65c8e9f338 100644 --- a/intern/cycles/render/osl.cpp +++ b/intern/cycles/render/osl.cpp @@ -16,6 +16,7 @@ #include "device/device.h" +#include "render/colorspace.h" #include "render/graph.h" #include "render/light.h" #include "render/osl.h" @@ -1205,25 +1206,29 @@ void OSLCompiler::compile(Scene *scene, Shader *shader) osl_globals->bump_state.push_back(shader->osl_surface_bump_ref); } -void OSLCompiler::parameter_texture(const char *name, ustring filename, int svm_slot) +void OSLCompiler::parameter_texture(const char *name, ustring filename, ustring colorspace) { - if (svm_slot != -1) { - /* It's not so simple to pass custom attribute to the texture() function - * in order to make builtin images support more clear. So we use special - * file name which is "@i<slot_number>" and use that for lookup in - * in OSLRenderServices::texture(). */ - filename = string_printf("@i%d", svm_slot).c_str(); - osl_globals->textures.insert(filename, new OSLTextureHandle(OSLTextureHandle::SVM, svm_slot)); - } - else { - osl_globals->textures.insert(filename, new OSLTextureHandle(OSLTextureHandle::OIIO)); - } + /* Textured loaded through the OpenImageIO texture cache. For this + * case we need to do runtime color space conversion. */ + OSLTextureHandle *handle = new OSLTextureHandle(OSLTextureHandle::OIIO); + handle->processor = ColorSpaceManager::get_processor(colorspace); + osl_globals->textures.insert(filename, handle); + parameter(name, filename); +} +void OSLCompiler::parameter_texture(const char *name, int svm_slot) +{ + /* Texture loaded through SVM image texture system. We generate a unique + * name, which ends up being used in OSLRenderServices::get_texture_handle + * to get handle again. */ + ustring filename(string_printf("@i%d", svm_slot).c_str()); + osl_globals->textures.insert(filename, new OSLTextureHandle(OSLTextureHandle::SVM, svm_slot)); parameter(name, filename); } void OSLCompiler::parameter_texture_ies(const char *name, int svm_slot) { + /* IES light textures stored in SVM. */ ustring filename(string_printf("@l%d", svm_slot).c_str()); osl_globals->textures.insert(filename, new OSLTextureHandle(OSLTextureHandle::IES, svm_slot)); parameter(name, filename); @@ -1285,7 +1290,11 @@ void OSLCompiler::parameter_color_array(const char * /*name*/, const array<float void OSLCompiler::parameter_texture(const char * /* name */, ustring /* filename */, - int /* svm_slot */) + ustring /* colorspace */) +{ +} + +void OSLCompiler::parameter_texture(const char * /* name */, int /* svm_slot */) { } |