def __init__(self, app=None, canvas=None, scene=None):
        super(SceneController, self).__init__()
        self.canvas = canvas
        self.scene = scene
        self.app = app
        self.fixtures = []
        self._max_pixels = 0
        self._output_buffer = None
        self.show_center = False
        self._strand_keys = list()
        self._color_mode = self.app.config.get("color_mode")
        self._frame_data = {}
        self.strand_data = {}
        self.times = []
        self.frame_start_time = 0.0
        if self.canvas is not None:
            self.init_view()

        self._fixture_lookup_cache = self.scene.fixture_hierarchy()
        fixture_data = self.scene.get("fixtures", [])
        for fixture_data_item in fixture_data:
            f = Fixture(fixture_data_item, controller=self)
            self._fixture_lookup_cache[f.strand()][f.address()] = f
            self.fixtures.append(f)

        self.create_pixel_array()