43 lines
1.5 KiB
C#
43 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
} |