/// <summary>
 /// <see cref="IEffectMaterialVariables.BindMaterialTextures(DeviceContext, IShaderPass)"/>
 /// </summary>
 /// <param name="context"></param>
 /// <param name="shaderPass"></param>
 /// <returns></returns>
 public bool BindMaterialTextures(DeviceContext context, IShaderPass shaderPass)
 {
     if (material == null)
     {
         return(false);
     }
     UpdateMappings(shaderPass);
     if (HasTextures)
     {
         for (int i = 0; i < shaderPass.Shaders.Count; ++i)
         {
             var shader = shaderPass.Shaders[i];
             if (shader.IsNULL || !EnumHelper.HasFlag(Constants.CanBindTextureStages, shader.ShaderType))
             {
                 continue;
             }
             OnBindMaterialTextures(context, shader);
         }
     }
     if (RenderShadowMap)
     {
         shaderPass.GetShader(ShaderStage.Pixel).BindSampler(context, SamplerBindingMap[ShaderStage.Pixel.ToIndex()][NUMSAMPLERS - 1], SamplerResources[NUMSAMPLERS - 1]);
     }
     return(true);
 }
Exemplo n.º 2
0
        /// <summary>
        /// Called when [attach].
        /// </summary>
        /// <param name="technique">The technique.</param>
        /// <returns></returns>
        protected override bool OnAttach(IRenderTechnique technique)
        {
            if (base.OnAttach(technique))
            {
                VertexLayout = technique.Layout;
                updatePass   = technique[DefaultParticlePassNames.Update];
                insertPass   = technique[DefaultParticlePassNames.Insert];
                renderPass   = technique[DefaultParticlePassNames.Default];
                #region Get binding slots
                currentStateSlot = updatePass.GetShader(ShaderStage.Compute).UnorderedAccessViewMapping.TryGetBindSlot(CurrentSimStateUAVBufferName);
                newStateSlot     = updatePass.GetShader(ShaderStage.Compute).UnorderedAccessViewMapping.TryGetBindSlot(NewSimStateUAVBufferName);

                renderStateSlot = renderPass.GetShader(ShaderStage.Vertex).ShaderResourceViewMapping.TryGetBindSlot(SimStateBufferName);
                textureSlot     = renderPass.GetShader(ShaderStage.Pixel).ShaderResourceViewMapping.TryGetBindSlot(ShaderTextureBufferName);
                samplerSlot     = renderPass.GetShader(ShaderStage.Pixel).SamplerMapping.TryGetBindSlot(ShaderTextureSamplerName);
                #endregion
                perFrameCB = technique.ConstantBufferPool.Register(DefaultBufferNames.ParticleFrameCB, ParticlePerFrame.SizeInBytes);
                insertCB   = technique.ConstantBufferPool.Register(DefaultBufferNames.ParticleCreateParameters, ParticleInsertParameters.SizeInBytes);

                isBlendChanged = true;
                if (isInitialParticleChanged)
                {
                    OnInitialParticleChanged(ParticleCount);
                }
                textureSampler = Collect(technique.EffectsManager.StateManager.Register(SamplerDescription));
                return(true);
            }
            else
            {
                return(false);
            }
        }
        private void UpdateMappings(IShaderPass shaderPass)
        {
            if (currentPass == shaderPass)
            {
                return;
            }
            currentPass = shaderPass;
            for (int i = 0; i < shaderPass.Shaders.Count; ++i)
            {
                var shader = shaderPass.Shaders[i];
                if (shader.IsNULL || !EnumHelper.HasFlag(Constants.CanBindTextureStages, shader.ShaderType))
                {
                    continue;
                }
                int idx = shaderPass.Shaders[i].ShaderType.ToIndex();
                TextureBindingMap[idx][DiffuseIdx]  = shader.ShaderResourceViewMapping.TryGetBindSlot(ShaderDiffuseTexName);
                TextureBindingMap[idx][AlphaIdx]    = shader.ShaderResourceViewMapping.TryGetBindSlot(ShaderAlphaTexName);
                TextureBindingMap[idx][NormalIdx]   = shader.ShaderResourceViewMapping.TryGetBindSlot(ShaderNormalTexName);
                TextureBindingMap[idx][DisplaceIdx] = shader.ShaderResourceViewMapping.TryGetBindSlot(ShaderDisplaceTexName);

                SamplerBindingMap[idx][DiffuseIdx]  = shader.SamplerMapping.TryGetBindSlot(ShaderSamplerDiffuseTexName);
                SamplerBindingMap[idx][AlphaIdx]    = shader.SamplerMapping.TryGetBindSlot(ShaderSamplerAlphaTexName);
                SamplerBindingMap[idx][NormalIdx]   = shader.SamplerMapping.TryGetBindSlot(ShaderSamplerNormalTexName);
                SamplerBindingMap[idx][DisplaceIdx] = shader.SamplerMapping.TryGetBindSlot(ShaderSamplerDisplaceTexName);
                SamplerBindingMap[idx][ShadowIdx]   = shader.SamplerMapping.TryGetBindSlot(ShaderSamplerShadowMapName);
            }
        }
Exemplo n.º 4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="disposeManagedResources"></param>
 protected override void OnDispose(bool disposeManagedResources)
 {
     this.Material        = null;
     TextureResources     = null;
     SamplerResources     = null;
     TextureBindingMap    = null;
     SamplerBindingMap    = null;
     OnInvalidateRenderer = null;
     currentPass          = null;
     base.OnDispose(disposeManagedResources);
 }
Exemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PostEffectMeshOutlineBlurCore"/> class.
 /// </summary>
 public PostEffectBlurCore(global::SharpDX.DXGI.Format textureFormat,
                           IShaderPass blurVerticalPass, IShaderPass 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;
 }
Exemplo n.º 6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="technique"></param>
 /// <returns></returns>
 protected override bool OnAttach(IRenderTechnique technique)
 {
     if (base.OnAttach(technique))
     {
         DefaultShaderPass = technique[DefaultShaderPassName];
         ShadowPass        = technique[DefaultShadowPassName];
         this.VertexLayout = technique.Layout;
         CreateRasterState(rasterDescription, true);
         return(true);
     }
     return(false);
 }
Exemplo n.º 7
0
 protected override bool OnAttach(IRenderTechnique technique)
 {
     if (base.OnAttach(technique))
     {
         clipParamCB        = technique.ConstantBufferPool.Register(GetClipParamsCBDescription());
         drawBackfacePass   = technique[DefaultPassNames.Backface];
         drawScreenQuadPass = technique[DefaultPassNames.ScreenQuad];
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 8
0
 /// <summary>
 /// Called when [attach].
 /// </summary>
 /// <param name="technique">The technique.</param>
 /// <returns></returns>
 protected override bool OnAttach(IRenderTechnique technique)
 {
     if (base.OnAttach(technique))
     {
         DefaultShaderPass = technique.EffectsManager[DefaultRenderTechniqueNames.ScreenDuplication][DefaultPassNames.Default];
         CursorShaderPass  = technique.EffectsManager[DefaultRenderTechniqueNames.ScreenDuplication][DefaultPassNames.ScreenQuad];
         textureBindSlot   = DefaultShaderPass.GetShader(ShaderStage.Pixel).ShaderResourceViewMapping.TryGetBindSlot(DefaultBufferNames.DiffuseMapTB);
         samplerBindSlot   = DefaultShaderPass.GetShader(ShaderStage.Pixel).SamplerMapping.TryGetBindSlot(DefaultSamplerStateNames.DiffuseMapSampler);
         textureSampler    = Collect(technique.EffectsManager.StateManager.Register(DefaultSamplers.ScreenDupSampler));
         return(Initialize(technique.EffectsManager));
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 9
0
 protected override bool OnAttach(IRenderTechnique technique)
 {
     if (base.OnAttach(technique))
     {
         screenQuadPass     = technique.GetPass(DefaultPassNames.ScreenQuad);
         screenQuadCopy     = technique.GetPass(DefaultPassNames.ScreenQuadCopy);
         blurPassVertical   = technique.GetPass(DefaultPassNames.EffectBlurVertical);
         blurPassHorizontal = technique.GetPass(DefaultPassNames.EffectBlurHorizontal);
         screenOutlinePass  = technique.GetPass(DefaultPassNames.MeshOutline);
         textureSlot        = screenOutlinePass.GetShader(ShaderStage.Pixel).ShaderResourceViewMapping.TryGetBindSlot(DefaultBufferNames.DiffuseMapTB);
         samplerSlot        = screenOutlinePass.GetShader(ShaderStage.Pixel).SamplerMapping.TryGetBindSlot(DefaultSamplerStateNames.DiffuseMapSampler);
         sampler            = Collect(technique.EffectsManager.StateManager.Register(DefaultSamplers.LinearSamplerClampAni4));
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 10
0
 protected override void OnDefaultPassChanged(IShaderPass pass)
 {
     base.OnDefaultPassChanged(pass);
     shadowMapSlot = pass.GetShader(ShaderStage.Pixel).ShaderResourceViewMapping.TryGetBindSlot(ShaderShadowMapTextureName);
 }
Exemplo n.º 11
0
 /// <summary>
 /// Called when [attach].
 /// </summary>
 /// <param name="technique">The technique.</param>
 /// <returns></returns>
 protected override bool OnAttach(IRenderTechnique technique)
 {
     outlineShaderPass = technique[OutlinePassName];
     return(base.OnAttach(technique));
 }
Exemplo n.º 12
0
 protected override void OnDefaultPassChanged(IShaderPass pass)
 {
     base.OnDefaultPassChanged(pass);
     ColorTextureSlot        = pass.GetShader(ShaderStage.Pixel).ShaderResourceViewMapping.TryGetBindSlot(CustomShaderNames.TexData);
     ColorTextureSamplerSlot = pass.GetShader(ShaderStage.Pixel).SamplerMapping.TryGetBindSlot(CustomShaderNames.TexDataSampler);
 }
Exemplo n.º 13
0
 /// <summary>
 /// Render function for custom shader pass. Used to do special effects
 /// </summary>
 protected virtual void OnRenderCustom(IRenderContext context, DeviceContextProxy deviceContext, IShaderPass shaderPass)
 {
 }
Exemplo n.º 14
0
 /// <summary>
 /// Called when [default pass changed].
 /// </summary>
 /// <param name="pass">The pass.</param>
 protected override void OnDefaultPassChanged(IShaderPass pass)
 {
     cubeTextureSlot    = pass.GetShader(ShaderStage.Pixel).ShaderResourceViewMapping.TryGetBindSlot(ShaderCubeTextureName);
     textureSamplerSlot = pass.GetShader(ShaderStage.Pixel).SamplerMapping.TryGetBindSlot(ShaderCubeTextureSamplerName);
 }
Exemplo n.º 15
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="pass"></param>
 protected virtual void OnDefaultPassChanged(IShaderPass pass)
 {
 }
Exemplo n.º 16
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="context"></param>
 /// <param name="shader"></param>
 /// <returns></returns>
 public bool BindMaterialTextures(DeviceContext context, IShaderPass shader)
 {
     return(MaterialVariables.BindMaterialTextures(context, shader));
 }
Exemplo n.º 17
0
 protected override void OnRenderCustom(IRenderContext context, DeviceContextProxy deviceContext, IShaderPass shaderPass)
 {
     OnDraw(deviceContext, InstanceBuffer);
 }
Exemplo n.º 18
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="pass"></param>
 protected virtual void OnShadowPassChanged(IShaderPass pass)
 {
 }