using OpenTK.Graphics.OpenGL4; using StbImageSharp; namespace Voxel { public class Texture { private int _handle; private string _path; public Texture(string path) { _handle = GL.GenTexture(); _path = path; LoadFromFile(); } private void LoadFromFile() { StbImage.stbi_set_flip_vertically_on_load(1); ImageResult image = ImageResult.FromStream(File.OpenRead(_path), ColorComponents.RedGreenBlueAlpha); GL.BindTexture(TextureTarget.Texture2D, _handle); 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.Repeat); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat); } public void Bind(TextureUnit unit = TextureUnit.Texture0) { GL.ActiveTexture(unit); GL.BindTexture(TextureTarget.Texture2D, _handle); } } }