Refactored types into appropriate namespaces

This commit is contained in:
2017-03-01 02:37:01 -05:00
parent 71f4cd47da
commit 3de77f9ad6
13 changed files with 172 additions and 147 deletions

View File

@@ -2,40 +2,12 @@
using System.Runtime.InteropServices;
using Diamond.Shaders;
using Diamond.Util;
using Diamond.Wrappers;
using NLog;
using OpenTK.Graphics.OpenGL4;
namespace Diamond.Buffers
{
internal class GLBufferWrapper : GLWrapper
{
public BufferTarget Target { get; }
public BufferUsageHint Usage { get; set; }
internal GLBufferWrapper(BufferTarget target, BufferUsageHint usage)
{
Id = GL.GenBuffer();
Target = target;
Usage = usage;
}
public void Bind() => GL.BindBuffer(Target, Id);
public void Data<T>(int size, T[] data) where T : struct
{
Bind();
GL.BufferData(Target, (IntPtr) (size * data.Length), data, Usage);
}
public void SubData<T>(int size, int offset, int count, T[] data) where T : struct
{
Bind();
GL.BufferSubData(Target, (IntPtr) (offset * size), (IntPtr) (count * size), data);
}
public override void GLDelete() => GL.DeleteBuffer(Id);
}
public class GLBuffer<T> : GLObject where T : struct
{
private readonly GLBufferWrapper _buffer;

View File

@@ -52,13 +52,17 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Buffers\GLBuffer.cs" />
<Compile Include="Wrappers\GLBufferWrapper.cs" />
<Compile Include="GLObject.cs" />
<Compile Include="Wrappers\ProgramWrapper.cs" />
<Compile Include="Wrappers\ShaderWrapper.cs" />
<Compile Include="Wrappers\TextureWrapper.cs" />
<Compile Include="Util\SubArray.cs" />
<Compile Include="Buffers\VertexDataAttribute.cs" />
<Compile Include="GLWrapper.cs" />
<Compile Include="Wrappers\GLWrapper.cs" />
<Compile Include="Level\TileData.cs" />
<Compile Include="Mesh.cs" />
<Compile Include="ObjVertex.cs" />
<Compile Include="Util\Mesh.cs" />
<Compile Include="Util\ObjVertex.cs" />
<Compile Include="Shaders\Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Shaders\Shader.cs" />

View File

@@ -1,4 +1,5 @@
using System;
using Diamond.Wrappers;
using NLog;
namespace Diamond

View File

@@ -1,52 +1,11 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Diamond.Wrappers;
using NLog;
using OpenTK.Graphics.OpenGL4;
namespace Diamond.Shaders
{
internal class ProgramWrapper : GLWrapper
{
internal ProgramWrapper()
{
Id = GL.CreateProgram();
}
public int ActiveUniforms => Get(GetProgramParameterName.ActiveUniforms);
public int ActiveAttributes => Get(GetProgramParameterName.ActiveAttributes);
public bool Linked => Get(GetProgramParameterName.LinkStatus) != 0;
public int Get(GetProgramParameterName parameter)
{
GL.GetProgram(Id, parameter, out int res);
return res;
}
public void Link() => GL.LinkProgram(Id);
public string InfoLog => GL.GetProgramInfoLog(Id).Trim();
public void Attach(ShaderWrapper shader) => GL.AttachShader(Id, shader.Id);
public void Use() => GL.UseProgram(Id);
public string UniformName(int location)
{
var sb = new StringBuilder(64);
GL.GetActiveUniformName(Id, location, sb.Capacity, out int length, sb);
return sb.ToString();
}
public string AttributeName(int location)
{
var sb = new StringBuilder(64);
GL.GetActiveAttrib(Id, location, sb.Capacity, out int length, out int size, out ActiveAttribType type, sb);
return sb.ToString();
}
public override void GLDelete() => GL.DeleteProgram(Id);
}
public class Program : GLObject
{
internal static readonly Logger Logger = LogManager.GetCurrentClassLogger();

View File

@@ -1,48 +1,11 @@
using System.Collections.Generic;
using System.IO;
using System.Text;
using Diamond.Wrappers;
using NLog;
using OpenTK.Graphics.OpenGL4;
namespace Diamond.Shaders
{
internal sealed class ShaderWrapper : GLWrapper
{
internal ShaderWrapper(ShaderType shaderType)
{
Id = GL.CreateShader(shaderType);
ShaderType = shaderType;
}
public readonly ShaderType ShaderType;
public string Source
{
get
{
var sb = new StringBuilder(1024);
GL.GetShaderSource(Id, sb.Capacity, out int length, sb);
return sb.ToString();
}
set { GL.ShaderSource(Id, value); }
}
public bool Compiled
{
get
{
GL.GetShader(Id, ShaderParameter.CompileStatus, out int res);
return res != 0;
}
}
public string InfoLog => GL.GetShaderInfoLog(Id);
public void Compile() => GL.CompileShader(Id);
public override void GLDelete() => GL.DeleteShader(Id);
}
public class Shader : GLObject
{
internal static readonly Logger Logger = LogManager.GetCurrentClassLogger();

View File

@@ -1,40 +1,12 @@
using System;
using System.Drawing;
using System.Drawing;
using System.Drawing.Imaging;
using Diamond.Wrappers;
using NLog;
using OpenTK.Graphics.OpenGL4;
using PixelFormat = OpenTK.Graphics.OpenGL4.PixelFormat;
namespace Diamond.Textures
{
internal class TextureWrapper : GLWrapper
{
internal TextureWrapper(TextureTarget target)
{
Id = GL.GenTexture();
Target = target;
}
public readonly TextureTarget Target;
public void Bind() => GL.BindTexture(Target, Id);
public void Bind(int unit)
{
GL.ActiveTexture(TextureUnit.Texture0 + unit);
Bind();
}
public void TexParameter(TextureParameterName parameter, int value) => GL.TexParameter(Target, parameter,
value);
public void Image2D(PixelInternalFormat internalFormat, int width, int height, PixelFormat format,
PixelType type, IntPtr pixels) =>
GL.TexImage2D(Target, 0, internalFormat, width, height, 0, format, type, pixels);
public override void GLDelete() => GL.DeleteTexture(Id);
}
public class Texture : GLObject
{
internal static readonly Logger Logger = LogManager.GetCurrentClassLogger();

View File

@@ -2,11 +2,10 @@
using System.IO;
using System.Linq;
using Diamond.Buffers;
using Diamond.Util;
using OpenTK;
using OpenTK.Graphics.OpenGL4;
namespace Diamond
namespace Diamond.Util
{
public class Mesh<T> where T : struct
{

View File

@@ -1,7 +1,7 @@
using Diamond.Buffers;
using OpenTK;
namespace Diamond
namespace Diamond.Util
{
[VertexData]
public struct ObjVertex

View File

@@ -0,0 +1,34 @@
using System;
using OpenTK.Graphics.OpenGL4;
namespace Diamond.Wrappers
{
internal class GLBufferWrapper : GLWrapper
{
public BufferTarget Target { get; }
public BufferUsageHint Usage { get; set; }
internal GLBufferWrapper(BufferTarget target, BufferUsageHint usage)
{
Id = GL.GenBuffer();
Target = target;
Usage = usage;
}
public void Bind() => GL.BindBuffer(Target, Id);
public void Data<T>(int size, T[] data) where T : struct
{
Bind();
GL.BufferData(Target, (IntPtr) (size * data.Length), data, Usage);
}
public void SubData<T>(int size, int offset, int count, T[] data) where T : struct
{
Bind();
GL.BufferSubData(Target, (IntPtr) (offset * size), (IntPtr) (count * size), data);
}
public override void GLDelete() => GL.DeleteBuffer(Id);
}
}

View File

@@ -1,8 +1,8 @@
using System;
using OpenTK.Graphics;
using NLog;
using OpenTK.Graphics;
namespace Diamond
namespace Diamond.Wrappers
{
internal abstract class GLWrapper : IDisposable
{

View File

@@ -0,0 +1,46 @@
using System.Text;
using OpenTK.Graphics.OpenGL4;
namespace Diamond.Wrappers
{
internal class ProgramWrapper : GLWrapper
{
internal ProgramWrapper()
{
Id = GL.CreateProgram();
}
public int ActiveUniforms => Get(GetProgramParameterName.ActiveUniforms);
public int ActiveAttributes => Get(GetProgramParameterName.ActiveAttributes);
public bool Linked => Get(GetProgramParameterName.LinkStatus) != 0;
public int Get(GetProgramParameterName parameter)
{
GL.GetProgram(Id, parameter, out int res);
return res;
}
public void Link() => GL.LinkProgram(Id);
public string InfoLog => GL.GetProgramInfoLog(Id).Trim();
public void Attach(ShaderWrapper shader) => GL.AttachShader(Id, shader.Id);
public void Use() => GL.UseProgram(Id);
public string UniformName(int location)
{
var sb = new StringBuilder(64);
GL.GetActiveUniformName(Id, location, sb.Capacity, out int length, sb);
return sb.ToString();
}
public string AttributeName(int location)
{
var sb = new StringBuilder(64);
GL.GetActiveAttrib(Id, location, sb.Capacity, out int length, out int size, out ActiveAttribType type, sb);
return sb.ToString();
}
public override void GLDelete() => GL.DeleteProgram(Id);
}
}

View File

@@ -0,0 +1,42 @@
using System.Text;
using OpenTK.Graphics.OpenGL4;
namespace Diamond.Wrappers
{
internal sealed class ShaderWrapper : GLWrapper
{
internal ShaderWrapper(ShaderType shaderType)
{
Id = GL.CreateShader(shaderType);
ShaderType = shaderType;
}
public readonly ShaderType ShaderType;
public string Source
{
get
{
var sb = new StringBuilder(1024);
GL.GetShaderSource(Id, sb.Capacity, out int length, sb);
return sb.ToString();
}
set { GL.ShaderSource(Id, value); }
}
public bool Compiled
{
get
{
GL.GetShader(Id, ShaderParameter.CompileStatus, out int res);
return res != 0;
}
}
public string InfoLog => GL.GetShaderInfoLog(Id);
public void Compile() => GL.CompileShader(Id);
public override void GLDelete() => GL.DeleteShader(Id);
}
}

View File

@@ -0,0 +1,33 @@
using System;
using OpenTK.Graphics.OpenGL4;
namespace Diamond.Wrappers
{
internal class TextureWrapper : GLWrapper
{
internal TextureWrapper(TextureTarget target)
{
Id = GL.GenTexture();
Target = target;
}
public readonly TextureTarget Target;
public void Bind() => GL.BindTexture(Target, Id);
public void Bind(int unit)
{
GL.ActiveTexture(TextureUnit.Texture0 + unit);
Bind();
}
public void TexParameter(TextureParameterName parameter, int value) => GL.TexParameter(Target, parameter,
value);
public void Image2D(PixelInternalFormat internalFormat, int width, int height, PixelFormat format,
PixelType type, IntPtr pixels) =>
GL.TexImage2D(Target, 0, internalFormat, width, height, 0, format, type, pixels);
public override void GLDelete() => GL.DeleteTexture(Id);
}
}