using System.Buffers; namespace Ryujinx.Graphics.GAL { public interface ITexture { int Width { get; } int Height { get; } void CopyTo(ITexture destination, int firstLayer, int firstLevel); void CopyTo(ITexture destination, int srcLayer, int dstLayer, int srcLevel, int dstLevel); void CopyTo(ITexture destination, Extents2D srcRegion, Extents2D dstRegion, bool linearFilter); void CopyTo(BufferRange range, int layer, int level, int stride); ITexture CreateView(TextureCreateInfo info, int firstLayer, int firstLevel); PinnedSpan GetData(); PinnedSpan GetData(int layer, int level); /// /// Sets the texture data. The data passed as a will be disposed when /// the operation completes. /// /// Texture data bytes void SetData(IMemoryOwner data); /// /// Sets the texture data. The data passed as a will be disposed when /// the operation completes. /// /// Texture data bytes /// Target layer /// Target level void SetData(IMemoryOwner data, int layer, int level); /// /// Sets the texture data. The data passed as a will be disposed when /// the operation completes. /// /// Texture data bytes /// Target layer /// Target level /// Target sub-region of the texture to update void SetData(IMemoryOwner data, int layer, int level, Rectangle region); void SetStorage(BufferRange buffer); void Release(); } }