mirror of
https://github.com/4sval/FModel.git
synced 2026-07-28 06:19:43 -05:00
47 lines
1.5 KiB
C#
47 lines
1.5 KiB
C#
using Silk.NET.OpenGL;
|
|
using System;
|
|
|
|
namespace FModel.Views.Snooper;
|
|
|
|
public class Texture : IDisposable
|
|
{
|
|
private uint _handle;
|
|
private GL _gl;
|
|
|
|
public unsafe Texture(GL gl, byte[] data, uint width, uint height)
|
|
{
|
|
_gl = gl;
|
|
|
|
_handle = _gl.GenTexture();
|
|
Bind(TextureUnit.Texture0);
|
|
|
|
fixed (void* d = &data[0])
|
|
{
|
|
_gl.TexImage2D(TextureTarget.Texture2D, 0, (int) InternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, d);
|
|
SetParameters();
|
|
}
|
|
}
|
|
|
|
private void SetParameters()
|
|
{
|
|
_gl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int) GLEnum.ClampToEdge);
|
|
_gl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int) GLEnum.ClampToEdge);
|
|
_gl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int) GLEnum.LinearMipmapLinear);
|
|
_gl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int) GLEnum.Linear);
|
|
_gl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBaseLevel, 0);
|
|
_gl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMaxLevel, 8);
|
|
_gl.GenerateMipmap(TextureTarget.Texture2D);
|
|
}
|
|
|
|
public void Bind(TextureUnit textureSlot)
|
|
{
|
|
_gl.ActiveTexture(textureSlot);
|
|
_gl.BindTexture(TextureTarget.Texture2D, _handle);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_gl.DeleteTexture(_handle);
|
|
}
|
|
}
|