Exemplo n.º 1
0
        public void Precalc()
        {
            Logger.Info("Precalculating ...");

            var pv = new ProgressVisualizer(_form, D3DDevice.Device, D3DDevice.SwapChain);

            pv.Update(0.0f);

            MetaManager.InitializeCallback = progress => pv.Update(0.3f * progress);
            MetaManager.Instance.LoadMetaOperators();

            _model = new Model();

            //replace the measure operator by nop to remove render flush calls
            var script = @"using System;
                           using System.Collections.Generic;
                           namespace Framefield.Core.IDca9a3a0e_c1c7_42b6_a0e5_cdb4c61d0b18
                           {
                               public class Class_Group : OperatorPart.Function
                               {
                                   public override OperatorPartContext Eval(OperatorPartContext context, List<OperatorPart> inputs, int outputIdx)
                                   {
                                       foreach (var input in inputs[0].Connections) input.Eval(context);
                                       return context;
                                   }
                               }
                           }";

            var measureMetaOp = _model.MetaOpManager.GetMetaOperator(Guid.Parse("86580803-34fe-40a8-8dbf-9197dedb889c"));

            if (measureMetaOp != null)
            {
                var measureMetaOpPart = measureMetaOp.OperatorParts[0].Item2;
                measureMetaOpPart.Version = Guid.NewGuid();
                measureMetaOpPart.Script  = script;
                measureMetaOpPart.Compile();
            }

            //replace lightswidgets op by nop
            var lightWidgetsMetaOp = _model.MetaOpManager.GetMetaOperator(Guid.Parse("86b0f0e1-5c9f-430e-8086-abadbf26866c"));

            if (lightWidgetsMetaOp != null)
            {
                var lightWidgetsMetaOpPart = lightWidgetsMetaOp.OperatorParts[0].Item2;
                lightWidgetsMetaOpPart.Version = Guid.NewGuid();
                lightWidgetsMetaOpPart.Script  = script;
                lightWidgetsMetaOpPart.Compile();
            }

            //update everything
            var context = new OperatorPartContext(_defaultContext, 0.0f);

            context.D3DDevice         = D3DDevice.Device;
            context.Effect            = _renderer.SceneDefaultEffect;
            context.InputLayout       = _renderer.SceneDefaultInputLayout;
            context.RenderTargetView  = _renderTargetView;
            context.DepthStencilView  = _renderTargetDepthView;
            context.DepthStencilState = _renderer.DefaultDepthStencilState;
            context.BlendState        = _renderer.DefaultBlendState;
            context.BlendFactor       = _renderer.DefaultBlendFactor;
            context.RasterizerState   = _renderer.DefaultRasterizerState;
            context.SamplerState      = _renderer.DefaultSamplerState;
            context.Viewport          = _viewport;
            context.Texture0          = _texture;

            var statisticsCollector = new StatisticsCollector();

            _model.HomeOperator.Outputs[0].TraverseWithFunction(statisticsCollector, null);
            int totalNumOpParts     = statisticsCollector.NumTotalOpParts;
            int totalNumEvaluations = statisticsCollector.NumTotalEvaluations;

            var initialEvaluator = new InitialEvaluator(totalNumOpParts, context, pv);

            _model.HomeOperator.Outputs[0].TraverseWithFunction(initialEvaluator, null);
            pv.Dispose();

            _model.HomeOperator.Outputs[0].MarkInvalidatables();
            OperatorPart.HasValidInvalidationMarksOnOperatorPartsForTraversing = true;

            Logger.Info("Statistics: number of operator parts: {0}, total evaluations: {1}, number of time accessors: {2}",
                        totalNumOpParts, totalNumEvaluations, _timeAccessorOpPartFunctions.Count);

//            ResourceManager.DisposeAll();
        }
Exemplo n.º 2
0
        public void Precalc()
        {
            Logger.Info("Precalculating ...");

            var pv = new ProgressVisualizer(_form, D3DDevice.Device, D3DDevice.SwapChain);

            pv.Update(0.0f);

            MetaManager.InitializeCallback = progress => pv.Update(_operatorLoadEndProgress * progress);
            MetaManager.Instance.LoadMetaOperators();

            _model = new Model();

            //replace the measure operator by nop to remove render flush calls
            var script = @"using System;
                           using System.Collections.Generic;
                           namespace Framefield.Core.IDca9a3a0e_c1c7_42b6_a0e5_cdb4c61d0b18
                           {
                               public class Class_Group : OperatorPart.Function
                               {
                                   public override OperatorPartContext Eval(OperatorPartContext context, List<OperatorPart> inputs, int outputIdx)
                                   {
                                       foreach (var input in inputs[0].Connections) input.Eval(context);
                                       return context;
                                   }
                               }
                           }";

            var measureMetaOp = _model.MetaOpManager.GetMetaOperator(Guid.Parse("86580803-34fe-40a8-8dbf-9197dedb889c"));

            if (measureMetaOp != null)
            {
                var measureMetaOpPart = measureMetaOp.OperatorParts[0].Item2;
                measureMetaOpPart.Version = Guid.NewGuid();
                measureMetaOpPart.Script  = script;
                measureMetaOpPart.Compile();
            }

            //replace lightswidgets op by nop
            var lightWidgetsMetaOp = _model.MetaOpManager.GetMetaOperator(Guid.Parse("86b0f0e1-5c9f-430e-8086-abadbf26866c"));

            if (lightWidgetsMetaOp != null)
            {
                var lightWidgetsMetaOpPart = lightWidgetsMetaOp.OperatorParts[0].Item2;
                lightWidgetsMetaOpPart.Version = Guid.NewGuid();
                lightWidgetsMetaOpPart.Script  = script;
                lightWidgetsMetaOpPart.Compile();
            }

            //update everything
            var context = GetNewContext();

            var statisticsCollector = new StatisticsCollector();

            _model.HomeOperator.Outputs[0].TraverseWithFunction(statisticsCollector, null);
            int totalNumOpParts     = statisticsCollector.NumTotalOpParts;
            int totalNumEvaluations = statisticsCollector.NumTotalEvaluations;

            var initialEvaluator = new InitialEvaluator(totalNumOpParts, context, pv, _operatorLoadEndProgress, _preCacheStartProgress - _operatorLoadEndProgress);

            _model.HomeOperator.Outputs[0].TraverseWithFunction(initialEvaluator, null);

            var timeClipEvaluator = new TimeClipEvaluator();

            _model.HomeOperator.Outputs[0].TraverseWithFunction(timeClipEvaluator, null);

            _model.HomeOperator.Outputs[0].MarkInvalidatables();
            OperatorPart.HasValidInvalidationMarksOnOperatorPartsForTraversing = true;

            if (_settings.PreCacheEnabled)
            {
                // draw the first, last and center frame of each TimeClip
                // in reverse order to warm up caches
                var preCacheTimes = timeClipEvaluator.GetResult();
                int i             = 0;
                foreach (double t in preCacheTimes)
                {
                    Logger.Debug("pre-rendering frame at t={0}", t);
                    D3DDevice.BeginFrame();
                    DrawFrame((float)t);
                    D3DDevice.EndFrame();
                    i++;
                    pv.Update(_preCacheStartProgress + (1.0f - _preCacheStartProgress) * i / preCacheTimes.Count);
                }
            }

            pv.Dispose();

            Logger.Info("Statistics: number of operator parts: {0}, total evaluations: {1}, number of time accessors: {2}",
                        totalNumOpParts, totalNumEvaluations, _timeAccessorOpPartFunctions.Count);

//            ResourceManager.DisposeAll();
        }