public PaintController(ModelsEx models)
        {
            this.models   = models;
            this.gpuTimer = new AdvancedGpuTimer();
            viewMode      = new ViewModeController(models);

            // model events
            models.Display.PropertyChanged += DisplayOnPropertyChanged;
            models.Window.PropertyChanged  += WindowOnPropertyChanged;
            models.Overlay.PropertyChanged += OverlayOnPropertyChanged;

            // client mouse events
            models.Window.Window.BorderHost.PreviewMouseMove  += (sender, e) => ScheduleRedraw();
            models.Window.Window.BorderHost.PreviewMouseWheel += (sender, e) => ScheduleRedraw();

            foreach (var pipe in models.Pipelines)
            {
                pipe.PropertyChanged += PipeOnPropertyChanged;
            }

            models.Window.Window.Loaded += WindowOnLoaded;

            // clear color
            var col = models.Window.ThemeColor;

            clearColor.R = col.Red;
            clearColor.G = col.Green;
            clearColor.B = col.Blue;
            clearColor.A = 1.0f;
        }