bool OSLRenderServices::environment(ustring filename, TextureHandle *texture_handle, TexturePerthread *thread_info, TextureOpt &options, OSL::ShaderGlobals *sg, const OSL::Vec3 &R, const OSL::Vec3 &dRdx, const OSL::Vec3 &dRdy, int nchannels, float *result, float *dresultds, float *dresultdt, ustring *errormessage) { OSLTextureHandle *handle = (OSLTextureHandle *)texture_handle; OSL::TextureSystem *ts = texture_system; bool status = false; if (handle && handle->oiio_handle) { if (thread_info == NULL) { ShaderData *sd = (ShaderData *)(sg->renderstate); KernelGlobals *kernel_globals = sd->osl_globals; OSLThreadData *tdata = kernel_globals->osl_tdata; thread_info = tdata->oiio_thread_info; } status = ts->environment(handle->oiio_handle, thread_info, options, R, dRdx, dRdy, nchannels, result, dresultds, dresultdt); } else { status = ts->environment( filename, options, R, dRdx, dRdy, nchannels, result, dresultds, dresultdt); } if (!status) { if (nchannels == 3 || nchannels == 4) { result[0] = 1.0f; result[1] = 0.0f; result[2] = 1.0f; if (nchannels == 4) result[3] = 1.0f; } } else if (handle && handle->processor) { ColorSpaceManager::to_scene_linear(handle->processor, result, nchannels); } return status; }
bool OSLRenderServices::environment(ustring filename, TextureOpt &options, OSL::ShaderGlobals *sg, const OSL::Vec3 &R, const OSL::Vec3 &dRdx, const OSL::Vec3 &dRdy, float *result) { OSL::TextureSystem *ts = osl_ts; ShaderData *sd = (ShaderData *)(sg->renderstate); KernelGlobals *kg = sd->osl_globals; OSLThreadData *tdata = kg->osl_tdata; OIIO::TextureSystem::Perthread *thread_info = tdata->oiio_thread_info; OIIO::TextureSystem::TextureHandle *th = ts->get_texture_handle(filename, thread_info); bool status = ts->environment(th, thread_info, options, R, dRdx, dRdy, result); if(!status) { if(options.nchannels == 3 || options.nchannels == 4) { result[0] = 1.0f; result[1] = 0.0f; result[2] = 1.0f; if(options.nchannels == 4) result[3] = 1.0f; } } return status; }
bool OSLRenderServices::environment(ustring filename, TextureOpt &options, OSL::ShaderGlobals *sg, const OSL::Vec3 &R, const OSL::Vec3 &dRdx, const OSL::Vec3 &dRdy, float *result) { OSL::TextureSystem *ts = kernel_globals->osl->ts; bool status = ts->environment(filename, options, R, dRdx, dRdy, result); if(!status) { if(options.nchannels == 3 || options.nchannels == 4) { result[0] = 1.0f; result[1] = 0.0f; result[2] = 1.0f; if(options.nchannels == 4) result[3] = 1.0f; } } return status; }