Exemplo n.º 1
0
        /** TOM: why do a separate this from the normal dispose-method? */
        //public void CleanUp()
        //{
        //    Utilities.DisposeObj(ref _D3DImageContainer);
        //}
        #endregion


        #region rendering geometry
        public void RenderGeometry(OperatorPartContext context, Action <OperatorPartContext, int> evaluateMeshOrScene)
        {
            SetupContextForGeometry(context);

            LastContext = context;  // Make context accessible to read last camera position

            if (RenderConfig.ShowGridAndGizmos)
            {
                // Check the selected operators for attributes that can be show as Gizmo
                var selectedOps = (from selectable in App.Current.MainWindow.CompositionView.CompositionGraphView.SelectionHandler.SelectedElements
                                   select selectable as OperatorWidget
                                   into opWidget
                                   where opWidget != null && opWidget.Operator.Outputs.Any()
                                   select opWidget.Operator).ToArray();

                RenderConfig.TransformGizmo.SetupEvalCallbackForSelectedTransformOperators(selectedOps, context);

                // Override DebugSetting with ShowGizmo-Setting
                var previousDebugSetting = GetDebugSettingFromContextVariables(context);
                context.Variables[OperatorPartContext.DEBUG_VARIABLE_NAME] = 1;
                context.Variables[GIZMO_PART_VARIBALE_NAME] = RenderConfig.TransformGizmo.IndexOfGizmoPartBelowMouse;

                evaluateMeshOrScene(context, RenderConfig.ShownOutputIndex);

                // Render Grid and Gizmos
                _sceneGridOperator.Outputs[0].Eval(context);
                RenderConfig.TransformGizmo.RenderTransformGizmo(context);

                // Reset DebugSetting
                if (previousDebugSetting != null)
                {
                    context.Variables[OperatorPartContext.DEBUG_VARIABLE_NAME] = previousDebugSetting.Value;
                }
                else
                {
                    context.Variables.Remove(OperatorPartContext.DEBUG_VARIABLE_NAME);
                }
            }
            else
            {
                evaluateMeshOrScene(context, RenderConfig.ShownOutputIndex);
            }

            // With gamma correction we need an additional pass gamma correcting the RT Texture to the shared texture
            if (RenderConfig.RenderWithGammaCorrection)
            {
                SetupContextForRenderingImage(context, withGammaCorrection: true);
                _renderer.RenderToScreen(_sceneRenderTargetTexture, context);
            }
            _gpuSyncer.Sync(D3D11Device.ImmediateContext);
        }
Exemplo n.º 2
0
 private void EvaluateOperator(OperatorPartContext context, int outputIdx, bool renderMesh)
 {
     if (renderMesh)
     {
         Mesh mesh = Operator.Outputs[outputIdx].Eval(context).Mesh;
         context.Renderer.SetupEffect(context);
         context.Renderer.Render(mesh, context);
     }
     else
     {
         // scene renders itself
         Operator.Outputs[outputIdx].Eval(context);
     }
 }
Exemplo n.º 3
0
        public virtual void RenderToScreen(Texture2D image, OperatorPartContext context)
        {
            var subContext = new OperatorPartContext(context)
            {
                Effect           = ScreenRenderEffect,
                DepthStencilView = null,
                CameraProjection = Matrix.OrthoLH(1, 1, -100, 100),
                WorldToCamera    = Matrix.LookAtLH(new Vector3(0, 0, -5), new Vector3(0, 0, 0), new Vector3(0, 1, 0)),
                InputLayout      = ScreenQuadInputLayout
            };

            var shaderResourceViewDescription = new ShaderResourceViewDescription();

            if (image.Description.ArraySize > 1)
            {
                shaderResourceViewDescription.Format         = image.Description.Format;
                shaderResourceViewDescription.Dimension      = ShaderResourceViewDimension.Texture2DArray;
                shaderResourceViewDescription.Texture2DArray = new ShaderResourceViewDescription.Texture2DArrayResource
                {
                    ArraySize       = image.Description.ArraySize,
                    FirstArraySlice = 0,
                    MipLevels       = image.Description.MipLevels,
                    MostDetailedMip = 0
                };
            }
            else if (image.Description.Format == Format.R32_Typeless)
            {
                shaderResourceViewDescription.Format              = Format.R32_Float;
                shaderResourceViewDescription.Dimension           = ShaderResourceViewDimension.Texture2D;
                shaderResourceViewDescription.Texture2D.MipLevels = 1;
            }
            else
            {
                shaderResourceViewDescription.Format    = image.Description.Format;
                shaderResourceViewDescription.Dimension = ShaderResourceViewDimension.Texture2D;
                shaderResourceViewDescription.Texture2D = new ShaderResourceViewDescription.Texture2DResource
                {
                    MipLevels       = image.Description.MipLevels,
                    MostDetailedMip = 0
                };
            }

            using (var shaderResourceView = new ShaderResourceView(context.D3DDevice, image, shaderResourceViewDescription))
            {
                subContext.Texture0 = shaderResourceView;
                SetupBaseEffectParameters(subContext);
                Render(_screenQuadMesh, subContext);
            }
        }
Exemplo n.º 4
0
        public void PropertyStasher_pushModifyAndPopViewportAndObjectTWorld_bothAreRestored()
        {
            var context  = new OperatorPartContext();
            var viewport = new SharpDX.ViewportF(0, 0, 320, 200);

            context.Viewport = viewport;

            using (new PropertyStasher <OperatorPartContext>(context, "Viewport", "ObjectTWorld")) {
                context.Viewport     = new SharpDX.ViewportF(0, 0, 640, 480);
                context.ObjectTWorld = SharpDX.Matrix.OrthoLH(1.0f, 1.0f, 0.1f, 1.0f);
            }

            Assert.AreEqual(SharpDX.Matrix.Identity, context.ObjectTWorld);
            Assert.AreEqual(viewport, context.Viewport);
        }
Exemplo n.º 5
0
 public virtual string GetCode(int idx)
 {
     if (idx < OperatorPart.Connections.Count)
     {
         var context = new OperatorPartContext()
         {
             Time = 0.0f
         };
         return(OperatorPart.Connections[idx].Eval(context).Text);
     }
     else
     {
         return("");
     }
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        public virtual void Render(Mesh mesh, OperatorPartContext context, int techniqueIdx)
        {
            if (context.DepthStencilView != null && context.RenderTargetViews != null)
            {
                context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.DepthStencilView, context.RenderTargetViews);
            }
            else if (context.DepthStencilView != null && context.RenderTargetView != null)
            {
                context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.DepthStencilView, context.RenderTargetView);
            }
            else if (context.RenderTargetView != null)
            {
                context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.RenderTargetView);
            }
            else if (context.DepthStencilView != null)
            {
                context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.DepthStencilView, (RenderTargetView)null);
            }

            if (context.BlendState != null)
            {
                context.D3DDevice.ImmediateContext.OutputMerger.BlendState  = context.BlendState;
                context.D3DDevice.ImmediateContext.OutputMerger.BlendFactor = context.BlendFactor;
            }

            if (context.DepthStencilState != null)
            {
                context.D3DDevice.ImmediateContext.OutputMerger.DepthStencilState = context.DepthStencilState;
            }

            if (context.RasterizerState != null)
            {
                context.D3DDevice.ImmediateContext.Rasterizer.State = context.RasterizerState;
            }

            context.D3DDevice.ImmediateContext.Rasterizer.SetViewport(context.Viewport);
            context.D3DDevice.ImmediateContext.InputAssembler.InputLayout       = context.InputLayout;
            context.D3DDevice.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
            context.D3DDevice.ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(mesh.Vertices, mesh.AttributesSize, 0));

            var technique = context.Effect.GetTechniqueByIndex(techniqueIdx);

            for (int i = 0; i < technique.Description.PassCount; ++i)
            {
                technique.GetPassByIndex(i).Apply(context.D3DDevice.ImmediateContext);
                context.D3DDevice.ImmediateContext.Draw(mesh.NumTriangles * 3, 0);
            }
        }
Exemplo n.º 8
0
        private void CreateContextSettingsWithAspectRatio()
        {
            _D3DImageContainer.SetBackBufferSharpDX(_sharedTexture);

            var contextSettings = new ContextSettings();

            contextSettings.DisplayMode = new SharpDX.Direct3D9.DisplayMode()
            {
                Width       = RenderConfig.Width,
                Height      = RenderConfig.Height,
                RefreshRate = 60,
                Format      = D3DImageSharpDX.TranslateFormat(_sharedTexture)
            };
            contextSettings.AspectRatio = contextSettings.DisplayMode.AspectRatio;
            _defaultContext             = OperatorPartContext.createDefault(contextSettings);
        }
Exemplo n.º 9
0
        protected void SetupPbrSphereLightsStructuredBufferForEffect(OperatorPartContext context, string effectVariableName, ref Buffer sphereLightsBuffer, ref ShaderResourceView sphereLightsSRV)
        {
            var sphereLightVariable = context.Effect.GetVariableByName(effectVariableName).AsShaderResource();

            if (sphereLightVariable != null)
            {
                var  sphereLights = (List <IPbrSphereLight>)context.Objects[OperatorPartContext.PBR_SPHERE_LIGHT_CONTAINER_ID];
                bool success      = SetupStructuredBuffer(context.D3DDevice, sphereLights.ToArray(), pl => new PbrSphereLightBufferLayout(pl),
                                                          ref sphereLightsBuffer, ref sphereLightsSRV);
                sphereLightVariable.SetResource(success ? sphereLightsSRV : null);
            }
            else
            {
                Logger.Warn("Found no PBR sphere light effect variable '{0}'.", effectVariableName);
            }
        }
Exemplo n.º 10
0
 private void SetupContextForRenderingGeometry(OperatorPartContext context, bool withGammaCorrection)
 {
     context.D3DDevice        = D3D11Device;
     context.Effect           = _renderer.SceneDefaultEffect;
     context.InputLayout      = _renderer.SceneDefaultInputLayout;
     context.RenderTargetView = withGammaCorrection
         ? _sceneRenderTargetTextureRenderView
         : _sharedTextureRenderView;
     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          = new Viewport(0, 0, RenderConfig.Width, RenderConfig.Height, 0.0f, 1.0f);
     context.Texture0          = _texture;
 }
Exemplo n.º 11
0
 public void SetupContextForRenderingImage(OperatorPartContext context, bool withGammaCorrection)
 {
     context.Effect = withGammaCorrection
         ? _renderer.ScreenRenderGammaCorrectionEffect
         : _renderer.ScreenRenderEffect;
     context.D3DDevice         = D3D11Device;
     context.InputLayout       = _renderer.ScreenQuadInputLayout;
     context.RenderTargetView  = _sharedTextureRenderView;
     context.DepthStencilView  = null;
     context.DepthStencilState = _renderer.DefaultDepthStencilState;
     context.BlendState        = _renderer.DisabledBlendState; // DefaultBlendState;
     context.BlendFactor       = _renderer.DefaultBlendFactor;
     context.RasterizerState   = _renderer.DefaultRasterizerState;
     context.SamplerState      = _renderer.DefaultSamplerState;
     context.Viewport          = new Viewport(0, 0, RenderConfig.Width, RenderConfig.Height, 0.0f, 1.0f);
     context.Texture0          = _texture;
 }
Exemplo n.º 12
0
        private void SetupContextForGeometry(OperatorPartContext context)
        {
            SetupContextForRenderingGeometry(context, RenderConfig.RenderWithGammaCorrection);

            RenderConfig.CameraSetup.GetViewDirections(out Vector3 viewDir, out Vector3 sideDir, out Vector3 upDir);
            var worldToCamera = Matrix.LookAtLH(RenderConfig.CameraSetup.Position, RenderConfig.CameraSetup.Target, upDir);

            // Find a nice balance between small and large objects (probably skyspheres)
            var zoomLength   = (RenderConfig.CameraSetup.Position - RenderConfig.CameraSetup.Target).Length();
            var farClipping  = (zoomLength * 2) + 5000;
            var nearClipping = zoomLength / 100;

            SetupContextForRenderingCamToBuffer(context, RenderConfig.Operator, _renderer, worldToCamera, nearClipping, farClipping);

            RenderConfig.CameraSetup.LastWorldToCamera    = context.WorldToCamera;
            RenderConfig.CameraSetup.LastCameraProjection = context.CameraProjection;
        }
Exemplo n.º 13
0
        public void PropertyStasher_modifyCascadedProperty_isRestoredToInitialValue()
        {
            var context  = new OperatorPartContext();
            var viewport = new SharpDX.ViewportF(0, 0, 320, 200);

            context.Viewport = viewport;

            using (new PropertyStasher <OperatorPartContext>(context, "Viewport")) {
                var viewport2 = new SharpDX.Viewport(0, 0, 640, 480);
                context.Viewport = viewport2;
                using (new PropertyStasher <OperatorPartContext>(context, "Viewport")) {
                    context.Viewport = new SharpDX.Viewport(0, 0, 1024, 768);
                }
                Assert.AreEqual(viewport2, context.Viewport);
            }

            Assert.AreEqual(viewport, context.Viewport);
        }
Exemplo n.º 14
0
        private void SetupRendering()
        {
            XSceneImage.Source = _D3DImageContainer;
            _renderSetup       = new D3DRenderSetup((int)XGrid.ActualWidth, (int)XGrid.ActualHeight);
            _D3DImageContainer.SetBackBufferSharpDX(_renderSetup.SharedTexture);

            var contextSettings = new ContextSettings();

            contextSettings.DisplayMode = new SharpDX.Direct3D9.DisplayMode()
            {
                Width       = _renderSetup.WindowWidth,
                Height      = _renderSetup.WindowHeight,
                RefreshRate = 60,
                Format      = D3DImageSharpDX.TranslateFormat(_renderSetup.SharedTexture)
            };
            contextSettings.AspectRatio = contextSettings.DisplayMode.AspectRatio;
            _defaultContext             = OperatorPartContext.createDefault(contextSettings);
        }
Exemplo n.º 15
0
        private OperatorPartContext GetNewContext(float t = 0.0f)
        {
            var context = new OperatorPartContext(_defaultContext, t);

            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;
            return(context);
        }
Exemplo n.º 16
0
        void PickFileButton_Click(object sender, RoutedEventArgs e)
        {
            var defaultPath = ".\\assets";
            var tmpContext  = new OperatorPartContext();
            var startPath   = ValueHolder.Eval(tmpContext).Text;
            var dialogTitle = "Select file";

            var pickedFilePath = UIHelper.PickFileWithDialog(defaultPath, startPath, dialogTitle);

            if (pickedFilePath != "")
            {
                if (_updateValueCommand == null)
                {
                    XTextEdit_EditingStarted();
                }
                XTextEdit.XTextEdit.Text = pickedFilePath;
                XTextEdit_EditingCompleted();
            }
        }
Exemplo n.º 17
0
        public void RenderCubemapAsSphere(Texture2D cubeMapImage, OperatorPartContext context)
        {
            // Set cubemap to context
            var texture = new ShaderResourceView(context.D3DDevice, cubeMapImage);

            if (texture == null)
            {
                return;
            }

            context.SkySphereSRV = texture;

            Action <OperatorPartContext, int> lambdaForMeshes = (OperatorPartContext context2, int outputIdx) =>
            {
                _cubemapSphereOperator.Outputs[0].Eval(context);
            };

            RenderGeometry(context, lambdaForMeshes);
        }
Exemplo n.º 18
0
        private Matrix ObjectToWorldWithGizmo(OperatorPartContext context)
        {
            Matrix transformIncludingOpTransform = Matrix.Identity;

            Vector3    orgScale;
            Quaternion orgRotate;
            Vector3    orgTranslate;

            _originalObjectToWorld.Decompose(out orgScale, out orgRotate, out orgTranslate);

            Matrix transformWithNormalizedScale = Matrix.Transformation(Vector3.Zero, Quaternion.Zero, Vector3.One, Vector3.Zero,
                                                                        orgRotate,
                                                                        orgTranslate);

            var translate = _translateInputs.EvaluateOrDefault(context, Vector3.Zero);
            var rotate    = _rotateInputs.EvaluateOrDefault(context, Vector3.Zero);
            var pivot     = _pivotInputs.EvaluateOrDefault(context, Vector3.Zero);

            var tmpMatrix   = context.ObjectTWorld * _gizmoToParent;
            var scaleFactor = Vector4.Transform(tmpMatrix.Row4, context.WorldToCamera).Z / 20f;

            Quaternion rotationByOp = Quaternion.RotationYawPitchRoll(MathUtil.DegreesToRadians(rotate.Y),
                                                                      MathUtil.DegreesToRadians(rotate.X),
                                                                      MathUtil.DegreesToRadians(rotate.Z));


            _gizmoToParent = Matrix.Transformation(Vector3.Zero,
                                                   Quaternion.Zero,
                                                   new Vector3(scaleFactor),
                                                   Vector3.Zero,
                                                   rotationByOp,
                                                   translate);

            _translateXParam.Value = translate.X;
            _translateYParam.Value = translate.Y;
            _translateZParam.Value = translate.Z;

            transformIncludingOpTransform = _gizmoToParent * Matrix.Translation(pivot.X, pivot.Y, pivot.Z) *
                                            transformWithNormalizedScale;

            return(transformIncludingOpTransform);
        }
Exemplo n.º 19
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();
        }
Exemplo n.º 20
0
        public void RenderImage(Texture2D image, OperatorPartContext context)
        {
            RenderConfig.CameraSetup.GetViewDirections(out Vector3 viewDir, out Vector3 sideDir, out Vector3 upDir);
            var worldToCamera = Matrix.LookAtLH(RenderConfig.CameraSetup.Position, RenderConfig.CameraSetup.Target, upDir);

            SetupContextForRenderingCamToBuffer(context, RenderConfig.Operator, _renderer, worldToCamera);

            _imageBackgroundOperator.Outputs[0].Eval(context);
            context.Image = null;

            if (RenderConfig.PreferredCubeMapSideIndex > -1)
            {
                context.Variables[OperatorPartContext.PREFERRED_CUBEMAP_SIDE_INDEX] = RenderConfig.PreferredCubeMapSideIndex;
                context.Effect = _renderer.ScreenQuadCubeMapSideEffect;
            }

            _renderer.SetupBaseEffectParameters(context);
            _renderer.RenderToScreen(image, context);

            _gpuSyncer.Sync(D3D11Device.ImmediateContext);
        }
Exemplo n.º 21
0
        public void SetupBaseEffectParameters(OperatorPartContext context)
        {
//            context.D3DDevice.ImmediateContext.ClearState();
            var effect = context.Effect;

            var v = effect.GetVariableByName("objectToWorldMatrix").AsMatrix();

            if (v != null && v.IsValid)
            {
                v.SetMatrix(context.ObjectTWorld);
                // cynic: hack until all used effects have the objectToWorldMatrix parameter
                v = effect.GetVariableByName("worldToCameraMatrix").AsMatrix();
                v.SetMatrix(context.WorldToCamera);
            }
            else
            {
                v = effect.GetVariableByName("worldToCameraMatrix").AsMatrix();
                v.SetMatrix(context.ObjectTWorld * context.WorldToCamera);
            }

            v = effect.GetVariableByName("cameraToObjectMatrix").AsMatrix();
            if (v != null && v.IsValid)
            {
                var cameraToObject = Matrix.Invert(context.ObjectTWorld * context.WorldToCamera);
                v.SetMatrix(cameraToObject);
            }

            v = effect.GetVariableByName("projMatrix").AsMatrix();
            v.SetMatrix(context.CameraProjection);

            v = effect.GetVariableByName("textureMatrix").AsMatrix();
            if (v != null && v.IsValid)
            {
                v.SetMatrix(context.TextureMatrix);
            }

            var v2 = effect.GetVariableByName("txDiffuse").AsShaderResource();

            v2.SetResource(context.Texture0);
        }
Exemplo n.º 22
0
        private List <ICommand> SetupSingleAnimation(OperatorPart opPart, double keyframeTime)
        {
            var context = new OperatorPartContext()
            {
                Time = (float)keyframeTime
            };
            float currentValue = opPart.Eval(context).Value;

            // this command is needed to restore the original value correctly when undoing this, for doing it it's redundant
            var setValueCommand = new SetFloatValueCommand(opPart, currentValue);

            var compOp            = opPart.Parent.Parent;
            var addCurveOpCommand = new AddOperatorCommand(compOp, CurveID, 100, 100, 100, false);
            var curveOpInstanceId = addCurveOpCommand.AddedInstanceID;
            var addTimeOpCommand  = new AddOperatorCommand(compOp, CurrentTimeID, 100, 100, 100, false);

            var curveMetaOp = MetaManager.Instance.GetMetaOperator(CurveID);
            var timeMetaOp  = MetaManager.Instance.GetMetaOperator(CurrentTimeID);

            var timeToCurve = new MetaConnection(addTimeOpCommand.AddedInstanceID, timeMetaOp.Outputs[0].ID,
                                                 addCurveOpCommand.AddedInstanceID, curveMetaOp.Inputs[0].ID);
            var connectionTimeToCurveCommand = new InsertConnectionCommand(compOp.Definition, timeToCurve, 0);

            var curveToCurrent = new MetaConnection(addCurveOpCommand.AddedInstanceID, curveMetaOp.Outputs[0].ID,
                                                    opPart.Parent.ID, opPart.ID);
            var connectionCurveToCurrentCommand = new InsertConnectionCommand(compOp.Definition, curveToCurrent, 0);

            var addKeyframeCommand = new AddOrUpdateKeyframeCommand(keyframeTime, currentValue, compOp, curveOpInstanceId, curveMetaOp.Inputs[0].ID);

            return(new List <ICommand>()
            {
                setValueCommand,
                addCurveOpCommand,
                addTimeOpCommand,
                connectionTimeToCurveCommand,
                connectionCurveToCurrentCommand,
                addKeyframeCommand
            });
        }
Exemplo n.º 23
0
        public static void SetupConstBufferForCS <T>(OperatorPartContext context, T bufferData, ref Buffer buffer, int slot) where T : struct
        {
            using (var data = new DataStream(Marshal.SizeOf(typeof(T)), true, true))
            {
                data.Write(bufferData);
                data.Position = 0;

                if (buffer == null)
                {
                    var bufferDesc = new BufferDescription
                    {
                        Usage       = ResourceUsage.Default,
                        SizeInBytes = Marshal.SizeOf(typeof(T)),
                        BindFlags   = BindFlags.ConstantBuffer
                    };
                    buffer = new Buffer(context.D3DDevice, data, bufferDesc);
                }
                else
                {
                    context.D3DDevice.ImmediateContext.UpdateSubresource(new DataBox(data.DataPointer, 0, 0), buffer, 0);
                }
                context.D3DDevice.ImmediateContext.ComputeShader.SetConstantBuffer(slot, buffer);
            }
        }
Exemplo n.º 24
0
        public bool SetupEvalCallbackForSelectedTransformOperators(Operator[] selectedOperators, OperatorPartContext context)
        {
            _transformGizmoTargetOp            = null;
            _transformGizmoTargetValueFunction = null;

            if (selectedOperators.Length != 1)
            {
                return(false);
            }

            var op = selectedOperators.First();

            if (op.InternalParts.Count > 0 && op.InternalParts[0].Func is ICameraProvider)
            {
                return(false);
            }

            _translateInputs = FindVec3Inputs(op, new String[] { "Center", "Position", "Translate", "Translation", "Move" });
            _pivotInputs     = FindVec3Inputs(op, "Pivot");
            _rotateInputs    = FindVec3Inputs(op, "Rotate");
            _scaleInputs     = FindVec3Inputs(op, "Scale");

            if (!_translateInputs.Valid)
            {
                return(false);
            }

            _context = context;
            _transformGizmoTargetOp            = op;
            _transformGizmoTargetValueFunction = op.Outputs[0].Func as Utilities.ValueFunction;
            _transformGizmoTargetValueFunction.EvaluatedEvent += GizmoValueFunc_EvaluatedEvent; // SetupContextForRenderingCamToBuffer Evaluation Callback
            _translateXParam.Input = _translateInputs.X;
            _translateYParam.Input = _translateInputs.Y;
            _translateZParam.Input = _translateInputs.Z;
            return(true);
        }
Exemplo n.º 25
0
        public static void SetupContextForRenderingCamToBuffer(OperatorPartContext context, Operator op, DefaultRenderer renderer, Matrix worldToCamera, float nearClipping = 0.01f, float farClipping = 10000)
        {
            context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.DepthStencilView, context.RenderTargetView);
            context.D3DDevice.ImmediateContext.Rasterizer.SetViewport(context.Viewport);

            if (context.DepthStencilView != null)
            {
                context.D3DDevice.ImmediateContext.ClearDepthStencilView(context.DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0);
            }
            context.D3DDevice.ImmediateContext.ClearRenderTargetView(context.RenderTargetView, new Color4(0.4f, 0.4f, 0.4f, 1.0f));
            context.D3DDevice.ImmediateContext.InputAssembler.InputLayout = context.InputLayout;

            if (op == null)
            {
                return;
            }

            ICameraProvider camOp = null;

            if (op.InternalParts.Count > 0)
            {
                camOp = op.InternalParts[0].Func as ICameraProvider;
            }

            if (camOp == null)
            {
                context.WorldToCamera = worldToCamera;
                float aspect = context.Viewport.Width / context.Viewport.Height;
                context.CameraProjection = Matrix.PerspectiveFovLH(3.1415f / 4.0f, aspect, nearClipping, farClipping);
            }
            else
            {
                context.WorldToCamera    = camOp.GetLastWorldToCamera();
                context.CameraProjection = camOp.GetLastCameraToView();
            }
        }
Exemplo n.º 26
0
 public virtual void Render(Mesh mesh, OperatorPartContext context)
 {
     Render(mesh, context, 0);
 }
Exemplo n.º 27
0
 public virtual void SetupEffect(OperatorPartContext context)
 {
     SetupBaseEffectParameters(context);
 }
Exemplo n.º 28
0
 public Vector3 EvaluateOrDefault(OperatorPartContext context, Vector3 fallBack)
 {
     return(Valid ? new Vector3(X.Eval(context).Value, Y.Eval(context).Value, Z.Eval(context).Value)
                  : fallBack);
 }
Exemplo n.º 29
0
        public float RenderFrame()
        {
            try
            {
                if (!_skipExistingFiles || !File.Exists(buildFileName(_currentTime)))
                {
                    D3DDevice.Device.ImmediateContext.ClearDepthStencilView(_renderTargetDepthView,
                                                                            DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0);
                    D3DDevice.Device.ImmediateContext.ClearRenderTargetView(_renderTargetView, new SharpDX.Color4(0, 0, 0, 0));
                    D3DDevice.Device.ImmediateContext.InputAssembler.InputLayout = _renderer.SceneDefaultInputLayout;

                    foreach (var opPartFunction in _timeAccessorOpPartFunctions)
                    {
                        opPartFunction.OperatorPart.EmitChangedEvent();
                    }

                    var context = new OperatorPartContext(_defaultContext, (float)_currentTime)
                    {
                        D3DDevice         = D3DDevice.Device,
                        Effect            = _renderer.SceneDefaultEffect,
                        InputLayout       = _renderer.SceneDefaultInputLayout,
                        RenderTargetView  = _renderTargetView,
                        DepthStencilView  = _renderTargetDepthView,
                        DepthStencilState = _renderer.DefaultDepthStencilState,
                        BlendState        = _renderer.DefaultBlendState,
                        BlendFactor       = _renderer.DefaultBlendFactor,
                        RasterizerState   = _renderer.DefaultRasterizerState,
                        SamplerState      = _renderer.DefaultSamplerState,
                        Viewport          = _viewport,
                        Texture0          = _texture
                    };

                    if (_outputOpPart.Parent.FunctionType == FunctionType.Scene)
                    {
                        _outputOpPart.Eval(context);
                        _gpuSyncer.Sync(D3DDevice.Device.ImmediateContext);
                    }
                    else if (_outputOpPart.Type == FunctionType.Image)
                    {
                        var image = _outputOpPart.Eval(new OperatorPartContext(context)).Image;
                        if (image != null)
                        {
                            _renderer.SetupBaseEffectParameters(context);
                            _renderer.RenderToScreen(image, context);
                        }
                        _gpuSyncer.Sync(D3DDevice.Device.ImmediateContext);
                    }

                    var format = ImageFileFormat.Png;
                    if (_fileExtension == "bmp")
                    {
                        format = ImageFileFormat.Bmp;
                    }
                    else if (_fileExtension == "jpg")
                    {
                        format = ImageFileFormat.Jpg;
                    }
                    else if (_fileExtension == "dds")
                    {
                        format = ImageFileFormat.Dds;
                    }
                    Texture2D.ToFile(D3DDevice.Device.ImmediateContext, _renderTargetResource.Texture, format, buildFileName(_currentTime));
                }
                _currentTime += _frameTime;
                double progress = (_currentTime - _startTime) / (_endTime - _startTime);
                return((float)progress);
            }
            catch (Exception ex)
            {
                Logger.Error("Error rendering image sequence at {0}: {1}", _currentTime, ex);
            }
            return(0);
        }
Exemplo n.º 30
0
        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();
        }