Files
PCK-Studio/MinecraftUSkinEditor/Classes/StoneVOX/QFont/TexturePage.cs
PhoenixARC 10f1c8daa0 update
2021-08-09 19:05:20 -04:00

96 lines
2.7 KiB
C#

using OpenTK.Graphics.OpenGL;
using System;
using System.Drawing.Imaging;
namespace QuickFont
{
internal class TexturePage : IDisposable
{
int gLTexID;
int width;
int height;
public int GLTexID { get { return gLTexID; } }
public int Width { get { return width; } }
public int Height { get { return height; } }
public TexturePage(string filePath)
{
var bitmap = new QBitmap(filePath);
CreateTexture(bitmap.bitmapData);
bitmap.Free();
}
public TexturePage(BitmapData dataSource)
{
CreateTexture(dataSource);
}
private void CreateTexture(BitmapData dataSource)
{
width = dataSource.Width;
height = dataSource.Height;
GL.Enable(EnableCap.Texture2D);
GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
GL.GenTextures(1, out gLTexID);
GL.BindTexture(TextureTarget.Texture2D, gLTexID);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Clamp);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Clamp);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0,
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, dataSource.Scan0);
}
#region IDisposable
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
//Note: finalizer NOT included. .Net runs finalizer on a separate thread,
//which means that it does not know about the OpenGL context.
/*
~TexturePage()
{
// Finalizer calls Dispose(false)
Dispose(false);
}*/
// The bulk of the clean-up code is implemented in Dispose(bool)
private bool deletedTexture = false;
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
//dispose managed resources here - if there were any!
}
//free managed resources here (if there were any!)
if (!deletedTexture)
{
GL.DeleteTexture(gLTexID);
deletedTexture = true;
}
}
#endregion
}
}