mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-05-22 21:55:30 +00:00
110 lines
2.7 KiB
C#
110 lines
2.7 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using OpenTK;
|
|
using OpenTK.Graphics.OpenGL;
|
|
|
|
namespace PckStudio.Rendering.Texture
|
|
{
|
|
public abstract class Texture : IDisposable
|
|
{
|
|
protected readonly int _GL_Id;
|
|
|
|
protected readonly TextureTarget Target;
|
|
|
|
public PixelFormat PixelFormat { get; set; }
|
|
public PixelInternalFormat InternalPixelFormat { get; set; }
|
|
|
|
public TextureMinFilter MinFilter
|
|
{
|
|
get => minFilter;
|
|
set
|
|
{
|
|
minFilter = value;
|
|
SetTexParameter(TextureParameterName.TextureMinFilter, (int)value);
|
|
}
|
|
}
|
|
|
|
public TextureMagFilter MagFilter
|
|
{
|
|
get => magFilter;
|
|
set
|
|
{
|
|
magFilter = value;
|
|
SetTexParameter(TextureParameterName.TextureMagFilter, (int)value);
|
|
}
|
|
}
|
|
|
|
public TextureWrapMode WrapS
|
|
{
|
|
get => wrapS;
|
|
set
|
|
{
|
|
wrapS = value;
|
|
SetTexParameter(TextureParameterName.TextureWrapS, (int)value);
|
|
}
|
|
}
|
|
|
|
public TextureWrapMode WrapT
|
|
{
|
|
get => wrapT;
|
|
set
|
|
{
|
|
wrapT = value;
|
|
SetTexParameter(TextureParameterName.TextureWrapT, (int)value);
|
|
}
|
|
}
|
|
|
|
public TextureWrapMode WrapR
|
|
{
|
|
get => wrapR;
|
|
set
|
|
{
|
|
wrapR = value;
|
|
SetTexParameter(TextureParameterName.TextureWrapR, (int)value);
|
|
}
|
|
}
|
|
|
|
private TextureMinFilter minFilter;
|
|
private TextureMagFilter magFilter;
|
|
private TextureWrapMode wrapS;
|
|
private TextureWrapMode wrapT;
|
|
private TextureWrapMode wrapR;
|
|
|
|
protected Texture(TextureTarget target)
|
|
{
|
|
_GL_Id = GL.GenTexture();
|
|
Target = target;
|
|
}
|
|
|
|
public virtual void SetTexture(Image image)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public void Bind(int slot = 0)
|
|
{
|
|
GL.ActiveTexture(TextureUnit.Texture0 + slot);
|
|
GL.BindTexture(Target, _GL_Id);
|
|
}
|
|
|
|
public void Unbind()
|
|
{
|
|
GL.BindTexture(Target, 0);
|
|
}
|
|
|
|
private void SetTexParameter(TextureParameterName parameterName, int value)
|
|
{
|
|
Bind();
|
|
GL.TexParameter(Target, parameterName, value);
|
|
Debug.WriteLineIf(GL.GetError() != ErrorCode.NoError, $"{Target}: {parameterName} = {value}");
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Unbind();
|
|
GL.DeleteTexture(_GL_Id);
|
|
}
|
|
}
|
|
}
|