better rendering abstraction