using System.Runtime.InteropServices; using System.Numerics; namespace Raylib_cs; /// /// Texture parameters: filter mode
/// NOTE 1: Filtering considers mipmaps if available in the texture
/// NOTE 2: Filter is accordingly set for minification and magnification ///
public enum TextureFilter { /// /// No filter, just pixel aproximation /// Point = 0, /// /// Linear filtering /// Bilinear, /// /// Trilinear filtering (linear with mipmaps) /// Trilinear, /// /// Anisotropic filtering 4x /// Anisotropic4X, /// /// Anisotropic filtering 8x /// Anisotropic8X, /// /// Anisotropic filtering 16x /// Anisotropic16X, } /// /// Texture parameters: wrap mode /// public enum TextureWrap { /// /// Repeats texture in tiled mode /// Repeat = 0, /// /// Clamps texture to edge pixel in tiled mode /// Clamp, /// /// Mirrors and repeats the texture in tiled mode /// MirrorRepeat, /// /// Mirrors and clamps to border the texture in tiled mode /// MirrorClamp } /// /// Cubemap layouts /// public enum CubemapLayout { /// /// Automatically detect layout type /// AutoDetect = 0, /// /// Layout is defined by a vertical line with faces /// LineVertical, /// /// Layout is defined by a horizontal line with faces /// LineHorizontal, /// /// Layout is defined by a 3x4 cross with cubemap faces /// CrossThreeByFour, /// /// Layout is defined by a 4x3 cross with cubemap faces /// CrossFourByThree } /// /// Texture2D type
/// NOTE: Data stored in GPU memory ///
[StructLayout(LayoutKind.Sequential)] public struct Texture2D { /// /// OpenGL texture id /// public uint Id; /// /// Texture base width /// public int Width; /// /// Texture base height /// public int Height; /// /// Mipmap levels, 1 by default /// public int Mipmaps; /// /// Data format (PixelFormat type) /// public PixelFormat Format; /// /// Get width and height packed in a Vector2 /// public readonly Vector2 Dimensions => new Vector2(Width, Height); public readonly CBool IsValid => Raylib.IsTextureValid(this); public static Texture2D Load(string fileName) { return Raylib.LoadTexture(fileName); } public static Texture2D LoadFromImage(Image image) { return Raylib.LoadTextureFromImage(image); } public static Texture2D LoadFromMemory(string fileType, byte[] fileData) { Image img = Raylib.LoadImageFromMemory(fileType, fileData); Texture2D texture = Raylib.LoadTextureFromImage(img); Raylib.UnloadImage(img); return texture; } public void Unload() { Raylib.UnloadTexture(this); } public void SetFilter(TextureFilter filter) { Raylib.SetTextureFilter(this, filter); } public void SetWrap(TextureWrap wrap) { Raylib.SetTextureWrap(this, wrap); } public void Update(T[] pixels) where T : unmanaged { Raylib.UpdateTexture(this, pixels); } public readonly void Draw(int x, int y) { Raylib.DrawTexture(this, x, y, Color.White); } public readonly void Draw(int x, int y, Color color) { Raylib.DrawTexture(this, x, y, color); } public readonly void Draw(Vector2 position) { Raylib.DrawTextureV(this, position, Color.White); } public readonly void Draw(Vector2 position, Color color) { Raylib.DrawTextureV(this, position, color); } public readonly void Draw(Vector2 position, Vector2 origin) { Vector2 size = this.Dimensions; Rectangle source = new Rectangle(Vector2.Zero, size); Rectangle target = new Rectangle(position, size); Raylib.DrawTexturePro(this, source, target, origin, 0, Color.White); } public readonly void Draw(Vector2 position, Vector2 origin, Color color) { Vector2 size = this.Dimensions; Rectangle source = new Rectangle(Vector2.Zero, size); Rectangle target = new Rectangle(position, size); Raylib.DrawTexturePro(this, source, target, origin, 0, color); } public readonly void Draw(Vector2 position, float rotation, float scale) { Raylib.DrawTextureEx(this, position, rotation, scale, Color.White); } public readonly void Draw(Vector2 position, float rotation, float scale, Color color) { Raylib.DrawTextureEx(this, position, rotation, scale, color); } public readonly void Draw(Vector2 position, float rotation, Vector2 scale) { Draw(position, rotation, scale, Color.White); } public readonly void Draw(Vector2 position, float rotation, Vector2 scale, Color color) { Vector2 size = this.Dimensions; Rectangle source = new Rectangle(Vector2.Zero, size); Rectangle target = new Rectangle(position, size); target.Size *= scale; Raylib.DrawTexturePro(this, source, target, Vector2.Zero, rotation, color); } public readonly void Draw(Rectangle source, Rectangle dest) { Raylib.DrawTexturePro(this, source, dest, Vector2.Zero, 0, Color.White); } public readonly void Draw(Rectangle source, Rectangle dest, Vector2 origin) { Raylib.DrawTexturePro(this, source, dest, origin, 0, Color.White); } public readonly void Draw(Rectangle source, Rectangle dest, Vector2 origin, float rotation) { Raylib.DrawTexturePro(this, source, dest, origin, rotation, Color.White); } public readonly void Draw(Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color color) { Raylib.DrawTexturePro(this, source, dest, origin, rotation, color); } }