always try to draw, but only draw when need to