fna-workbench

fna-workbench Git Source Tree


Root/src/Graphics/Texture.cs

#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
 * Copyright 2009-2016 Ethan Lee and the MonoGame Team
 *
 * Released under the Microsoft Public License.
 * See LICENSE for details.
 */
#endregion
 
#region Using Statements
using System;
#endregion
 
namespace Microsoft.Xna.Framework.Graphics
{
    public abstract class Texture : GraphicsResource
    {
        #region Public Properties
 
        public SurfaceFormat Format
        {
            get;
            protected set;
        }
 
        public int LevelCount
        {
            get;
            protected set;
        }
 
        #endregion
 
        #region Internal Variables
 
        internal IGLTexture texture;
 
        #endregion
 
        #region Protected Dispose Method
 
        protected override void Dispose(bool disposing)
        {
            if (!IsDisposed)
            {
                GraphicsDevice.GLDevice.AddDisposeTexture(texture);
            }
            base.Dispose(disposing);
        }
 
        #endregion
 
        #region Internal Context Reset Method
 
        internal protected override void GraphicsDeviceResetting()
        {
            // FIXME: Do we even want to bother with DeviceResetting for GL? -flibit
        }
 
        #endregion
 
        #region Static SurfaceFormat Size Method
 
        internal static int GetFormatSize(SurfaceFormat format)
        {
            switch (format)
            {
                case SurfaceFormat.Dxt1:
                    return 8;
                case SurfaceFormat.Dxt3:
                case SurfaceFormat.Dxt5:
                    return 16;
                case SurfaceFormat.Alpha8:
                    return 1;
                case SurfaceFormat.Bgr565:
                case SurfaceFormat.Bgra4444:
                case SurfaceFormat.Bgra5551:
                case SurfaceFormat.HalfSingle:
                case SurfaceFormat.NormalizedByte2:
                    return 2;
                case SurfaceFormat.Color:
                case SurfaceFormat.Single:
                case SurfaceFormat.Rg32:
                case SurfaceFormat.HalfVector2:
                case SurfaceFormat.NormalizedByte4:
                case SurfaceFormat.Rgba1010102:
                    return 4;
                case SurfaceFormat.HalfVector4:
                case SurfaceFormat.Rgba64:
                case SurfaceFormat.Vector2:
                    return 8;
                case SurfaceFormat.Vector4:
                    return 16;
                default:
                    throw new ArgumentException("Should be a value defined in SurfaceFormat", "Format");
            }
        }
 
        #endregion
 
        #region Static Mipmap Level Calculator
 
        internal static int CalculateMipLevels(
            int width,
            int height = 0,
            int depth = 0
        ) {
            int levels = 1;
            for (
                int size = Math.Max(Math.Max(width, height), depth);
                size > 1;
                levels += 1
            ) {
                size /= 2;
            }
            return levels;
        }
 
        #endregion
    }
}

Archive Download this file

Branches

Number of commits:
Page rendered in 0.09342s using 11 queries.