private void LoadCubeTexture()
{
Debug.Assert( this.TextureType == TextureType.CubeMap, "this.TextureType == TextureType.CubeMap" );
if ( Name.EndsWith( ".dds" ) )
{
Stream stream = ResourceGroupManager.Instance.OpenResource( Name, Group, true, this );
int numMips = this.RequestedMipmapCount + 1;
// check if mip map volume textures are supported
if ( ( _devCaps.TextureCaps & D3D.TextureCaps.MipCubeMap ) != D3D.TextureCaps.MipCubeMap )
{
// no mip map support for this kind of textures :(
this.MipmapCount = 0;
numMips = 1;
}
_d3dPool = ( Usage & TextureUsage.Dynamic ) != 0 ? D3D.Pool.Default : D3D.Pool.Managed;
try
{
// load the cube texture from the image data stream directly
_cubeTexture = D3D.CubeTexture.FromStream( _device, stream, (int)stream.Length, numMips, D3D.Usage.None, D3D.Format.Unknown, _d3dPool, D3D.Filter.None, D3D.Filter.None, 0 );
}
catch ( Exception ex )
{
FreeInternalResources();
throw new Exception( "Can't create cube texture.", ex );
}
// store off a base reference
_texture = _cubeTexture;
// set src and dest attributes to the same, we can't know
D3D.SurfaceDescription desc = _cubeTexture.GetLevelDescription( 0 );
_d3dPool = desc.Pool;
SetSrcAttributes( desc.Width, desc.Height, 1, D3DHelper.ConvertEnum( desc.Format ) );
SetFinalAttributes( desc.Width, desc.Height, 1, D3DHelper.ConvertEnum( desc.Format ) );
internalResourcesCreated = true;
stream.Close();
}
else
{
// Load from 6 separate files
// Use Axiom codecs
string[] postfixes = { "_rt", "_lf", "_up", "_dn", "_fr", "_bk" };
List<Image> images = new List<Image>();
int pos = Name.LastIndexOf( "." );
string baseName = Name.Substring( 0, pos );
string ext = Name.Substring( pos + 1 );
for ( int i = 0; i < 6; i++ )
{
string fullName = baseName + postfixes[ i ] + "." + ext;
Stream strm = ResourceGroupManager.Instance.OpenResource( fullName, Group, true, this );
var image = Image.FromStream( strm, ext );
images.Add( image );
strm.Close();
}
LoadImages( images.ToArray() );
}
}