Fix T57393: Cycles OSL bevel and AO not working after OSL upgrade.

This commit is contained in:
Brecht Van Lommel 2018-10-26 19:26:06 +02:00
parent f1673d20fa
commit c0b3e3daeb
2 changed files with 32 additions and 3 deletions

@ -884,6 +884,23 @@ bool OSLRenderServices::has_userdata(ustring name, TypeDesc type, OSL::ShaderGlo
return false; /* never called by OSL */
}
TextureSystem::TextureHandle *OSLRenderServices::get_texture_handle(ustring filename)
{
if (filename.length() && filename[0] == '@') {
/* Dummy, we don't use texture handles for builtin textures but need
* to tell the OSL runtime optimizer that this is a valid texture. */
return NULL;
}
else {
return texturesys()->get_texture_handle(filename);
}
}
bool OSLRenderServices::good(TextureSystem::TextureHandle *texture_handle)
{
return texturesys()->good(texture_handle);
}
bool OSLRenderServices::texture(ustring filename,
TextureHandle *texture_handle,
TexturePerthread *texture_thread_info,
@ -894,7 +911,8 @@ bool OSLRenderServices::texture(ustring filename,
int nchannels,
float *result,
float *dresultds,
float *dresultdt)
float *dresultdt,
ustring *errormessage)
{
OSL::TextureSystem *ts = osl_ts;
ShaderData *sd = (ShaderData *)(sg->renderstate);
@ -1156,7 +1174,13 @@ bool OSLRenderServices::get_texture_info(OSL::ShaderGlobals *sg, ustring filenam
TypeDesc datatype, void *data)
{
OSL::TextureSystem *ts = osl_ts;
return ts->get_texture_info(filename, subimage, dataname, datatype, data);
if (filename.length() && filename[0] == '@') {
/* Special builtin textures. */
return false;
}
else {
return ts->get_texture_info(filename, subimage, dataname, datatype, data);
}
}
int OSLRenderServices::pointcloud_search(OSL::ShaderGlobals *sg, ustring filename, const OSL::Vec3 &center,

@ -93,6 +93,10 @@ public:
bool getmessage(OSL::ShaderGlobals *sg, ustring source, ustring name,
TypeDesc type, void *val, bool derivatives);
TextureSystem::TextureHandle *get_texture_handle(ustring filename);
bool good(TextureSystem::TextureHandle *texture_handle);
bool texture(ustring filename,
TextureSystem::TextureHandle *texture_handle,
TexturePerthread *texture_thread_info,
@ -103,7 +107,8 @@ public:
int nchannels,
float *result,
float *dresultds,
float *dresultdt);
float *dresultdt,
ustring *errormessage);
bool texture3d(ustring filename,
TextureHandle *texture_handle,