pixel updates are sent to 'framebuffer'

- set_pixel updates and marks dirty if applicable
- draw_pixels only sends data if change has occured