bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform, float time) { /* this is only used for shader and object space, we don't really have * a concept of shader space, so we just use object space for both. */ if (xform) { KernelGlobals *kg = kernel_globals; const ShaderData *sd = (const ShaderData *)xform; int object = sd->object; if (object != ~0) { #ifdef __OBJECT_MOTION__ Transform itfm; if(time == sd->time) itfm = sd->ob_itfm; else object_fetch_transform_motion_test(kg, object, time, &itfm); #else Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM); #endif itfm = transform_transpose(itfm); COPY_MATRIX44(&result, &itfm); return true; } } return false; }
bool OSLRenderServices::get_inverse_matrix(OSL::ShaderGlobals *sg, OSL::Matrix44 &result, OSL::TransformationPtr xform, float time) { /* this is only used for shader and object space, we don't really have * a concept of shader space, so we just use object space for both. */ if (xform) { const ShaderData *sd = (const ShaderData *)xform; KernelGlobals *kg = sd->osl_globals; int object = sd->object; if (object != OBJECT_NONE) { #ifdef __OBJECT_MOTION__ Transform itfm; if (time == sd->time) itfm = sd->ob_itfm; else object_fetch_transform_motion_test(kg, object, time, &itfm); #else Transform itfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM); #endif copy_matrix(result, itfm); return true; } else if (sd->type == PRIMITIVE_LAMP) { copy_matrix(result, sd->ob_itfm); return true; } } return false; }