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
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/osl.cpp')
-rw-r--r--intern/cycles/render/osl.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp
index 24c5a599c1a..5ee453275b9 100644
--- a/intern/cycles/render/osl.cpp
+++ b/intern/cycles/render/osl.cpp
@@ -145,6 +145,10 @@ void OSLShaderManager::device_update(Device *device,
/* set texture system */
scene->image_manager->set_osl_texture_system((void *)ts);
+ /* add special builtin texture types */
+ og->textures.insert(ustring("@ao"), new OSLTextureHandle(OSLTextureHandle::AO));
+ og->textures.insert(ustring("@bevel"), new OSLTextureHandle(OSLTextureHandle::BEVEL));
+
device_update_common(device, dscene, scene, progress);
{
@@ -1201,6 +1205,30 @@ 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)
+{
+ 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));
+ }
+
+ parameter(name, filename);
+}
+
+void OSLCompiler::parameter_texture_ies(const char *name, int svm_slot)
+{
+ ustring filename(string_printf("@l%d", svm_slot).c_str());
+ osl_globals->textures.insert(filename, new OSLTextureHandle(OSLTextureHandle::IES, svm_slot));
+ parameter(name, filename);
+}
+
#else
void OSLCompiler::add(ShaderNode * /*node*/, const char * /*name*/, bool /*isfilepath*/)
@@ -1255,6 +1283,16 @@ void OSLCompiler::parameter_color_array(const char * /*name*/, const array<float
{
}
+void OSLCompiler::parameter_texture(const char * /* name */,
+ ustring /* filename */,
+ int /* svm_slot */)
+{
+}
+
+void OSLCompiler::parameter_texture_ies(const char * /* name */, int /* svm_slot */)
+{
+}
+
#endif /* WITH_OSL */
CCL_NAMESPACE_END