//try to evaluate the xna compatible surface for the present data private static SurfaceFormat SurfaceFormatFromLoadFormat(LoadSurfaceFormat loadSurfaceFormat, FourCC compressionFormat, uint pixelFlags, int rgbBitCount) { if (loadSurfaceFormat == LoadSurfaceFormat.Unknown) { switch (compressionFormat) { case FourCC.D3DFMT_DXT1: return SurfaceFormat.Dxt1; case FourCC.D3DFMT_DXT3: return SurfaceFormat.Dxt3; case FourCC.D3DFMT_DXT5: return SurfaceFormat.Dxt5; case 0: if (rgbBitCount == 8) { return SurfaceFormat.Alpha8; } if (rgbBitCount == 16) { if (HasAlphaTest(pixelFlags)) { return SurfaceFormat.Bgr565; } else { return SurfaceFormat.Bgra4444; } } if (rgbBitCount == 32 || rgbBitCount == 24) { return SurfaceFormat.Color; } break; default: throw new Exception("Unsuported format"); } } else { switch (loadSurfaceFormat) { case LoadSurfaceFormat.Alpha8: return SurfaceFormat.Alpha8; case LoadSurfaceFormat.Bgr565: return SurfaceFormat.Bgr565; case LoadSurfaceFormat.Bgra4444: return SurfaceFormat.Bgra4444; case LoadSurfaceFormat.Bgra5551: return SurfaceFormat.Bgra5551; case LoadSurfaceFormat.A8R8G8B8: return SurfaceFormat.Color; case LoadSurfaceFormat.Dxt1: return SurfaceFormat.Dxt1; case LoadSurfaceFormat.Dxt3: return SurfaceFormat.Dxt3; case LoadSurfaceFormat.Dxt5: return SurfaceFormat.Dxt5; //Updated at load time to X8R8B8B8 case LoadSurfaceFormat.R8G8B8: return SurfaceFormat.Color; case LoadSurfaceFormat.X8B8G8R8: return SurfaceFormat.Color; case LoadSurfaceFormat.X8R8G8B8: return SurfaceFormat.Color; case LoadSurfaceFormat.A8B8G8R8: return SurfaceFormat.Color; case LoadSurfaceFormat.R32F: return SurfaceFormat.Single; case LoadSurfaceFormat.A32B32G32R32F: return SurfaceFormat.Vector4; case LoadSurfaceFormat.G32R32F: return SurfaceFormat.Vector2; case LoadSurfaceFormat.R16F: return SurfaceFormat.HalfSingle; case LoadSurfaceFormat.G16R16F: return SurfaceFormat.HalfVector2; case LoadSurfaceFormat.A16B16G16R16F: return SurfaceFormat.HalfVector4; case LoadSurfaceFormat.CxV8U8: return SurfaceFormat.NormalizedByte2; case LoadSurfaceFormat.Q8W8V8U8: return SurfaceFormat.NormalizedByte4; case LoadSurfaceFormat.G16R16: return SurfaceFormat.Rg32; case LoadSurfaceFormat.A2B10G10R10: return SurfaceFormat.Rgba1010102; case LoadSurfaceFormat.A16B16G16R16: return SurfaceFormat.Rgba64; default: throw new Exception(loadSurfaceFormat.ToString() + " is an unsuported format"); } } throw new Exception("Unsuported format"); }
//try to evaluate the xna compatible surface for the present data private static SurfaceFormat SurfaceFormatFromLoadFormat(LoadSurfaceFormat loadSurfaceFormat, FourCC compressionFormat, uint pixelFlags, int rgbBitCount) { switch (loadSurfaceFormat) { case LoadSurfaceFormat.Alpha8: return(SurfaceFormat.Alpha8); case LoadSurfaceFormat.Bgr565: return(SurfaceFormat.Bgr565); case LoadSurfaceFormat.Bgra4444: return(SurfaceFormat.Bgra4444); case LoadSurfaceFormat.Bgra5551: return(SurfaceFormat.Bgra5551); case LoadSurfaceFormat.A8R8G8B8: return(SurfaceFormat.Color); case LoadSurfaceFormat.Dxt1: return(SurfaceFormat.Dxt1); case LoadSurfaceFormat.Dxt3: return(SurfaceFormat.Dxt3); case LoadSurfaceFormat.Dxt5: return(SurfaceFormat.Dxt5); case LoadSurfaceFormat.R8G8B8: return(SurfaceFormat.Color); //Updated at load time to X8R8B8B8 case LoadSurfaceFormat.X8B8G8R8: return(SurfaceFormat.Color); case LoadSurfaceFormat.X8R8G8B8: return(SurfaceFormat.Color); case LoadSurfaceFormat.A8B8G8R8: return(SurfaceFormat.Color); case LoadSurfaceFormat.R32F: return(SurfaceFormat.Single); case LoadSurfaceFormat.A32B32G32R32F: return(SurfaceFormat.Vector4); case LoadSurfaceFormat.G32R32F: return(SurfaceFormat.Vector2); case LoadSurfaceFormat.R16F: return(SurfaceFormat.HalfSingle); case LoadSurfaceFormat.G16R16F: return(SurfaceFormat.HalfVector2); case LoadSurfaceFormat.A16B16G16R16F: return(SurfaceFormat.HalfVector4); case LoadSurfaceFormat.CxV8U8: return(SurfaceFormat.NormalizedByte2); case LoadSurfaceFormat.Q8W8V8U8: return(SurfaceFormat.NormalizedByte4); case LoadSurfaceFormat.G16R16: return(SurfaceFormat.Rg32); case LoadSurfaceFormat.A2B10G10R10: return(SurfaceFormat.Rgba1010102); case LoadSurfaceFormat.A16B16G16R16: return(SurfaceFormat.Rgba64); case LoadSurfaceFormat.Unknown: switch (compressionFormat) { case FourCC.D3DFMT_DXT1: return(SurfaceFormat.Dxt1); case FourCC.D3DFMT_DXT3: return(SurfaceFormat.Dxt3); case FourCC.D3DFMT_DXT5: return(SurfaceFormat.Dxt5); case 0: switch (rgbBitCount) { case 8: return(SurfaceFormat.Alpha8); case 16: return(HasAlphaTest(pixelFlags) ? SurfaceFormat.Bgr565 : SurfaceFormat.Bgra4444); case 24: case 32: return(SurfaceFormat.Color); } break; default: throw new InvalidDataException("Unsupported format"); } ; break; default: throw new InvalidDataException(loadSurfaceFormat.ToString() + " is an unsuported format"); } throw new InvalidDataException("Unsupported format"); }