private void GeneralSetup()
        {
            _settingsLock       = new object();
            _byteBufferLock     = new object();
            _stopThreads        = false;
            _tasks              = new ConcurrentQueue <FractalTask>();
            _drawingTasks       = new ConcurrentQueue <FractalTask>();
            _previousDrawnTasks = new ConcurrentQueue <FractalTask>();
            _pixelValues        = new byte[PixelFormats.Bgra32.BitsPerPixel / 8 * _pixelWidth * _pixelHeight];
            var mainThread = new Thread(MainThreadTask)
            {
                IsBackground = true, Name = this.Name + ": MandelbrotMainThread"
            };

            _defaultColorMapper = new HsvColorMapper();
            for (var i = 0; i < _numThreadsPerTaskQueue; i++)
            {
                var workerThread = new Thread(WorkerTask)
                {
                    IsBackground = true, Name = this.Name + ": WorkerThread " + i
                };
                var drawingThread =
                    new Thread(DrawingWorkerTask)
                {
                    IsBackground = true,
                    Name         = this.Name + ": DrawingThread " + i
                };     //Both kinds of Threads do both tasks. But drawing Threads prioritize drawing and normal workers prioritize calculation
                workerThread.Start();
                drawingThread.Start();
            }
            mainThread.Start();
        }
Beispiel #2
0
        private void comboBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            var s = (ComboBox)sender;

            Type t = _colorMappers[e.AddedItems[0].ToString()];
            AbstractColorMapper c = (AbstractColorMapper)Activator.CreateInstance(t);

            _previewMandelbrot.SetColorMapper(c);
            _renderMandelbrot.SetColorMapper(c);
            _previewMandelbrot.ReColor();
        }
 public void SetColorMapper(AbstractColorMapper c)
 {
     _colorMapper = c;
     _colorMapper.redrawWanted += (sender, args) => { ReColor(); };
 }