From df220965487f6d3db596d69d1c413ec819302d28 Mon Sep 17 00:00:00 2001 From: MDietermann Date: Thu, 28 May 2026 12:14:11 +0200 Subject: [PATCH] feat: add texture loader and placeholder atlas --- Assets/textures/atlas.png | Bin 0 -> 236 bytes Rendering/Texture.cs | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 Assets/textures/atlas.png create mode 100644 Rendering/Texture.cs diff --git a/Assets/textures/atlas.png b/Assets/textures/atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..943844a32621b67aa496dd73b26332d88df088cb GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*2^&7srqY_qP`oiXL(hVK`{w%IeX@5xT&? z)hI~oN9pHtb%v~O7I8FucN(F(C^K xXEE{yL7?#h$5mjM#b)AR3WjGJ*j7TI{V7j{4*lzItbmST@O1TaS?83{1OUSNPa^;T literal 0 HcmV?d00001 diff --git a/Rendering/Texture.cs b/Rendering/Texture.cs new file mode 100644 index 0000000..7895720 --- /dev/null +++ b/Rendering/Texture.cs @@ -0,0 +1,35 @@ +using OpenTK.Graphics.OpenGL4; +using StbImageSharp; + +namespace VoxelEngine.Rendering; + +public sealed class Texture : IDisposable +{ + private readonly int _handle; + + public Texture(string path) + { + _handle = GL.GenTexture(); + GL.BindTexture(TextureTarget.Texture2D, _handle); + + StbImage.stbi_set_flip_vertically_on_load(1); + using FileStream stream = File.OpenRead(path); + ImageResult image = ImageResult.FromStream(stream, ColorComponents.RedGreenBlueAlpha); + + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, + image.Width, image.Height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, image.Data); + + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge); + } + + public void Use(TextureUnit unit = TextureUnit.Texture0) + { + GL.ActiveTexture(unit); + GL.BindTexture(TextureTarget.Texture2D, _handle); + } + + public void Dispose() => GL.DeleteTexture(_handle); +}