Finished untested texture data.
This commit is contained in:
parent
d31a2cb744
commit
4f7c7dccb1
@ -1,6 +1,12 @@
|
|||||||
|
using OpenTK;
|
||||||
namespace RecrownedGTK.Graphics {
|
namespace RecrownedGTK.Graphics {
|
||||||
public interface IDrawable
|
public interface IDrawable
|
||||||
{
|
{
|
||||||
void Draw(out float[] vertices, out float[] indices, out TextureData textureData);
|
/// <summary>
|
||||||
|
/// Fills the parameters with the information needed to draw this texture.!--
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="vertices">The vertices in pairs of 3 normalized in the order x, y, and z.</param>
|
||||||
|
/// <param name="textureData">The texture data to be used. Can be null.</param>
|
||||||
|
void Draw(out VertexInformation[] vertices, out TextureData textureData);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,7 +3,7 @@ namespace RecrownedGTK.Graphics {
|
|||||||
public Texture() {
|
public Texture() {
|
||||||
|
|
||||||
}
|
}
|
||||||
public void Draw(out float[] vertices, out float[] indices, out TextureData textureData) {
|
public void Draw(out VertexInformation[] vertices, out TextureData textureData) {
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
//TODO: Implement this.
|
//TODO: Implement this.
|
||||||
}
|
}
|
||||||
|
@ -1,35 +1,70 @@
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using OpenTK.Graphics.OpenGL;
|
using OpenTK.Graphics.OpenGL;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
using System;
|
||||||
namespace RecrownedGTK.Graphics {
|
namespace RecrownedGTK.Graphics {
|
||||||
public class TextureData {
|
public class TextureData : IDisposable {
|
||||||
|
private bool disposed;
|
||||||
int handle;
|
int handle;
|
||||||
byte[] textureData;
|
|
||||||
public byte[] ColorData {
|
public TextureWrapMode textureWrapModeWidth, textureWrapModeHeight;
|
||||||
get {
|
public Color4 borderColor;
|
||||||
return textureData;
|
public TextureMinFilter textureMinFilter;
|
||||||
}
|
public TextureMagFilter textureMagFilter;
|
||||||
}
|
|
||||||
|
|
||||||
public TextureData(string path) {
|
public TextureData(string path) {
|
||||||
LoadFromPNG(path);
|
byte[] textureData = null;
|
||||||
}
|
int width;
|
||||||
public TextureData() {
|
int height;
|
||||||
//TODO: Finish this class.
|
|
||||||
}
|
|
||||||
public TextureData(byte[] textureData, int width, int height, int mipmap = 0) {
|
|
||||||
this.textureData = textureData;
|
|
||||||
GL.TexImage2D(TextureTarget.Texture2D, mipmap, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, textureData);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void LoadFromPNG(string path) {
|
|
||||||
using (FileStream file = new FileStream(path, FileMode.Open)) {
|
using (FileStream file = new FileStream(path, FileMode.Open)) {
|
||||||
using (Bitmap bitmap = new Bitmap(file)) {
|
using (Bitmap bitmap = new Bitmap(file)) {
|
||||||
ImageConverter converter = new ImageConverter();
|
ImageConverter converter = new ImageConverter();
|
||||||
textureData = (byte[]) converter.ConvertTo(bitmap, typeof(byte[]));
|
textureData = (byte[]) converter.ConvertTo(bitmap, typeof(byte[]));
|
||||||
|
width = bitmap.Width;
|
||||||
|
height = bitmap.Height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GenerateTexture(textureData, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextureData(byte[] textureData, int width, int height) {
|
||||||
|
textureWrapModeHeight = TextureWrapMode.ClampToBorder;
|
||||||
|
textureWrapModeWidth = TextureWrapMode.ClampToBorder;
|
||||||
|
textureMinFilter = TextureMinFilter.LinearMipmapLinear;
|
||||||
|
textureMagFilter = TextureMagFilter.Linear;
|
||||||
|
|
||||||
|
GenerateTexture(textureData, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GenerateTexture(byte[] textureData, int width, int height) {
|
||||||
|
if (handle != 0) throw new InvalidOperationException("This texture data already holds a texture.");
|
||||||
|
handle = GL.GenTexture();
|
||||||
|
Use();
|
||||||
|
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, textureData);
|
||||||
|
GL.GenerateMipmap(GenerateMipmapTarget.Texture2D);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Use() {
|
||||||
|
GL.BindTexture(TextureTarget.Texture2D, handle);
|
||||||
|
}
|
||||||
|
public void Dispose() {
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Dispose(bool disposing = false) {
|
||||||
|
if (disposed) return;
|
||||||
|
if (disposing) {
|
||||||
|
}
|
||||||
|
GL.BindTexture(TextureTarget.Texture2D, 0);
|
||||||
|
GL.DeleteTexture(handle);
|
||||||
|
disposed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
~TextureData() {
|
||||||
|
Dispose(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
10
RecrownedGTK/Graphics/VertexInformation.cs
Normal file
10
RecrownedGTK/Graphics/VertexInformation.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
namespace RecrownedGTK.Graphics {
|
||||||
|
public struct VertexInformation {
|
||||||
|
public Vector3 vertexCoords;
|
||||||
|
public uint[] indices;
|
||||||
|
public Color4 color;
|
||||||
|
public Vector2 textureCoords;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user