コード例 #1
0
        private void RenderContent()
        {
            if (!IsVisible)
            {
                return;
            }

            if (_operator == null || _operator.Outputs.Count <= 0)
            {
                return;
            }

            try
            {
                var context = new OperatorPartContext(_defaultContext, (float)App.Current.Model.GlobalTime);

                // FIXME: the following lines are commented out to enable different values for debugOverlay-Variable
                //if (context.Time != _previousTime)
                //{
                var invalidator = new OperatorPart.InvalidateInvalidatables();
                _operator.Outputs[_shownOutputIndex].TraverseWithFunctionUseSpecificBehavior(null, invalidator);
                //_previousTime = context.Time;
                //}

                var evaluationType = _operator.Outputs[_shownOutputIndex].Type;
                switch (evaluationType)
                {
                case FunctionType.Float:
                    XValueLabel.Text = _operator.Outputs[_shownOutputIndex].Eval(context).Value.ToString(CultureInfo.InvariantCulture);
                    break;

                case FunctionType.Text:
                    XValueLabel.Text = _operator.Outputs[_shownOutputIndex].Eval(context).Text;
                    break;

                case FunctionType.Dynamic:
                    var result = _operator.Outputs[_shownOutputIndex].Eval(context).Dynamic;
                    using (var stringWriter = new StringWriter())
                        using (var jsonTextWriter = new JsonTextWriter(stringWriter)
                        {
                            QuoteName = false,
                            Formatting = Formatting.Indented
                        })
                        {
                            _serializer.Serialize(jsonTextWriter, result);
                            string s = stringWriter.ToString();
                            if (s.Length > 1024)
                            {
                                s = s.Substring(0, 1024) + "..";
                            }
                            XValueLabel.Text = s;
                        }
                    break;
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception.ToString());
            }
        }
コード例 #2
0
        private void RenderContent()
        {
            if (!IsVisible)
            {
                return;
            }

            if (_operator == null || _operator.Outputs.Count <= 0)
            {
                return;
            }

            if (TimeLoggingSourceEnabled)
            {
                TimeLogger.BeginFrame(App.Current.Model.GlobalTime);
            }

            D3DDevice.BeginFrame();

            try
            {
                var context = new OperatorPartContext(_defaultContext, (float)App.Current.Model.GlobalTime);

                // FIXME: the following lines are commented out to enable different values for debugOverlay-Variable
                //if (context.Time != _previousTime)
                //{
                var invalidator = new OperatorPart.InvalidateInvalidatables();
                _operator.Outputs[_shownOutputIndex].TraverseWithFunctionUseSpecificBehavior(null, invalidator);
                //_previousTime = context.Time;
                //}

                var evaluationType = _operator.Outputs[_shownOutputIndex].Type;
                switch (evaluationType)
                {
                case FunctionType.Scene:
                case FunctionType.Mesh:
                    _renderSetup.Operator = _operator;
                    var isMeshType = evaluationType == FunctionType.Mesh;
                    _renderSetup.Render(context, _shownOutputIndex, ShowGridAndGizmos, isMeshType);
                    _D3DImageContainer.InvalidateD3DImage();
                    break;

                case FunctionType.Image:
                    _renderSetup.Operator = _operator;
                    _renderSetup.RenderImage(context, _shownOutputIndex);
                    _D3DImageContainer.InvalidateD3DImage();
                    break;
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception.ToString());
            }

            D3DDevice.EndFrame();
            if (TimeLoggingSourceEnabled)
            {
                TimeLogger.EndFrame();
            }
        }
コード例 #3
0
ファイル: D3DRenderSetup.cs プロジェクト: wirmachenbunt/tooll
        public void RenderValuePlot(OperatorPartContext context, RenderViewConfiguration renderConfig)
        {
            SetupContextForGeometry(context);

            renderConfig.Operator.Outputs[renderConfig.ShownOutputIndex].Eval(context);

            context.Variables[OperatorPartContext.PLOT_FLOAT_VALUE] = context.Value;

            var invalidator = new OperatorPart.InvalidateInvalidatables();

            _plotValueOperator.Outputs[0].TraverseWithFunction(null, invalidator);

            _plotValueOperator.Outputs[0].Eval(context);
            _gpuSyncer.Sync(D3D11Device.ImmediateContext);
        }
コード例 #4
0
ファイル: Player.cs プロジェクト: wirmachenbunt/tooll
        private void DrawFrame(float t)
        {
            _model.GlobalTime = t;

            D3DDevice.Device.ImmediateContext.ClearDepthStencilView(_renderTargetDepthView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0);
            D3DDevice.Device.ImmediateContext.ClearRenderTargetView(_renderTargetView, new SharpDX.Color4(0.0f, 0.0f, 0.0f, 1.0f));
            D3DDevice.Device.ImmediateContext.InputAssembler.InputLayout = _renderer.SceneDefaultInputLayout;

            //invalidate all time accessors
            var invalidator = new OperatorPart.InvalidateInvalidatables();

            _model.HomeOperator.Outputs[0].TraverseWithFunctionUseSpecificBehavior(null, invalidator);

            var context = GetNewContext((float)_model.GlobalTime);

            _model.HomeOperator.Outputs[0].Eval(context);
        }
コード例 #5
0
        private void UpdateShownContent()
        {
            if (!IsVisible || _curveOp == null)
            {
                return;
            }

            var context = new OperatorPartContext(_defaultContext, (float)App.Current.Model.GlobalTime);

            if (Math.Abs(context.Time - _previousTime) > Constants.Epsilon)
            {
                var invalidator = new OperatorPart.InvalidateInvalidatables();
                _curveOp.Outputs[0].TraverseWithFunctionUseSpecificBehavior(null, invalidator);
                _previousTime = context.Time;
            }

            _curveOp.Outputs[0].Eval(context);

            XCurveEditor.UpdateEditBox();
        }
コード例 #6
0
ファイル: D3DRenderSetup.cs プロジェクト: wirmachenbunt/tooll
        public void RenderContent()
        {
            if (RenderConfig.Operator == null || RenderConfig.Operator.Outputs.Count <= 0)
            {
                return;
            }

            D3DDevice.BeginFrame();

            try
            {
                var context = new OperatorPartContext(
                    _defaultContext,
                    (float)(App.Current.Model.GlobalTime + RenderConfig.TimeScrubOffset));

                var invalidator = new OperatorPart.InvalidateInvalidatables();
                RenderConfig.Operator.Outputs[RenderConfig.ShownOutputIndex].TraverseWithFunctionUseSpecificBehavior(null, invalidator);

                var evaluationType = RenderConfig.Operator.Outputs[RenderConfig.ShownOutputIndex].Type;

                switch (evaluationType)
                {
                case FunctionType.Float:
                    RenderValuePlot(context, RenderConfig);
                    break;

                case FunctionType.Scene:
                    Action <OperatorPartContext, int> lambdaForScenes = (OperatorPartContext context2, int outputIdx) =>
                    {
                        RenderConfig.Operator.Outputs[outputIdx].Eval(context);
                    };
                    RenderGeometry(
                        context,
                        lambdaForScenes);

                    break;

                case FunctionType.Mesh:
                {
                    Action <OperatorPartContext, int> lambdaForMeshes = (OperatorPartContext context2, int outputIdx) =>
                    {
                        var mesh = RenderConfig.Operator.Outputs[outputIdx].Eval(context2).Mesh;
                        context2.Renderer.SetupEffect(context2);
                        context2.Renderer.Render(mesh, context2);
                    };
                    RenderGeometry(
                        context,
                        lambdaForMeshes);
                    break;
                }

                case FunctionType.Image:
                    SetupContextForRenderingImage(
                        context,
                        RenderConfig.RenderWithGammaCorrection);

                    var image = RenderConfig.Operator.Outputs[RenderConfig.ShownOutputIndex].Eval(new OperatorPartContext(context)).Image;
                    if (image == null)
                    {
                        break;
                    }

                    RenderedImageIsACubemap = image.Description.ArraySize > 1;
                    var cubeMapSide = RenderedImageIsACubemap ? RenderConfig.PreferredCubeMapSideIndex : -1;
                    if (cubeMapSide == 6)
                    {
                        RenderCubemapAsSphere(image, context);
                    }
                    else
                    {
                        RenderImage(image, context);
                    }
                    break;
                }
                _D3DImageContainer.InvalidateD3DImage();
            }
            catch (Exception exception)
            {
                Logger.Error(exception.ToString());
            }
            D3DDevice.EndFrame();
        }
コード例 #7
0
        private void UpdateLocalShownContent()
        {
            //if (_showSceneControl == null)
            //    return;
            //var op = _showSceneControl.Operator;
            //var d3DScene = _showSceneControl.RenderSetup;
            if (_renderConfig == null || _renderConfig.Operator == null || _renderConfig.Operator.Outputs.Count <= 0)
            {
                return;
            }

            //var op = d3DScene.RenderedOperator;
            var op = _renderConfig.Operator;

            D3DDevice.WindowSize  = new SharpDX.Size2(Size.Width, Size.Height);
            D3DDevice.TouchWidth  = Size.Width;
            D3DDevice.TouchHeight = Size.Height;

            TimeLogger.BeginFrame(CurrentTime);
            D3DDevice.BeginFrame();

            ProcessKeyEvents();

            try
            {
                var context = new OperatorPartContext(_defaultContext, (float)CurrentTime);

                if (Math.Abs(context.Time - _previousTime) > Constants.Epsilon)
                {
                    var invalidator = new OperatorPart.InvalidateInvalidatables();
                    op.Outputs[0].TraverseWithFunctionUseSpecificBehavior(null, invalidator);
                    _previousTime = context.Time;
                }

                context.D3DDevice         = D3DDevice.Device;
                context.RenderTargetView  = _renderTargetView;
                context.DepthStencilState = _renderer.DefaultDepthStencilState;
                context.BlendState        = _renderer.DefaultBlendState;
                context.RasterizerState   = _renderer.DefaultRasterizerState;
                context.SamplerState      = _renderer.DefaultSamplerState;
                context.Viewport          = _viewport;
                context.Texture0          = _shaderResourceView;

                var worldToCamera = Matrix.LookAtLH(_renderConfig.CameraSetup.Position, _renderConfig.CameraSetup.Target, _renderConfig.CameraSetup.UpDir);

                switch (op.FunctionType)
                {
                case FunctionType.Scene:
                    context.Effect           = _renderer.SceneDefaultEffect;
                    context.InputLayout      = _renderer.SceneDefaultInputLayout;
                    context.DepthStencilView = _depthStencilView;

                    D3DRenderSetup.SetupContextForRenderingCamToBuffer(context, op, _renderer, worldToCamera);

                    op.Outputs[0].Eval(context);
                    break;

                case FunctionType.Image:
                    context.Effect           = _renderer.ScreenRenderEffect;
                    context.InputLayout      = _renderer.ScreenQuadInputLayout;
                    context.DepthStencilView = null;

                    D3DRenderSetup.SetupContextForRenderingCamToBuffer(context, op, _renderer, worldToCamera);

                    var image = op.Outputs[0].Eval(new OperatorPartContext(context)).Image;
                    if (image != null)
                    {
                        _renderer.SetupBaseEffectParameters(context);
                        _renderer.RenderToScreen(image, context);
                    }
                    break;
                }

                _swapChain.Present(1, PresentFlags.None);
                D3DDevice.EndFrame();
                TimeLogger.EndFrame();
            }
            catch (Exception exception)
            {
                Logger.Error("Exception while in fullscreen:\n", exception.ToString());
            }
        }
コード例 #8
0
ファイル: Player.cs プロジェクト: yarwelp/tooll
        private void Update()
        {
            var time = Bass.BASS_ChannelBytes2Seconds(_soundStream, Bass.BASS_ChannelGetPosition(_soundStream, BASSMode.BASS_POS_BYTES));

            if (time >= _soundLength)
            {
                if (_settings.Looped)
                {
                    Bass.BASS_ChannelSetPosition(_soundStream, 0);
                }
                else
                {
                    _form.Close();
                }
            }

//            try {
//                _undoRedoStack.ProcessReceivedCommands();
//            }
//            catch (Exception exception) {
//                Logger.Warn("Error when excecuting remote command: {0}", exception.Message);
//            }

            //double time = (double)_globalTime.ElapsedTicks / Stopwatch.Frequency;
            _model.GlobalTime = time;
            TimeLogger.BeginFrame(time);
            D3DDevice.BeginFrame();

//            ResourceManager.CheckResources();

            D3DDevice.Device.ImmediateContext.ClearDepthStencilView(_renderTargetDepthView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0);
            D3DDevice.Device.ImmediateContext.ClearRenderTargetView(_renderTargetView, new SharpDX.Color4(0.0f, 0.0f, 0.0f, 1.0f));
            D3DDevice.Device.ImmediateContext.InputAssembler.InputLayout = _renderer.SceneDefaultInputLayout;

            //invalidate all time accessors
            var invalidator = new OperatorPart.InvalidateInvalidatables();

            _model.HomeOperator.Outputs[0].TraverseWithFunctionUseSpecificBehavior(null, invalidator);

            var context = new OperatorPartContext(_defaultContext, (float)_model.GlobalTime);

            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;

            _model.HomeOperator.Outputs[0].Eval(context);

            D3DDevice.SwapChain.Present(_settings.VSyncEnabled ? 1 : 0, PresentFlags.None);

            Int64 elapsedTicks = _stopwatch.ElapsedTicks;

            Console.Write("time: {0:000.000}, fps: {1:000.0} ({2:000.0}/{3:000.0}), resources used: {4,2}, free: {5,2}      \r",
                          time, (double)_numMeasureValues * Stopwatch.Frequency / _averagedElapsed.Sum(e => e), (double)Stopwatch.Frequency / _averagedElapsed.Max(), (double)Stopwatch.Frequency / _averagedElapsed.Min(),
                          ResourceManager.NumUsedResources, ResourceManager.NumFreeResources);
            _averagedElapsed[_currentAveragedElapsedIndex] = elapsedTicks;
            _currentAveragedElapsedIndex++;
            _currentAveragedElapsedIndex %= _numMeasureValues;
            _stopwatch.Restart();

            D3DDevice.EndFrame();
            TimeLogger.EndFrame();
        }