コード例 #1
0
        //chooses an appropriate state for the rendering engine
        private void chooseDesiredEngineState()
        {
            FractalEngineState state = FractalEngineState.Offline;

            if (!this.ReadyToRender || !renderer.HasGraphics)
            {
                state = FractalEngineState.Offline;
            }
            else if (
                this.ClientSize.IsEmpty || this.RendererSize.IsEmpty ||
                this.Resizing || this.DlgActive || FractalManager.Fractal == null)
            {
                state = FractalEngineState.Suspended;
            }
            else
            {
                state = FractalEngineState.Online;
            }
            engineMgr.DesiredEngineState = state;

            if (config.AutoSizeRenderer)
            {
                engineMgr.DesiredOutputSize = renderer.ClientSize;
            }
            else
            {
                engineMgr.DesiredOutputSize = config.CustomRes;
            }
            updateEngineStatusPanel();

            //if an engine error hasn't been shown before, do the engine error dialog.
            if (engineMgr.EngineState == FractalEngineState.Error && !engineErrorShown)
            {
                engineErrorShown = true;
                ErrorForm.Show(engineMgr.CurrentException);
            }
        }
コード例 #2
0
        private void updateEngineStatusPanel()
        {
            if (engineMgr == null)
            {
                return;
            }

            FractalEngineState cs = engineMgr.EngineState;
            FractalEngineState ds = engineMgr.DesiredEngineState;

            string str = "";

            switch (cs)
            {
            case FractalEngineState.Online:
                switch (ds)
                {
                case FractalEngineState.Online: str = "is online."; break;

                case FractalEngineState.Suspended: str = "is suspending..."; break;

                case FractalEngineState.Offline: str = "is shutting Down..."; break;
                }
                engineStatusPanel.Visible = false;
                renderer.Visible          = true;
                break;

            case FractalEngineState.Suspended:
                switch (ds)
                {
                case FractalEngineState.Online: str = "is resuming..."; break;

                case FractalEngineState.Suspended: str = "is suspended."; break;

                case FractalEngineState.Offline: str = "is shutting Down..."; break;
                }
                renderer.Visible = false;
                viewEngineErrorButton.Visible = false;
                restartEngineButton.Visible   = false;
                engineStatusPanel.Visible     = true;
                break;

            case FractalEngineState.Offline:
                switch (ds)
                {
                case FractalEngineState.Online: str = "is starting..."; break;

                case FractalEngineState.Suspended: str = "is starting..."; break;

                case FractalEngineState.Offline: str = "is offline."; break;
                }
                renderer.Visible = false;
                viewEngineErrorButton.Visible = false;
                restartEngineButton.Visible   = false;
                engineStatusPanel.Visible     = true;
                break;

            case FractalEngineState.Error:
            default:
                str = "has crashed.";
                renderer.Visible = false;
                viewEngineErrorButton.Visible = true;
                restartEngineButton.Visible   = true;
                engineStatusPanel.Visible     = true;
                break;
            }
            engineStatusLabel.Text = string.Format("Fractal engine {0}", str);
        }
コード例 #3
0
        private void switchState(FractalEngineState rs)
        {
            FractalEngineState cs = this.EngineState;                     //the current engine state

            try{
                if (rs == cs)
                {
                    return;                     //they match, do nothing
                }
                else if (cs == FractalEngineState.Online)
                {
                    if (rs == FractalEngineState.Suspended)                    //go from online to suspended
                    {
                        engine.Deallocate();
                    }
                    else if (rs == FractalEngineState.Offline)                    //go from online to offline
                    {
                        shutdownEngine();
                    }
                }
                else if (cs == FractalEngineState.Suspended)
                {
                    if (rs == FractalEngineState.Online)                    //go from suspended to online
                    {
                        allocateEngine();
                    }
                    else if (rs == FractalEngineState.Offline)                    //go from suspended to offline
                    {
                        shutdownEngine();
                    }
                }
                else if (cs == FractalEngineState.Offline)
                {
                    if (rs == FractalEngineState.Online)                             //go from offline to online
                    {
                        deviceEntry = chooseDevice();
                        engine      = deviceEntry.CreateFractalEngine(mainForm.Renderer.Context);
                        allocateEngine();
                    }
                    else if (rs == FractalEngineState.Suspended)                     //go from offline to suspended
                    {
                        deviceEntry = chooseDevice();
                        engine      = deviceEntry.CreateFractalEngine(mainForm.Renderer.Context);
                    }
                }
                else if (cs == FractalEngineState.Error)
                {
                    if (rs == FractalEngineState.Offline)                                //go from error to offline
                    {
                        shutdownEngine();
                    }
                }
            }
            catch (Exception ex)            //if something goes wrong, switch to the error state
            {
                shutdownEngine();
                if (ex is NoDevicesFoundException)
                {
                    currentException = ex;
                }
                else
                {
                    currentException = new FractalEngineStateException(deviceEntry == null ? EngineType.Auto : deviceEntry.EngineType, cs, rs, ex);
                }
            }
        }
コード例 #4
0
 public FractalEngineStateException(EngineType engineType, FractalEngineState fromState, FractalEngineState toState, Exception innerException)
     : base(engineType, "An error has occured in the fractal engine.", innerException)
 {
     this.Data["fromState"] = (object)fromState;
     this.Data["toState"]   = (object)toState;
 }
コード例 #5
0
        public void UpdateEngineState()
        {
            FractalEngineState rs = this.DesiredEngineState;              //the desired engine state

            switchState(rs);
        }