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();
}
}