refactoring: reduced the number of virtual _push* methods
Refactoing: now the overriding CustomTexture class can control how shapes are drawn