implement deferred shadow