he::IntersectResult CameraPerspective::intersect( const Bound& bound ) const
{
    HIERARCHICAL_PROFILE(__HE_FUNCTION__);
    const Sphere& camSphereBound(m_Bound.getSphere());
    const Cone& camConeBound(m_Bound.getCone());
    const Frustum& frustumBound(m_Bound.getFrustum());
    const Sphere& otherSphereBound(bound.getSphere());

    // Fast sphere - sphere test
    {
        HIERARCHICAL_PROFILE("Sphere Test");
        if (camSphereBound.intersectTest(otherSphereBound) == false) 
            return IntersectResult_Outside;
    }

    {
        HIERARCHICAL_PROFILE("Cone Test");
        // Fast cone - sphere test
        if (camConeBound.intersectTest(otherSphereBound) == false) 
            return IntersectResult_Outside;
    }

    // sphere frustum test
    {
        HIERARCHICAL_PROFILE("Frustum Test");
        switch(frustumBound.intersect(otherSphereBound))
        {
        case IntersectResult_Outside:
            return IntersectResult_Outside;
        case IntersectResult_Inside:
            return IntersectResult_Inside;
        case IntersectResult_Intersecting:
            {
                HIERARCHICAL_PROFILE("Slow Frustum Test");
                switch(frustumBound.intersect(bound.getAABB()))
                {
                case IntersectResult_Outside:
                    return IntersectResult_Outside;
                case IntersectResult_Inside:
                    return IntersectResult_Inside;
                case IntersectResult_Intersecting:
                    return IntersectResult_Intersecting;
                }
            }
            break;
        }
    }
    LOG(LogType_ProgrammerAssert, "Should never get here");
    return IntersectResult_Outside;
}