Fusion.Engine.Graphics.SpriteEngine.DrawSpritesRecursive C# (CSharp) Method

DrawSpritesRecursive() private method

Draw sprite layers
private DrawSpritesRecursive ( GameTime gameTime, StereoEye stereoEye, RenderTargetSurface surface, IEnumerable layers, System.Matrix parentTransform, Color4 parentColor ) : void
gameTime Fusion.Engine.Common.GameTime
stereoEye StereoEye
surface Fusion.Drivers.Graphics.RenderTargetSurface
layers IEnumerable
parentTransform System.Matrix
parentColor Color4
return void
		void DrawSpritesRecursive ( GameTime gameTime, StereoEye stereoEye, RenderTargetSurface surface, IEnumerable<SpriteLayer> layers, Matrix parentTransform, Color4 parentColor )
		{
			int	w	=	surface.Width;
			int h	=	surface.Height;
			var ofs	=	0f;

			var projection = Matrix.OrthoOffCenterRH(ofs, w + ofs, h + ofs, ofs, -9999, 9999);

			var orderedLayers	=	layers.Where( layer0 => layer0!=null ).OrderBy( layer1 => layer1.Order );

			foreach ( var layer in orderedLayers ) {
				
				if (!layer.Visible) {
					continue;
				}

				using ( new PixEvent("SpriteLayer") ) {

					Matrix absTransform	=	parentTransform * layer.Transform;
					Color4 absColor		=	parentColor * layer.Color.ToColor4();

					constData.Transform		=	absTransform * projection;
					constData.ClipRectangle	=	new Vector4(0,0,0,0);
					constData.MasterColor	=	absColor;

					constBuffer.SetData( constData );

					device.VertexShaderConstants[0]	=	constBuffer;
					device.PixelShaderConstants[0]	=	constBuffer;
				
					PipelineState ps = null;
					SamplerState ss = null;

					switch ( layer.FilterMode ) {
						case SpriteFilterMode.PointClamp		: ss = SamplerState.PointClamp;			break;
						case SpriteFilterMode.PointWrap			: ss = SamplerState.PointWrap;			break;
						case SpriteFilterMode.LinearClamp		: ss = SamplerState.LinearClamp;		break;
						case SpriteFilterMode.LinearWrap		: ss = SamplerState.LinearWrap;			break;
						case SpriteFilterMode.AnisotropicClamp	: ss = SamplerState.AnisotropicClamp;	break;
						case SpriteFilterMode.AnisotropicWrap	: ss = SamplerState.AnisotropicWrap;	break;
					}

					switch ( layer.BlendMode ) {
						case SpriteBlendMode.Opaque				: ps = factory[(int)Flags.OPAQUE			]; break;
						case SpriteBlendMode.AlphaBlend			: ps = factory[(int)Flags.ALPHA_BLEND		]; break;
						case SpriteBlendMode.AlphaBlendPremul	: ps = factory[(int)Flags.ALPHA_BLEND_PREMUL]; break;
						case SpriteBlendMode.Additive			: ps = factory[(int)Flags.ADDITIVE			]; break;
						case SpriteBlendMode.Screen				: ps = factory[(int)Flags.SCREEN			]; break;
						case SpriteBlendMode.Multiply			: ps = factory[(int)Flags.MULTIPLY			]; break;
						case SpriteBlendMode.NegMultiply		: ps = factory[(int)Flags.NEG_MULTIPLY		]; break;
						case SpriteBlendMode.AlphaOnly			: ps = factory[(int)Flags.ALPHA_ONLY		]; break;
					}

					device.PipelineState			=	ps;
					device.PixelShaderSamplers[0]	=	ss;

					layer.Draw( gameTime, stereoEye );

					DrawSpritesRecursive( gameTime, stereoEye, surface, layer.Layers, absTransform, absColor );
				}
			}
		}
	}