More OO-like. a bit easier to read/use things
This commit is contained in:
74
hexworld/Util/Texture.cs
Normal file
74
hexworld/Util/Texture.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using OpenTK.Graphics.OpenGL4;
|
||||
using PixelFormat = OpenTK.Graphics.OpenGL4.PixelFormat;
|
||||
|
||||
namespace hexworld.Util
|
||||
{
|
||||
// todo: this structure doesn't fit GL at all. need to fix it.
|
||||
// need to reconcile ActiveTexture and BindTexture
|
||||
public class Texture : GLObject
|
||||
{
|
||||
public TextureTarget Target;
|
||||
|
||||
public Texture(TextureTarget target = TextureTarget.Texture2D)
|
||||
: base((uint) GL.GenTexture())
|
||||
{
|
||||
Target = target;
|
||||
}
|
||||
|
||||
public void Bind()
|
||||
{
|
||||
GL.BindTexture(Target, Id);
|
||||
}
|
||||
|
||||
public void Bind(TextureUnit unit)
|
||||
{
|
||||
GL.ActiveTexture(unit);
|
||||
Bind();
|
||||
}
|
||||
|
||||
public void Bind(int unit)
|
||||
{
|
||||
GL.ActiveTexture(TextureUnit.Texture0 + unit);
|
||||
Bind();
|
||||
}
|
||||
|
||||
public void Unbind()
|
||||
{
|
||||
GL.BindTexture(Target, 0);
|
||||
}
|
||||
|
||||
public void Unbind(TextureUnit unit)
|
||||
{
|
||||
GL.ActiveTexture(unit);
|
||||
Unbind();
|
||||
}
|
||||
|
||||
public void Unbind(int unit)
|
||||
{
|
||||
GL.ActiveTexture(TextureUnit.Texture0 + unit);
|
||||
Unbind();
|
||||
}
|
||||
|
||||
public static Texture FromBitmap(Bitmap bmp)
|
||||
{
|
||||
var tex = new Texture(TextureTarget.Texture2D);
|
||||
tex.Bind();
|
||||
GL.TexParameter(tex.Target, TextureParameterName.TextureMinFilter, (int) TextureMinFilter.Nearest);
|
||||
GL.TexParameter(tex.Target, TextureParameterName.TextureMagFilter, (int) TextureMagFilter.Nearest);
|
||||
var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly,
|
||||
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
||||
GL.TexImage2D(tex.Target, 0, PixelInternalFormat.Rgba, bmp.Width, bmp.Height, 0, PixelFormat.Bgra,
|
||||
PixelType.UnsignedByte, data.Scan0);
|
||||
bmp.UnlockBits(data);
|
||||
tex.Unbind();
|
||||
return tex;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user