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) { /* 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; int object = sd->object; if (object != OBJECT_NONE) { #ifdef __OBJECT_MOTION__ Transform tfm = sd->ob_itfm; #else KernelGlobals *kg = sd->osl_globals; Transform tfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM); #endif copy_matrix(result, tfm); return true; } else if (sd->type == PRIMITIVE_LAMP) { copy_matrix(result, sd->ob_itfm); return true; } } return false; }
bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr xform) { /* 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; int object = sd->object; if (object != ~0) { #ifdef __OBJECT_MOTION__ Transform tfm = sd->ob_tfm; #else KernelGlobals *kg = kernel_globals; Transform tfm = object_fetch_transform(kg, object, OBJECT_TRANSFORM); #endif tfm = transform_transpose(tfm); COPY_MATRIX44(&result, &tfm); return true; } } return false; }