using System; using NW4RTools; using NW4RTools.Models; using OpenTK; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL; namespace NW4RTools.Models.OpenGL { public class GLTexture : IDisposable { public readonly int TextureID; public GLTexture() { TextureID = GL.GenTexture(); } void IDisposable.Dispose() { GL.DeleteTexture(TextureID); } public void Load(Texture tex) { Bind(TextureTarget.Texture2D); // todo: check if this is configurable GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMagFilter.Linear); //byte[] pixelData = new byte[tex.BaseImage.Width * tex.BaseImage.Height * 4]; // TODO: mipmaps var lb = tex.Images[0].LockBits( new System.Drawing.Rectangle(0, 0, tex.Images[0].Width, tex.Images[0].Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Four, tex.Images[0].Width, tex.Images[0].Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, lb.Scan0); tex.Images[0].UnlockBits(lb); } public void Bind(TextureTarget target) { GL.BindTexture(target, TextureID); } } }