mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-07-18 21:58:09 +00:00
Move Common functionality to Core project & rendering and Model support as well
This commit is contained in:
109
PckStudio.Rendering/Texture/Texture.cs
Normal file
109
PckStudio.Rendering/Texture/Texture.cs
Normal file
@@ -0,0 +1,109 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user