rendering now happens on main thread