void OSLShaderGroupExec::execute_transparency(
    const ShaderGroup&              shader_group,
    const ShadingPoint&             shading_point,
    Alpha&                          alpha) const
{
    do_execute(
        shader_group,
        shading_point,
        VisibilityFlags::TransparencyRay);

    process_transparency_tree(shading_point.get_osl_shader_globals().Ci, alpha);
}
void OSLShaderGroupExec::execute_transparency(
    const ShaderGroup&  shader_group,
    const ShadingPoint& shading_point,
    Alpha&              alpha,
    float*              holdout) const
{
    // Switch temporary the ray type to Shadow.
    ShadingRay::TypeType saved_type = shading_point.m_ray.m_type;
    shading_point.m_ray.m_type = ShadingRay::ShadowRay;

    m_osl_shading_system.execute(
        *m_osl_shading_context,
        *shader_group.shadergroup_ref(),
        shading_point.get_osl_shader_globals());

    process_transparency_tree(shading_point.get_osl_shader_globals().Ci, alpha);

    if (holdout)
        *holdout = process_holdout_tree(shading_point.get_osl_shader_globals().Ci);

    // Restore the original ray type.
    shading_point.m_ray.m_type = saved_type;
}