public static Axiom.Media.PixelFormat GetClosestSupported(Axiom.Media.PixelFormat format)
        {
            if (ConvertEnum(format) != D3D.Format.Unknown)
            {
                return(format);
            }
            switch (format)
            {
            case Axiom.Media.PixelFormat.B5G6R5:
                return(Axiom.Media.PixelFormat.R5G6B5);

            case Axiom.Media.PixelFormat.B8G8R8:
                return(Axiom.Media.PixelFormat.R8G8B8);

            case Axiom.Media.PixelFormat.B8G8R8A8:
                return(Axiom.Media.PixelFormat.A8R8G8B8);

            case Axiom.Media.PixelFormat.FLOAT16_RGB:
                return(Axiom.Media.PixelFormat.FLOAT16_RGBA);

            case Axiom.Media.PixelFormat.FLOAT32_RGB:
                return(Axiom.Media.PixelFormat.FLOAT32_RGBA);

            case Axiom.Media.PixelFormat.Unknown:
            default:
                return(Axiom.Media.PixelFormat.A8R8G8B8);
            }
        }
        //public override Axiom.Core.Texture Create(string name, TextureType type) {
        //    D3DTexture texture = new D3DTexture(name, device, TextureUsage.Default, type);

        //    // Handle 32-bit texture settings
        //    texture.Enable32Bit(is32Bit);

        //    return texture;
        //}

        /// <summary>
        ///    Used to create a blank D3D texture.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="type"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="numMipMaps"></param>
        /// <param name="format"></param>
        /// <param name="usage"></param>
        /// <returns></returns>
        //public override Axiom.Core.Texture CreateManual(string name, TextureType type, int width, int height, int numMipMaps, Axiom.Media.PixelFormat format, TextureUsage usage) {
        //    D3DTexture texture = new D3DTexture(name, device, type, width, height, numMipMaps, format, usage);
        //    texture.Enable32Bit(is32Bit);
        //    return texture;
        //}

        // This ends up just discarding the format passed in; the C# methods don't let you supply
        // a "recommended" format.  Ah well.
        public override Axiom.Media.PixelFormat GetNativeFormat(TextureType ttype, Axiom.Media.PixelFormat format, TextureUsage usage)
        {
            // Basic filtering
            D3D.Format d3dPF = D3DHelper.ConvertEnum(D3DHelper.GetClosestSupported(format));

            // Calculate usage
            D3D.Usage d3dusage = 0;
            D3D.Pool  pool     = D3D.Pool.Managed;
            if ((usage & TextureUsage.RenderTarget) != 0)
            {
                d3dusage |= D3D.Usage.RenderTarget;
                pool      = D3D.Pool.Default;
            }
            if ((usage & TextureUsage.Dynamic) != 0)
            {
                d3dusage |= D3D.Usage.Dynamic;
                pool      = D3D.Pool.Default;
            }

            // Use D3DX to adjust pixel format
            switch (ttype)
            {
            case TextureType.OneD:
            case TextureType.TwoD:
                TextureRequirements tReqs;
                TextureLoader.CheckTextureRequirements(device, d3dusage, pool, out tReqs);
                d3dPF = tReqs.Format;
                break;

            case TextureType.ThreeD:
                VolumeTextureRequirements volReqs;
                TextureLoader.CheckVolumeTextureRequirements(device, pool, out volReqs);
                d3dPF = volReqs.Format;
                break;

            case TextureType.CubeMap:
                CubeTextureRequirements cubeReqs;
                TextureLoader.CheckCubeTextureRequirements(device, d3dusage, pool, out cubeReqs);
                d3dPF = cubeReqs.Format;
                break;
            }
            ;
            return(D3DHelper.ConvertEnum(d3dPF));
        }
Beispiel #3
0
        /// <summary>
        ///    Creates a GL texture manually.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="type"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="numMipMaps"></param>
        /// <param name="format"></param>
        /// <param name="usage"></param>
        /// <returns></returns>
        public override Texture CreateManual(string name, TextureType type, int width, int height, int numMipMaps, Axiom.Media.PixelFormat format, TextureUsage usage)
        {
            GLTexture texture = new GLTexture(name, type, width, height, numMipMaps, format, usage);

            texture.Enable32Bit(is32Bit);
            return(texture);
        }
        public static D3D.Format ConvertEnum(Axiom.Media.PixelFormat format)
        {
            switch (format)
            {
            case Axiom.Media.PixelFormat.A8:
                return(D3D.Format.A8);

            case Axiom.Media.PixelFormat.L8:
                return(D3D.Format.L8);

            case Axiom.Media.PixelFormat.L16:
                return(D3D.Format.L16);

            case Axiom.Media.PixelFormat.A4L4:
                return(D3D.Format.A4L4);

            case Axiom.Media.PixelFormat.BYTE_LA:
                return(D3D.Format.A8L8);        // Assume little endian here

            case Axiom.Media.PixelFormat.R3G3B2:
                return(D3D.Format.R3G3B2);

            case Axiom.Media.PixelFormat.A1R5G5B5:
                return(D3D.Format.A1R5G5B5);

            case Axiom.Media.PixelFormat.A4R4G4B4:
                return(D3D.Format.A4R4G4B4);

            case Axiom.Media.PixelFormat.R5G6B5:
                return(D3D.Format.R5G6B5);

            case Axiom.Media.PixelFormat.R8G8B8:
                return(D3D.Format.R8G8B8);

            case Axiom.Media.PixelFormat.X8R8G8B8:
                return(D3D.Format.X8R8G8B8);

            case Axiom.Media.PixelFormat.A8R8G8B8:
                return(D3D.Format.A8R8G8B8);

            case Axiom.Media.PixelFormat.X8B8G8R8:
                return(D3D.Format.X8B8G8R8);

            case Axiom.Media.PixelFormat.A8B8G8R8:
                return(D3D.Format.A8B8G8R8);

            case Axiom.Media.PixelFormat.A2R10G10B10:
                return(D3D.Format.A2R10G10B10);

            case Axiom.Media.PixelFormat.A2B10G10R10:
                return(D3D.Format.A2B10G10R10);

            case Axiom.Media.PixelFormat.FLOAT16_R:
                return(D3D.Format.R16F);

            case Axiom.Media.PixelFormat.FLOAT16_RGBA:
                return(D3D.Format.A16B16G16R16F);

            case Axiom.Media.PixelFormat.FLOAT32_R:
                return(D3D.Format.R32F);

            case Axiom.Media.PixelFormat.FLOAT32_RGBA:
                return(D3D.Format.A32B32G32R32F);

            case Axiom.Media.PixelFormat.SHORT_RGBA:
                return(D3D.Format.A16B16G16R16);

            case Axiom.Media.PixelFormat.DXT1:
                return(D3D.Format.Dxt1);

            case Axiom.Media.PixelFormat.DXT2:
                return(D3D.Format.Dxt2);

            case Axiom.Media.PixelFormat.DXT3:
                return(D3D.Format.Dxt3);

            case Axiom.Media.PixelFormat.DXT4:
                return(D3D.Format.Dxt4);

            case Axiom.Media.PixelFormat.DXT5:
                return(D3D.Format.Dxt5);

            default:
                return(D3D.Format.Unknown);
            }
        }