Axiom.RenderSystems.DirectX9.D3DTexture.CreateNormalTexture C# (CSharp) Method

CreateNormalTexture() private method

private CreateNormalTexture ( ) : void
return void
		private void CreateNormalTexture()
		{
			Debug.Assert( SrcWidth > 0 && SrcHeight > 0 );

			// determine which D3D9 pixel format we'll use
			D3D.Format d3dPixelFormat = ChooseD3DFormat();

			// set the appropriate usage based on the usage of this texture
			D3D.Usage d3dUsage = ( ( Usage & TextureUsage.RenderTarget ) == TextureUsage.RenderTarget ) ? D3D.Usage.RenderTarget : D3D.Usage.None;

			// how many mips to use?
			int numMips = RequestedMipmapCount + 1;

			D3D.TextureRequirements texRequire = new D3D.TextureRequirements();
			texRequire.Width = SrcWidth;
			texRequire.Height = SrcHeight;
			// check texture requirements
			texRequire.MipLevelCount = numMips;
			texRequire.Format = d3dPixelFormat;
			//// NOTE: Although texRequire is an out parameter, it actually does
			////       use the data passed in with that object.
			texRequire = D3D.Texture.CheckRequirements( _device, SrcWidth, SrcHeight, numMips, d3dUsage, d3dPixelFormat, D3D.Pool.Default );

			// Save updated texture requirements
			numMips = texRequire.MipLevelCount;
			d3dPixelFormat = texRequire.Format;

			if ( ( Usage & TextureUsage.Dynamic ) == TextureUsage.Dynamic )
			{
				if ( CanUseDynamicTextures( d3dUsage, D3D.ResourceType.Texture, d3dPixelFormat ) )
				{
					d3dUsage |= D3D.Usage.Dynamic;
					_dynamicTextures = true;
				}
				else
				{
					_dynamicTextures = false;
				}
			}

			// check if mip maps are supported on hardware
			MipmapsHardwareGenerated = false;
			if ( ( _devCaps.TextureCaps & D3D.TextureCaps.MipMap ) == D3D.TextureCaps.MipMap )
			{
				if ( ( ( Usage & TextureUsage.AutoMipMap ) == TextureUsage.AutoMipMap ) && RequestedMipmapCount > 0 )
				{

					MipmapsHardwareGenerated = this.CanAutoGenMipMaps( d3dUsage, D3D.ResourceType.Texture, d3dPixelFormat );
					if ( MipmapsHardwareGenerated )
					{
						d3dUsage |= D3D.Usage.AutoGenerateMipMap;
						numMips = 0;
					}

				}
			}
			else
			{
				// no mip map support for this kind of texture
				MipmapCount = 0;
				numMips = 1;
			}


			// create the texture
			_normTexture = new D3D.Texture( _device, SrcWidth, SrcHeight, numMips, d3dUsage, d3dPixelFormat, _d3dPool );

			// store base reference to the texture
			_texture = _normTexture;

			// set the final texture attributes
			D3D.SurfaceDescription desc = _normTexture.GetLevelDescription( 0 );
			SetFinalAttributes( desc.Width, desc.Height, 1, D3DHelper.ConvertEnum( desc.Format ) );

			if ( MipmapsHardwareGenerated )
			{
				_texture.AutoMipGenerationFilter = GetBestFilterMethod();
			}
		}