My only thoughts on this is that Graphics::scale() creates a new Surface every time. That seems rather wasteful to use in this case. (Scaling happens every frame)