Axiom.RenderSystems.DirectX9.D3DRenderSystem.SetTextureBlendMode C# (CSharp) Метод

SetTextureBlendMode() приватный метод

private SetTextureBlendMode ( int stage, LayerBlendModeEx bm ) : void
stage int
bm Axiom.Graphics.LayerBlendModeEx
Результат void
        public override void SetTextureBlendMode( int stage, LayerBlendModeEx bm )
        {
            TextureStage tss;
            ColorEx manualD3D;
            // choose type of blend.
            switch ( bm.blendType )
            {
                case LayerBlendType.Color:
                    tss = TextureStage.ColorOperation;
                    break;
                case LayerBlendType.Alpha:
                    tss = TextureStage.AlphaOperation;
                    break;
                default:
                    throw new AxiomException("Invalid blend type");
            }

            // set manual factor if required by operation
            if (bm.operation == LayerBlendOperationEx.BlendManual)
            {
                SetRenderState( RenderState.TextureFactor, new Color4( bm.blendFactor, 0.0f, 0.0f, 0.0f ) );
            }

            // set operation  
            SetTextureStageState( stage, tss, D3DHelper.ConvertEnum(bm.operation, _deviceManager.ActiveDevice.D3D9DeviceCaps) );

            // choose source 1
            switch ( bm.blendType )
            {
                case LayerBlendType.Color:
                    tss = TextureStage.ColorArg1;
                    manualD3D = bm.colorArg1;
                    manualBlendColors[ stage, 0 ] = manualD3D;
                    break;
                case LayerBlendType.Alpha:
                    tss = TextureStage.AlphaArg1;
                    manualD3D = manualBlendColors[ stage, 0 ];
                    manualD3D.a = bm.alphaArg1;
                    break;
                default:
                    throw new AxiomException("Invalid blend type");
            }

            // Set manual factor if required
            if (bm.source1 == LayerBlendSource.Manual)
            {
                if (currentCapabilities.HasCapability(Graphics.Capabilities.PerStageConstant))
                {
                    // Per-stage state
                    SetTextureStageState(stage, TextureStage.Constant, manualD3D.ToARGB());
                }
                else
                {
                    // Global state
                    SetRenderState( RenderState.TextureFactor, manualD3D.ToARGB() );
                }
            }
            // set source 1
            SetTextureStageState(stage, tss, D3DHelper.ConvertEnum(bm.source1, currentCapabilities.HasCapability(Graphics.Capabilities.PerStageConstant)));

            // choose source 2
            switch ( bm.blendType )
            {
                case LayerBlendType.Color:
                    tss = TextureStage.ColorArg2;
                    manualD3D = bm.colorArg2;
                    manualBlendColors[stage, 1] = manualD3D;
                    break;
                case LayerBlendType.Alpha:
                    tss = TextureStage.AlphaArg2;
                    manualD3D = manualBlendColors[ stage, 1 ];
                    manualD3D.a = bm.alphaArg2;
                    break;
            }
            // Set manual factor if required
            if (bm.source2 == LayerBlendSource.Manual)
            {
                if (currentCapabilities.HasCapability(Graphics.Capabilities.PerStageConstant))
                {
                    // Per-stage state
                    SetTextureStageState(stage, TextureStage.Constant, manualD3D.ToARGB());
                }
                else
                {
                    SetRenderState( RenderState.TextureFactor, manualD3D.ToARGB() );
                }
            }

            // Now set source 2
            SetTextureStageState( stage, tss,D3DHelper.ConvertEnum(bm.source2, currentCapabilities.HasCapability(Graphics.Capabilities.PerStageConstant)) );
            
            // Set interpolation factor if lerping
            if ( bm.operation != LayerBlendOperationEx.BlendDiffuseColor ||
                 ( _deviceManager.ActiveDevice.D3D9DeviceCaps.TextureOperationCaps & TextureOperationCaps.Lerp ) == 0 )
                return;
            
            // choose source 0 (lerp factor)
            switch ( bm.blendType )
            {
                case LayerBlendType.Color:
                    tss = TextureStage.ColorArg0;
                    break;
                case LayerBlendType.Alpha:
                    tss = TextureStage.AlphaArg0;
                    break;
            }
            SetTextureStageState(stage, tss, TextureArgument.Diffuse);
        }
D3DRenderSystem