//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");
        }
Exemple #2
0
        //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");
        }