예제 #1
0
        /// <summary>
        ///
        /// </summary>
        private void EndD3D(bool dispose)
        {
            DetachRenderables();
            if (surfaceD3D == null)
            {
                return;
            }

            surfaceD3D.IsFrontBufferAvailableChanged -= OnIsFrontBufferAvailableChanged;
            Source = null;
            RenderContext?.Dispose();
            Disposer.RemoveAndDispose(ref deferredRenderer);
            Disposer.RemoveAndDispose(ref surfaceD3D);
            Disposer.RemoveAndDispose(ref colorBufferView);
            Disposer.RemoveAndDispose(ref depthStencilBufferView);
            Disposer.RemoveAndDispose(ref colorBuffer);
            Disposer.RemoveAndDispose(ref depthStencilBuffer);
#if MSAA
            Disposer.RemoveAndDispose(ref renderTargetNMS);
#endif
            if (dispose && defaultEffectsManager != null)
            {
                (defaultEffectsManager as IDisposable)?.Dispose();
                if (effectsManager == defaultEffectsManager)
                {
                    effectsManager = null;
                }
                defaultEffectsManager = null;
            }
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        private bool StartD3D()
        {
            if (!loaded || EffectsManager == null || RenderTechniquesManager == null)
            {
                if (EffectsManager == null)
                {
                    EffectsManager = defaultEffectsManager = new DefaultEffectsManager(new DefaultRenderTechniquesManager());
                }
                //RenderTechniquesManager = DefaultRenderTechniquesManagerObj.Value;
                //EffectsManager = DefaultEffectsManagerObj.Value;
                return(false); // StardD3D() is called from DP changed handler
            }

            surfaceD3D = new DX11ImageSource(EffectsManager.AdapterIndex);
            surfaceD3D.IsFrontBufferAvailableChanged += OnIsFrontBufferAvailableChanged;
            device           = EffectsManager.Device;
            deferredRenderer = new DeferredRenderer();
            renderRenderable.DeferredRenderer = deferredRenderer;

            CreateAndBindTargets();
            SetDefaultRenderTargets();
            Source = surfaceD3D;
            InvalidateRender();
            return(true);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="LineMaterialVariable"/> class.
 /// </summary>
 /// <param name="manager">The manager.</param>
 /// <param name="technique">The technique.</param>
 /// <param name="materialCore">The material core.</param>
 /// <param name="linePassName">Name of the line pass.</param>
 /// <param name="shadowPassName">Name of the shadow pass.</param>
 /// <param name="depthPassName">Name of the depth pass</param>
 public LineArrowMaterialVariable(IEffectsManager manager, IRenderTechnique technique, LineArrowHeadMaterialCore materialCore,
                                  string linePassName  = DefaultPassNames.Default, string shadowPassName = DefaultPassNames.ShadowPass,
                                  string depthPassName = DefaultPassNames.DepthPrepass)
     : base(manager, technique, materialCore, linePassName, shadowPassName, depthPassName)
 {
     this.material = materialCore;
 }
예제 #4
0
 private bool Initialize(IEffectsManager manager)
 {
     RemoveAndDispose(ref duplicationResource);
     duplicationResource = Collect(new DuplicationResource(manager.Device));
     frameProcessor      = Collect(new FrameProcessing());
     return(true);
 }
 /// <summary>
 ///
 /// </summary>
 private void EndD3D(bool dispose)
 {
     DetachRenderables();
     renderThread.DestoryRenderThread();
     this.Child = null;
     Disposer.RemoveAndDispose(ref renderContext);
     Disposer.RemoveAndDispose(ref deferredContext);
     Disposer.RemoveAndDispose(ref deferredRenderer);
     Disposer.RemoveAndDispose(ref surfaceD3D);
     Disposer.RemoveAndDispose(ref colorBufferView);
     Disposer.RemoveAndDispose(ref colorBuffer);
     Disposer.RemoveAndDispose(ref backBuffer);
     Disposer.RemoveAndDispose(ref depthStencilBufferView);
     Disposer.RemoveAndDispose(ref depthStencilBuffer);
     Disposer.RemoveAndDispose(ref swapChain);
     if (dispose && defaultEffectsManager != null)
     {
         (defaultEffectsManager as IDisposable)?.Dispose();
         if (effectsManager == defaultEffectsManager)
         {
             effectsManager = null;
         }
         defaultEffectsManager = null;
     }
 }
            public GenericMaterialVariable(IEffectsManager manager, IRenderTechnique technique,
                                           GenericMaterialCore materialCore, ConstantBufferDescription constantBufferDescription,
                                           string materialShaderPassName = DefaultPassNames.Default,
                                           string shadowShaderPassName   = DefaultPassNames.ShadowPass,
                                           string wireframePassName      = DefaultPassNames.Wireframe,
                                           string depthPassName          = DefaultPassNames.DepthPrepass)
                : base(manager, technique, constantBufferDescription, materialCore)
            {
                this.materialCore = materialCore;
                materialPass      = technique[materialShaderPassName];
                shadowPass        = technique[shadowShaderPassName];
                wireframePass     = technique[wireframePassName];
                depthPass         = technique[depthPassName];
                shaderResources   = new KeyValuePair <int, ShaderResourceViewProxy> [materialPass.PixelShader.ShaderResourceViewMapping.Count];

                for (var i = 0; i < materialPass.PixelShader.ShaderResourceViewMapping.Count; ++i)
                {
                    var mapping = materialPass.PixelShader.ShaderResourceViewMapping.Mappings[i];
                    resourceIdxDict.Add(mapping.Value.Description.Name, i);
                    shaderResources[i] = new KeyValuePair <int, ShaderResourceViewProxy>(mapping.Key, null);
                }

                samplerResources = new KeyValuePair <int, SamplerStateProxy> [materialPass.PixelShader.SamplerMapping.Count];

                for (var i = 0; i < materialPass.PixelShader.SamplerMapping.Count; ++i)
                {
                    var mapping = materialPass.PixelShader.SamplerMapping.Mappings[i];
                    samplerIdxDict.Add(mapping.Value.Name, i);
                    samplerResources[i] = new KeyValuePair <int, SamplerStateProxy>(mapping.Key, null);
                }


                materialCore.UpdatingResource += MaterialCore_UpdatingResource;
            }
        /// <summary>
        ///
        /// </summary>
        private bool StartD3D()
        {
            if (!loaded || EffectsManager == null || RenderTechniquesManager == null)
            {
                if (EffectsManager == null)
                {
                    EffectsManager = defaultEffectsManager = new DefaultEffectsManager(new DefaultRenderTechniquesManager());
                }
                //RenderTechniquesManager = DefaultRenderTechniquesManagerObj.Value;
                //EffectsManager = DefaultEffectsManagerObj.Value;
                return(false); // StardD3D() is called from DP changed handler
            }
            this.IsHitTestVisible = false;
            surfaceD3D            = new RenderControl();
            Child            = surfaceD3D;
            device           = EffectsManager.Device;
            deferredRenderer = new DeferredRenderer();
            renderRenderable.DeferredRenderer = deferredRenderer;

            CreateAndBindTargets();
            SetDefaultRenderTargets();

            //Source = surfaceD3D;
            InvalidateRender();
            return(true);
        }
예제 #8
0
            /// <summary>
            /// Initializes a new instance of the <see cref="PhongMaterialVariables"/> class.
            /// </summary>
            /// <param name="manager">The manager.</param>
            /// <param name="technique">The technique.</param>
            /// <param name="materialCore">The material core.</param>
            /// <param name="materialPassName">Name of the material pass.</param>
            /// <param name="wireframePassName">Name of the wireframe pass.</param>
            /// <param name="materialOITPassName">Name of the material oit pass.</param>
            /// <param name="wireframeOITPassName">Name of the wireframe oit pass.</param>
            /// <param name="shadowPassName">Name of the shadow pass.</param>
            /// <param name="tessellationPassName">Name of the tessellation pass.</param>
            /// <param name="tessellationOITPassName">Name of the tessellation oit pass.</param>
            /// <param name="depthPassName">Name of the depth pass</param>
            public PhongMaterialVariables(IEffectsManager manager, IRenderTechnique technique, PhongMaterialCore materialCore,
                                          string materialPassName        = DefaultPassNames.Default, string wireframePassName    = DefaultPassNames.Wireframe,
                                          string materialOITPassName     = DefaultPassNames.OITPass, string wireframeOITPassName = DefaultPassNames.WireframeOITPass,
                                          string shadowPassName          = DefaultPassNames.ShadowPass,
                                          string tessellationPassName    = DefaultPassNames.MeshTriTessellation,
                                          string tessellationOITPassName = DefaultPassNames.MeshTriTessellationOIT,
                                          string depthPassName           = DefaultPassNames.DepthPrepass)
                : base(manager, technique, DefaultMeshConstantBufferDesc, materialCore)
            {
                this.material      = materialCore;
                texDiffuseSlot     = texAlphaSlot = texDisplaceSlot = texNormalSlot = -1;
                samplerDiffuseSlot = samplerDisplaceSlot = samplerShadowSlot = -1;
                textureManager     = manager.MaterialTextureManager;
                statePoolManager   = manager.StateManager;

                MaterialPass        = technique[materialPassName];
                MaterialOITPass     = technique[materialOITPassName];
                ShadowPass          = technique[shadowPassName];
                WireframePass       = technique[wireframePassName];
                WireframeOITPass    = technique[wireframeOITPassName];
                TessellationPass    = technique[tessellationPassName];
                TessellationOITPass = technique[tessellationOITPassName];
                DepthPass           = technique[depthPassName];
                UpdateMappings(MaterialPass);
                EnableTessellation  = materialCore.EnableTessellation;
                currentMaterialPass = EnableTessellation ? TessellationPass : MaterialPass;
                currentOITPass      = EnableTessellation ? TessellationOITPass : MaterialOITPass;
            }
 public GenericPointMaterialVariable(IEffectsManager manager, IRenderTechnique technique,
                                     GenericMaterialCore materialCore, ConstantBufferDescription constantBufferDescription,
                                     string materialShaderPassName = DefaultPassNames.Default,
                                     string shadowShaderPassName   = DefaultPassNames.ShadowPass)
     : base(manager, technique, materialCore, constantBufferDescription, materialShaderPassName, shadowShaderPassName, "")
 {
 }
예제 #10
0
        public EffectManagerTests()
        {
            _effectsManager = new EffectsManager(_deviceManager.Object);

            _deviceManager.Setup(x => x.KeyboardDevice).Returns(_keyboardEffect.Object);
            _deviceManager.Setup(x => x.MouseDevice).Returns(_mouseEffect.Object);
        }
 public CustomPointMaterialVariable(IEffectsManager manager, IRenderTechnique technique, PointMaterialCore materialCore,
                                    string pointPassName = "CustomPointPass")
     : base(manager, technique, materialCore, pointPassName)
 {
     customConstantBuffer = new ConstantBufferComponent(new ConstantBufferDescription("CustomBuffer", Marshal.SizeOf <Vector4>()));
     customConstantBuffer.Attach(technique);
 }
예제 #12
0
 public override MaterialVariable CreateMaterialVariables(IEffectsManager manager, IRenderTechnique technique)
 {
     return(new VolumeMaterialVariable <T>(manager, technique, this, DefaultPassName)
     {
         OnCreateTexture = (material, effectsManager) => { return OnCreateTexture(effectsManager); }
     });
 }
예제 #13
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="passDescription"></param>
            /// <param name="manager"></param>
            public ShaderPass(ShaderPassDescription passDescription, IEffectsManager manager)
            {
                Name           = passDescription.Name;
                effectsManager = manager;
                if (passDescription.ShaderList != null)
                {
                    foreach (var shader in passDescription.ShaderList)
                    {
                        var s = manager.ShaderManager.RegisterShader(shader);
                        switch (shader.ShaderType)
                        {
                        case ShaderStage.Vertex:
                            vertexShader = s as VertexShader;
                            break;

                        case ShaderStage.Domain:
                            domainShader = s as DomainShader;
                            break;

                        case ShaderStage.Hull:
                            hullShader = s as HullShader;
                            break;

                        case ShaderStage.Geometry:
                            geometryShader = s as GeometryShader;
                            break;

                        case ShaderStage.Pixel:
                            pixelShader = s as PixelShader;
                            break;

                        case ShaderStage.Compute:
                            computeShader = s as ComputeShader;
                            break;
                        }
                    }
                }

                blendState = passDescription.BlendStateDescription != null?
                             manager.StateManager.Register((BlendStateDescription)passDescription.BlendStateDescription) : BlendStateProxy.Empty;

                depthStencilState = passDescription.DepthStencilStateDescription != null?
                                    manager.StateManager.Register((DepthStencilStateDescription)passDescription.DepthStencilStateDescription) : DepthStencilStateProxy.Empty;

                rasterState = passDescription.RasterStateDescription != null?
                              manager.StateManager.Register((RasterizerStateDescription)passDescription.RasterStateDescription) : RasterizerStateProxy.Empty;

                BlendFactor = passDescription.BlendFactor;

                StencilRef = passDescription.StencilRef;

                SampleMask = passDescription.SampleMask;

                Topology = passDescription.Topology;
                if (passDescription.InputLayoutDescription != null)
                {
                    layout = manager.ShaderManager.RegisterInputLayout(passDescription.InputLayoutDescription);
                }
            }
예제 #14
0
 /// <summary>
 /// To override Attach routine, please override this.
 /// </summary>
 /// <param name="effectsManager"></param>
 /// <returns>
 /// Return true if attached
 /// </returns>
 protected override bool OnAttach(IEffectsManager effectsManager)
 {
     base.OnAttach(effectsManager);
     shadowCore        = RenderCore as ShadowMapCore;
     this.Invalidated += Host_SceneGraphUpdated;
     sceneChanged      = true;
     return(true);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MaterialVariable"/> class.
 /// </summary>
 /// <param name="manager">The manager.</param>
 /// <param name="technique">The technique.</param>
 /// <param name="meshConstantBufferDesc">The Constant Buffer description</param>
 public MaterialVariable(IEffectsManager manager, IRenderTechnique technique, ConstantBufferDescription meshConstantBufferDesc)
 {
     Technique = technique;
     if (meshConstantBufferDesc != null)
     {
         ConstantBuffer = manager.ConstantBufferPool.Register(meshConstantBufferDesc);
     }
 }
예제 #16
0
 public SettingsManager(IRage rage, IElsSettingsManager elsSettingsManager, string fileName, IEffectsManager effectsManager, IColorManager colorManager)
 {
     _rage               = rage;
     _fileName           = fileName;
     _effectsManager     = effectsManager;
     _colorManager       = colorManager;
     _elsSettingsManager = elsSettingsManager;
 }
예제 #17
0
 protected override bool OnAttach(IEffectsManager effectsManager)
 {
     base.OnAttach(effectsManager);
     InstanceBuffer.Initialize();
     InstanceBuffer.Elements     = Instances;
     particleCore.InstanceBuffer = InstanceBuffer;
     return(true);
 }
예제 #18
0
 public VehicleListener(IRage rage, ISettingsManager settingsManager, IEffectsManager effectsManager, ILogger log)
 {
     _rage            = rage;
     _settingsManager = settingsManager;
     _effectsManager  = effectsManager;
     _log             = log;
     _oldPlayerState  = PlayerState;
 }
예제 #19
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LineMaterialVariable"/> class.
 /// </summary>
 /// <param name="manager">The manager.</param>
 /// <param name="technique">The technique.</param>
 /// <param name="materialCore">The material core.</param>
 /// <param name="linePassName">Name of the line pass.</param>
 /// <param name="shadowPassName">Name of the shadow pass.</param>
 public LineMaterialVariable(IEffectsManager manager, IRenderTechnique technique, LineMaterialCore materialCore,
                             string linePassName = DefaultPassNames.Default, string shadowPassName = DefaultPassNames.ShadowPass)
     : base(manager, technique, DefaultPointLineConstantBufferDesc, materialCore)
 {
     LinePass      = technique[linePassName];
     ShadowPass    = technique[shadowPassName];
     this.material = materialCore;
 }
예제 #20
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="disposeManagedResources"></param>
 protected override void OnDispose(bool disposeManagedResources)
 {
     passDict.Clear();
     passList.Clear();
     EffectsManager = null;
     Layout         = null;
     base.OnDispose(disposeManagedResources);
 }
예제 #21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PointMaterialVariable"/> class.
 /// </summary>
 /// <param name="manager">The manager.</param>
 /// <param name="technique">The technique.</param>
 /// <param name="materialCore">The material core.</param>
 /// <param name="defaultPassName">Default pass name</param>
 public PointMaterialVariable(IEffectsManager manager, IRenderTechnique technique, PointMaterialCore materialCore,
                              string defaultPassName = DefaultPassNames.Default)
     : base(manager, technique, DefaultPointLineConstantBufferDesc, materialCore)
 {
     PointPass     = technique[defaultPassName];
     ShadowPass    = technique[DefaultPassNames.ShadowPass];
     DepthPass     = technique[DefaultPassNames.DepthPrepass];
     this.material = materialCore;
 }
예제 #22
0
 public MainViewModel(IWindowManager windowManager, IEffectsManager effectsManager)
 {
     this.windowManager            = windowManager;
     this.effectsManager           = effectsManager;
     this.modelViewerViewModel     = new ModelViewerViewModel(windowManager, effectsManager);
     this.DoReplacementAdditive    = true;
     this.SelectedAlgorithmTargets = new ObservableCollection <IAlgorithmTarget>();
     this.algorithms.Add(new TestAlgorithm());
 }
 protected override bool OnAttach(IEffectsManager effectsManager)
 {
     // --- attach
     if (!base.OnAttach(effectsManager))
     {
         return(false);
     }
     instanceParamBuffer.Initialize();
     return(true);
 }
예제 #24
0
        /// <summary>
        /// Exports the technique.
        /// </summary>
        /// <param name="manager">The manager.</param>
        /// <param name="techniqueName">Name of the technique.</param>
        /// <param name="writer">The writer.</param>
        public static void ExportTechnique(this IEffectsManager manager, string techniqueName, XmlWriter writer)
        {
            var ser        = new DataContractSerializer(typeof(List <TechniqueDescription>));
            var technique  = manager[techniqueName].Description;
            var techniques = new List <TechniqueDescription>();

            techniques.Add(technique);
            ser.WriteObject(writer, techniques);
            writer.Flush();
        }
 public VolumeMaterialVariable(IEffectsManager manager, IRenderTechnique technique, VolumeTextureMaterialCoreBase <T> material,
                               string volumePassName = DefaultPassNames.Default)
     : base(manager, technique, DefaultVolumeConstantBufferDesc, material)
 {
     this.material = material;
     volumePass    = technique[volumePassName];
     texSlot       = volumePass.PixelShader.ShaderResourceViewMapping.TryGetBindSlot(DefaultBufferNames.VolumeTB);
     gradientSlot  = volumePass.PixelShader.ShaderResourceViewMapping.TryGetBindSlot(DefaultBufferNames.ColorStripe1DXTB);
     samplerSlot   = volumePass.PixelShader.SamplerMapping.TryGetBindSlot(DefaultSamplerStateNames.VolumeSampler);
 }
예제 #26
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PostEffectMeshOutlineBlurCore"/> class.
 /// </summary>
 public PostEffectBlurCore(ShaderPass blurVerticalPass, ShaderPass blurHorizontalPass, int textureSlot, int samplerSlot,
                           SamplerStateDescription sampler, IEffectsManager manager)
 {
     screenBlurPassVertical   = blurVerticalPass;
     screenBlurPassHorizontal = blurHorizontalPass;
     this.textureSlot         = textureSlot;
     this.samplerSlot         = samplerSlot;
     this.sampler             = manager.StateManager.Register(sampler);
     modelCB = new ConstantBufferComponent(new ConstantBufferDescription(DefaultBufferNames.BorderEffectCB, BorderEffectStruct.SizeInBytes));
 }
예제 #27
0
            protected override bool OnAttach(IEffectsManager effectsManager)
            {
                RenderCore.Attach(EffectTechnique);
                var screenSpaceCore = RenderCore as ScreenSpacedMeshRenderCore;

                screenSpaceCore.RelativeScreenLocationX = RelativeScreenLocationX;
                screenSpaceCore.RelativeScreenLocationY = RelativeScreenLocationY;
                screenSpaceCore.SizeScale = SizeScale;
                return(base.OnAttach(effectsManager));
            }
예제 #28
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="passDescription"></param>
        /// <param name="manager"></param>
        public ShaderPass(ShaderPassDescription passDescription, IEffectsManager manager)
        {
            Name = passDescription.Name;

            if (passDescription.ShaderList != null)
            {
                foreach (var shader in passDescription.ShaderList)
                {
                    var s = manager.ShaderManager.RegisterShader(shader);
                    switch (shader.ShaderType)
                    {
                    case ShaderStage.Vertex:
                        VertexShader = s as VertexShader;
                        break;

                    case ShaderStage.Domain:
                        DomainShader = s as DomainShader;
                        break;

                    case ShaderStage.Hull:
                        HullShader = s as HullShader;
                        break;

                    case ShaderStage.Geometry:
                        GeometryShader = s as GeometryShader;
                        break;

                    case ShaderStage.Pixel:
                        PixelShader = s as PixelShader;
                        break;

                    case ShaderStage.Compute:
                        ComputeShader = s as ComputeShader;
                        break;
                    }
                }
            }

            BlendState = passDescription.BlendStateDescription != null?
                         Collect(manager.StateManager.Register((BlendStateDescription)passDescription.BlendStateDescription)) : BlendStateProxy.Empty;

            DepthStencilState = passDescription.DepthStencilStateDescription != null?
                                Collect(manager.StateManager.Register((DepthStencilStateDescription)passDescription.DepthStencilStateDescription)) : DepthStencilStateProxy.Empty;

            RasterState = passDescription.RasterStateDescription != null?
                          Collect(manager.StateManager.Register((RasterizerStateDescription)passDescription.RasterStateDescription)) : RasterizerStateProxy.Empty;

            BlendFactor = passDescription.BlendFactor;

            StencilRef = passDescription.StencilRef;

            SampleMask = passDescription.SampleMask;

            Topology = passDescription.Topology;
        }
예제 #29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PostEffectMeshOutlineBlurCore"/> class.
 /// </summary>
 public PostEffectBlurCore(global::SharpDX.DXGI.Format textureFormat,
                           ShaderPass blurVerticalPass, ShaderPass blurHorizontalPass, int textureSlot, int samplerSlot,
                           SamplerStateDescription sampler, IEffectsManager manager)
 {
     screenBlurPassVertical   = blurVerticalPass;
     screenBlurPassHorizontal = blurHorizontalPass;
     this.textureSlot         = textureSlot;
     this.samplerSlot         = samplerSlot;
     this.sampler             = Collect(manager.StateManager.Register(sampler));
     texture2DDesc.Format     = targetResourceViewDesc.Format = renderTargetViewDesc.Format = textureFormat;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="BillboardMaterialVariable"/> class.
 /// </summary>
 /// <param name="manager">The manager.</param>
 /// <param name="technique">The technique.</param>
 /// <param name="materialCore">The core.</param>
 /// <param name="billboardPassName">Name of the billboard pass.</param>
 /// <param name="billboardOITPassName">Name of the billboard oit pass.</param>
 public BillboardMaterialVariable(IEffectsManager manager, IRenderTechnique technique, BillboardMaterialCore materialCore,
                                  string billboardPassName = DefaultPassNames.Default, string billboardOITPassName = DefaultPassNames.OITPass)
     : base(manager, technique, DefaultPointLineConstantBufferDesc, materialCore)
 {
     BillboardPass      = technique[billboardPassName];
     BillboardOITPass   = technique[billboardOITPassName];
     this.materialCore  = materialCore;
     shaderTextureSlot  = BillboardPass.PixelShader.ShaderResourceViewMapping.TryGetBindSlot(ShaderTextureName);
     textureSamplerSlot = BillboardPass.PixelShader.SamplerMapping.TryGetBindSlot(ShaderTextureSamplerName);
     textureSampler     = Collect(EffectsManager.StateManager.Register(materialCore.SamplerDescription));
 }