Exemple #1
0
 public void Draw(IDeviceContextHolder contextHolder, int indices, SpecialRenderMode mode)
 {
     contextHolder.DeviceContext.InputAssembler.InputLayout = _bonesMode ? _effect.LayoutPNTGW4B : _effect.LayoutPNTG;
     GetTechnique(mode).DrawAllPasses(contextHolder.DeviceContext, indices);
     contextHolder.DeviceContext.OutputMerger.BlendState        = null;
     contextHolder.DeviceContext.OutputMerger.DepthStencilState = null;
 }
        public bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
            if (mode != SpecialRenderMode.Deferred && mode != SpecialRenderMode.Reflection) return false;

            _effect.FxSkyDown.Set(SkyColorLower);
            _effect.FxSkyRange.Set(SkyColorUpper - SkyColorLower);
            return true;
        }
Exemple #3
0
        public bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (mode == SpecialRenderMode.DeferredTransparentMask)
            {
                return(IsBlending);
            }

            if (mode == SpecialRenderMode.Reflection)
            {
                _effect.FxDiffuseMap.SetResource(_txDiffuse);
                _effect.FxNormalMap.SetResource(_txNormal);
                _effect.FxMaterial.Set(_material);
            }
            else
            {
                if ((mode == SpecialRenderMode.DeferredTransparentForw || mode == SpecialRenderMode.DeferredTransparentDepth ||
                     mode == SpecialRenderMode.DeferredTransparentDef) && !IsBlending)
                {
                    return(false);
                }

                _effect.FxMaterial.Set(_material);
                _effect.FxDiffuseMap.SetResource(_txDiffuse);
                _effect.FxNormalMap.SetResource(_txNormal);
                _effect.FxDetailsMap.SetResource(_txDetails);
                _effect.FxDetailsNormalMap.SetResource(_txDetailsNormal);
                _effect.FxMapsMap.SetResource(_txMaps);
            }

            contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
            return(true);
        }
Exemple #4
0
 public override void Draw(IDeviceContextHolder holder, ICamera camera, SpecialRenderMode mode, Func <IRenderableObject, bool> filter = null)
 {
     if (mode == SpecialRenderMode.SimpleTransparent)
     {
         base.Draw(holder, camera, mode, filter);
     }
 }
Exemple #5
0
        public virtual void Draw(IDeviceContextHolder contextHolder, ICamera camera, SpecialRenderMode mode, Func <IRenderableObject, bool> filter = null)
        {
            if (!IsEnabled || filter?.Invoke(this) == false)
            {
                return;
            }
            if (mode == SpecialRenderMode.Reflection && !IsReflectable)
            {
                return;
            }
            if (camera != null && BoundingBox != null && !camera.Visible(BoundingBox.Value))
            {
                return;
            }

            UpdateLookAt();

            var c = Count;

            for (var i = 0; i < c; i++)
            {
                var child = this[i];
                if (child.IsEnabled)
                {
                    child.Draw(contextHolder, camera, mode, filter);
                }
            }
        }
Exemple #6
0
        public void Draw(IDeviceContextHolder contextHolder, int indices, SpecialRenderMode mode)
        {
            if (mode == SpecialRenderMode.DeferredTransparentMask || mode == SpecialRenderMode.Shadow)
            {
                _effect.TechTransparentMask.DrawAllPasses(contextHolder.DeviceContext, indices);
                Drawed++;
                return;
            }

            if (IsBlending)
            {
                if (mode == SpecialRenderMode.DeferredTransparentForw || mode == SpecialRenderMode.DeferredTransparentDepth)
                {
                    _effect.TechTransparentForward.DrawAllPasses(contextHolder.DeviceContext, indices);
                    Drawed++;
                }
                else if (mode == SpecialRenderMode.DeferredTransparentDef)
                {
                    _effect.TechTransparentDeferred.DrawAllPasses(contextHolder.DeviceContext, indices);
                    Drawed++;
                }
                return;
            }

            if (mode == SpecialRenderMode.DeferredTransparentForw || mode == SpecialRenderMode.DeferredTransparentDepth ||
                mode == SpecialRenderMode.DeferredTransparentDef)
            {
                return;
            }
            (mode == SpecialRenderMode.Deferred ? _effect.TechStandardDeferred : _effect.TechStandardForward)
            .DrawAllPasses(contextHolder.DeviceContext, indices);
            Drawed++;
        }
Exemple #7
0
 public void Draw(IDeviceContextHolder contextHolder, int indices, SpecialRenderMode mode)
 {
     _effect.TechMain.DrawAllPasses(contextHolder.DeviceContext, indices);
     contextHolder.DeviceContext.OutputMerger.BlendState        = null;
     contextHolder.DeviceContext.OutputMerger.DepthStencilState = null;
     contextHolder.DeviceContext.Rasterizer.State = null;
 }
Exemple #8
0
        protected void PrepareStates(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            SetInputLayout(contextHolder);

            if (mode == SpecialRenderMode.GBuffer)
            {
                return;
            }
            contextHolder.DeviceContext.OutputMerger.BlendState = IsBlending ? contextHolder.States.TransparentBlendState : null;

            if (mode == SpecialRenderMode.SimpleTransparent || mode == SpecialRenderMode.Outline)
            {
                return;
            }
            switch (Kn5Material.DepthMode)
            {
            case Kn5MaterialDepthMode.DepthNormal:
                contextHolder.DeviceContext.OutputMerger.DepthStencilState = null;
                break;

            case Kn5MaterialDepthMode.DepthNoWrite:
                contextHolder.DeviceContext.OutputMerger.DepthStencilState = contextHolder.States.ReadOnlyDepthState;
                break;

            case Kn5MaterialDepthMode.DepthOff:
                contextHolder.DeviceContext.OutputMerger.DepthStencilState = contextHolder.States.DisabledDepthState;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemple #9
0
 public override void Draw(IDeviceContextHolder holder, ICamera camera, SpecialRenderMode mode, Func <IRenderableObject, bool> filter = null)
 {
     if (mode != SpecialRenderMode.Simple && mode != SpecialRenderMode.SimpleTransparent && mode != SpecialRenderMode.GBuffer)
     {
         return;
     }
     _object.Draw(holder, camera, mode, filter);
 }
Exemple #10
0
        public override bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
            if (mode != SpecialRenderMode.SimpleTransparent && mode != SpecialRenderMode.Simple && mode != SpecialRenderMode.Outline) return false;

            Effect.FxMaterial.Set(_material);
            Effect.FxDiffuseMap.SetResource(_txDiffuse);

            PrepareStates(contextHolder, mode);
            return true;
        }
Exemple #11
0
 public bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
 {
     if (!mode.HasFlag(SpecialRenderMode.Simple))
     {
         return(false);
     }
     contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
     return(true);
 }
Exemple #12
0
 public virtual bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
 {
     if (mode != SpecialRenderMode.SimpleTransparent && mode != SpecialRenderMode.Simple && mode != SpecialRenderMode.Outline)
     {
         return(false);
     }
     PrepareStates(contextHolder, mode);
     return(true);
 }
        public bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
            if (mode != SpecialRenderMode.Deferred) return false;

            _effect.FxDiffuseMap.SetResource(_txDiffuse);
            contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPT;
            contextHolder.DeviceContext.OutputMerger.BlendState = contextHolder.TransparentBlendState;
            contextHolder.DeviceContext.OutputMerger.DepthStencilState = contextHolder.LessEqualReadOnlyDepthState;
            return true;
        }
Exemple #14
0
 public virtual bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
 {
     if (mode != SpecialRenderMode.Simple && mode != SpecialRenderMode.GBuffer)
     {
         return(false);
     }
     contextHolder.DeviceContext.InputAssembler.InputLayout = Effect.LayoutPT;
     return(true);
 }
Exemple #15
0
 public virtual bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
 {
     if ((mode & _mode) == 0)
     {
         return(false);
     }
     PrepareStates(contextHolder, mode);
     return(true);
 }
        public override bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
            if (!base.Prepare(contextHolder, mode)) return false;

            Effect.FxMapsMaterial.Set(_material);
            Effect.FxNormalMap.SetResource(_txNormal);
            Effect.FxDetailsMap.SetResource(_txDetails);
            Effect.FxDetailsNormalMap.SetResource(_txDetailsNormal);
            Effect.FxMapsMap.SetResource(_txMaps);
            return true;
        }
Exemple #17
0
 public bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
 {
     if (mode != SpecialRenderMode.Simple)
     {
         return(false);
     }
     contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
     contextHolder.DeviceContext.OutputMerger.BlendState    = IsBlending ? contextHolder.States.TransparentBlendState : null;
     return(true);
 }
        public override void Draw(IDeviceContextHolder contextHolder, int indices, SpecialRenderMode mode)
        {
            if (_debugReflectionsMode)
            {
                _debugReflections.TechMain.DrawAllPasses(contextHolder.DeviceContext, indices);
                return;
            }

            base.Draw(contextHolder, indices, mode);
        }
        public override bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (!base.Prepare(contextHolder, mode))
            {
                return(false);
            }

            Effect.FxAlphaMaterial.Set(_material);
            return(true);
        }
        public void Draw(DeviceContextHolder contextHolder, ICamera camera, SpecialRenderMode mode) {
            if (!IsEnabled || mode == SpecialRenderMode.Reflection && !IsReflectable) return;

            if (!_initialized) {
                Initialize(contextHolder);
                _initialized = true;
            }

            DrawInner(contextHolder, camera, mode);
        }
        public override bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (!base.Prepare(contextHolder, mode))
            {
                return(false);
            }

            Effect.FxNormalMap.SetResource(_txNormal);
            return(true);
        }
 public override bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
 {
     if (!base.Prepare(contextHolder, mode))
     {
         return(false);
     }
     contextHolder.DeviceContext.OutputMerger.BlendState        = contextHolder.States.TransparentBlendState;
     contextHolder.DeviceContext.OutputMerger.DepthStencilState = contextHolder.States.DisabledDepthState;
     return(true);
 }
        public void Draw(DeviceContextHolder contextHolder, int indices, SpecialRenderMode mode) {
            contextHolder.DeviceContext.Rasterizer.State = _rasterizerState;

            if (mode == SpecialRenderMode.Deferred) {
                _effect.TechSkyDeferred.DrawAllPasses(contextHolder.DeviceContext, indices);
            } else if (mode == SpecialRenderMode.Reflection) { 
                _effect.TechSkyForward.DrawAllPasses(contextHolder.DeviceContext, indices);
            }

            contextHolder.DeviceContext.Rasterizer.State = null;
        }
Exemple #24
0
        public bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (mode != SpecialRenderMode.Deferred && mode != SpecialRenderMode.Reflection)
            {
                return(false);
            }

            _effect.FxSkyDown.Set(SkyColorLower);
            _effect.FxSkyRange.Set(SkyColorUpper - SkyColorLower);
            return(true);
        }
 public override bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
 {
     if (!AllowedFlags.HasFlag(mode))
     {
         return(false);
     }
     Effect.FxMaterial.Set(Material);
     Effect.FxDiffuseMap.SetResource(TxDiffuse);
     PrepareStates(contextHolder, mode);
     return(true);
 }
        public bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
            switch (mode) {
                case SpecialRenderMode.Deferred:
                case SpecialRenderMode.Reflection:
                case SpecialRenderMode.Shadow:
                    contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
                    return true;

                default:
                    return false;
            }
        }
        public bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (mode != SpecialRenderMode.Deferred)
            {
                return(false);
            }

            _effect.FxDiffuseMap.SetResource(_txDiffuse);
            contextHolder.DeviceContext.InputAssembler.InputLayout     = _effect.LayoutPT;
            contextHolder.DeviceContext.OutputMerger.BlendState        = contextHolder.States.TransparentBlendState;
            contextHolder.DeviceContext.OutputMerger.DepthStencilState = contextHolder.States.LessEqualReadOnlyDepthState;
            return(true);
        }
Exemple #28
0
        public void Draw(IDeviceContextHolder contextHolder, int indices, SpecialRenderMode mode)
        {
            _effect.FxOverrideColor.Set(mode == SpecialRenderMode.Outline);
            if (mode == SpecialRenderMode.Outline)
            {
                _effect.FxCustomColor.Set(new Vector4(1f));
            }

            _effect.TechMain.DrawAllPasses(contextHolder.DeviceContext, indices);
            contextHolder.DeviceContext.OutputMerger.BlendState        = null;
            contextHolder.DeviceContext.OutputMerger.DepthStencilState = null;
            contextHolder.DeviceContext.Rasterizer.State = null;
        }
        public override bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (!base.Prepare(contextHolder, mode))
            {
                return(false);
            }

            Effect.FxNormalMap.SetResource(_txNormal);
            Effect.FxDiffuseBlurMap.SetResource(_txDiffuseBlur);
            Effect.FxNormalBlurMap.SetResource(_txNormalBlur);
            Effect.FxTyresMaterial.Set(_material);
            return(true);
        }
        public override bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (mode != SpecialRenderMode.SimpleTransparent && mode != SpecialRenderMode.Simple && mode != SpecialRenderMode.Outline)
            {
                return(false);
            }

            Effect.FxMaterial.Set(_material);
            Effect.FxDiffuseMap.SetResource(_txDiffuse);

            PrepareStates(contextHolder, mode);
            return(true);
        }
Exemple #31
0
        public bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (mode != SpecialRenderMode.Simple && mode != SpecialRenderMode.Outline)
            {
                return(false);
            }

            contextHolder.DeviceContext.InputAssembler.InputLayout     = _effect.LayoutPC;
            contextHolder.DeviceContext.OutputMerger.BlendState        = contextHolder.States.TransparentBlendState;
            contextHolder.DeviceContext.OutputMerger.DepthStencilState = contextHolder.States.DisabledDepthState;
            contextHolder.DeviceContext.Rasterizer.State = contextHolder.States.DoubleSidedSmoothLinesState;
            return(true);
        }
Exemple #32
0
        public bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            switch (mode)
            {
            case SpecialRenderMode.Deferred:
            case SpecialRenderMode.Reflection:
            case SpecialRenderMode.Shadow:
                contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
                return(true);

            default:
                return(false);
            }
        }
Exemple #33
0
        public bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (mode != SpecialRenderMode.SimpleTransparent && mode != SpecialRenderMode.Simple && mode != SpecialRenderMode.Outline &&
                mode != SpecialRenderMode.Reflection && mode != SpecialRenderMode.Shadow && mode != SpecialRenderMode.GBuffer)
            {
                return(false);
            }

            _bonesMode = false;
            PrepareStates(contextHolder, mode);
            _effect.FxMaterial.Set(_material);
            _effect.FxDiffuseMap.SetResource(_txDiffuse);
            _effect.FxNormalMap.SetResource(_txNormal);
            return(true);
        }
Exemple #34
0
 public void Draw(IDeviceContextHolder contextHolder, int indices, SpecialRenderMode mode)
 {
     if (GrassPass)
     {
         _effect.TechPerPixel_GrassPass.DrawAllPasses(contextHolder.DeviceContext, indices);
     }
     else if (_multilayer)
     {
         (SecondPass ? _effect.TechMultiLayer_SecondPass : _effect.TechMultiLayer).DrawAllPasses(contextHolder.DeviceContext, indices);
     }
     else
     {
         (SecondPass ? _effect.TechPerPixel_SecondPass :_effect.TechPerPixel).DrawAllPasses(contextHolder.DeviceContext, indices);
     }
 }
Exemple #35
0
        public void Draw(IDeviceContextHolder contextHolder, int indices, SpecialRenderMode mode)
        {
            contextHolder.DeviceContext.Rasterizer.State = _rasterizerState;

            if (mode == SpecialRenderMode.Deferred)
            {
                _effect.TechSkyDeferred.DrawAllPasses(contextHolder.DeviceContext, indices);
            }
            else if (mode == SpecialRenderMode.Reflection)
            {
                _effect.TechSkyForward.DrawAllPasses(contextHolder.DeviceContext, indices);
            }

            contextHolder.DeviceContext.Rasterizer.State = null;
        }
        public void Draw(DeviceContextHolder contextHolder, int indices, SpecialRenderMode mode) {
            switch (mode) {
                case SpecialRenderMode.Deferred:
                    _effect.TechSpecialGlDeferred.DrawAllPasses(contextHolder.DeviceContext, indices);
                    break;

                case SpecialRenderMode.Reflection:
                    _effect.TechSpecialGlForward.DrawAllPasses(contextHolder.DeviceContext, indices);
                    break;

                case SpecialRenderMode.Shadow:
                    _effect.TechSpecialGlMask.DrawAllPasses(contextHolder.DeviceContext, indices);
                    break;
            }
        }
 public virtual void Draw(IDeviceContextHolder contextHolder, int indices, SpecialRenderMode mode)
 {
     if (mode == SpecialRenderMode.Shadow)
     {
         DrawShadow(contextHolder, indices);
     }
     else if (mode == SpecialRenderMode.GBuffer)
     {
         DrawGBuffer(contextHolder, indices);
     }
     else
     {
         DrawMain(contextHolder, indices);
     }
 }
Exemple #38
0
        public override bool Prepare(IDeviceContextHolder contextHolder, SpecialRenderMode mode)
        {
            if (!base.Prepare(contextHolder, mode))
            {
                return(false);
            }

            Effect.FxNormalMap.SetResource(_txNormal);
            if (Kn5Material.GetPropertyValueAByName("nmObjectSpace") != 0)
            {
                Flags |= EffectDarkMaterial.NmObjectSpace;
            }

            return(true);
        }
        protected void PrepareStates(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
            contextHolder.DeviceContext.InputAssembler.InputLayout = Effect.LayoutPNTG;
            contextHolder.DeviceContext.OutputMerger.BlendState = IsBlending ? contextHolder.TransparentBlendState : null;

            if (mode == SpecialRenderMode.SimpleTransparent || mode == SpecialRenderMode.Outline) return;
            switch (Kn5Material.DepthMode) {
                case Kn5MaterialDepthMode.DepthNormal:
                    contextHolder.DeviceContext.OutputMerger.DepthStencilState = null;
                    break;

                case Kn5MaterialDepthMode.DepthNoWrite:
                    contextHolder.DeviceContext.OutputMerger.DepthStencilState = contextHolder.ReadOnlyDepthState;
                    break;

                case Kn5MaterialDepthMode.DepthOff:
                    contextHolder.DeviceContext.OutputMerger.DepthStencilState = contextHolder.DisabledDepthState;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
Exemple #40
0
 public bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
     if (mode != SpecialRenderMode.Simple) return false;
     contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
     contextHolder.DeviceContext.OutputMerger.BlendState = IsBlending ? contextHolder.TransparentBlendState : null;
     return true;
 }
 public void Draw(DeviceContextHolder contextHolder, ICamera camera, SpecialRenderMode mode, Func<IRenderableObject, bool> filter) {
     if (!filter(this)) return;
     Draw(contextHolder, camera, mode);
 }
 public virtual void Draw(DeviceContextHolder contextHolder, int indices, SpecialRenderMode mode) {
     Effect.TechStandard.DrawAllPasses(contextHolder.DeviceContext, indices);
 }
 public void Draw(DeviceContextHolder contextHolder, int indices, SpecialRenderMode mode) {
     _effect.TechAmbientShadowDeferred.DrawAllPasses(contextHolder.DeviceContext, indices);
     contextHolder.DeviceContext.OutputMerger.BlendState = null;
     contextHolder.DeviceContext.OutputMerger.DepthStencilState = null;
 }
 protected abstract void DrawInner(DeviceContextHolder contextHolder, ICamera camera, SpecialRenderMode mode);
 public bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
     if (!mode.HasFlag(SpecialRenderMode.Simple)) return false;
     contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
     return true;
 }
Exemple #46
0
 public bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) => false;
        public override bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
            if (!base.Prepare(contextHolder, mode)) return false;

            Effect.FxNmUvMultMaterial.Set(_material);
            return true;
        }
 public override void Draw(DeviceContextHolder contextHolder, int indices, SpecialRenderMode mode) {
     Effect.TechNmUvMult.DrawAllPasses(contextHolder.DeviceContext, indices);
 }
Exemple #49
0
 public void Draw(DeviceContextHolder contextHolder, int indices, SpecialRenderMode mode) {}
 public virtual bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
     if (mode != SpecialRenderMode.SimpleTransparent && mode != SpecialRenderMode.Simple && mode != SpecialRenderMode.Outline) return false;
     PrepareStates(contextHolder, mode);
     return true;
 }
Exemple #51
0
 public void Draw(DeviceContextHolder contextHolder, int indices, SpecialRenderMode mode) {
     _effect.TechMain.DrawAllPasses(contextHolder.DeviceContext, indices);
 }
        public bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
            if (mode == SpecialRenderMode.DeferredTransparentMask) return IsBlending;

            if (mode == SpecialRenderMode.Reflection) {
                _effect.FxDiffuseMap.SetResource(_txDiffuse);
                _effect.FxNormalMap.SetResource(_txNormal);
                _effect.FxMaterial.Set(_material);
            } else {
                if ((mode == SpecialRenderMode.DeferredTransparentForw || mode == SpecialRenderMode.DeferredTransparentDepth ||
                        mode == SpecialRenderMode.DeferredTransparentDef) && !IsBlending) return false;

                _effect.FxMaterial.Set(_material);
                _effect.FxDiffuseMap.SetResource(_txDiffuse);
                _effect.FxNormalMap.SetResource(_txNormal);
                _effect.FxDetailsMap.SetResource(_txDetails);
                _effect.FxDetailsNormalMap.SetResource(_txDetailsNormal);
                _effect.FxMapsMap.SetResource(_txMaps);
            }

            contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
            return true;
        }
        public void Draw(DeviceContextHolder contextHolder, int indices, SpecialRenderMode mode) {
            if (mode == SpecialRenderMode.DeferredTransparentMask || mode == SpecialRenderMode.Shadow) {
                _effect.TechTransparentMask.DrawAllPasses(contextHolder.DeviceContext, indices);
                Drawed++;
                return;
            }

            if (IsBlending) {
                if (mode == SpecialRenderMode.DeferredTransparentForw || mode == SpecialRenderMode.DeferredTransparentDepth) {
                    _effect.TechTransparentForward.DrawAllPasses(contextHolder.DeviceContext, indices);
                    Drawed++;
                } else if (mode == SpecialRenderMode.DeferredTransparentDef) {
                    _effect.TechTransparentDeferred.DrawAllPasses(contextHolder.DeviceContext, indices);
                    Drawed++;
                }
                return;
            }

            if (mode == SpecialRenderMode.DeferredTransparentForw || mode == SpecialRenderMode.DeferredTransparentDepth ||
                    mode == SpecialRenderMode.DeferredTransparentDef) return;
            (mode == SpecialRenderMode.Deferred ? _effect.TechStandardDeferred : _effect.TechStandardForward)
                    .DrawAllPasses(contextHolder.DeviceContext, indices);
            Drawed++;
        }