Wrapper and GLObject each have one logger instance - all globjects and wrappers use that logger
This commit is contained in:
@@ -42,8 +42,8 @@ namespace Diamond.Buffers
|
||||
{
|
||||
if (_vdi == null)
|
||||
{
|
||||
var exception = new InvalidOperationException($"Cannot use type {typeof(T)} to create a VertexBuffer");
|
||||
GLBuffer.Logger.Error(exception);
|
||||
var exception = new InvalidOperationException($"Cannot use type {typeof(T)} to create a Vertex Buffer");
|
||||
Logger.Error(exception);
|
||||
throw exception;
|
||||
}
|
||||
|
||||
@@ -56,15 +56,11 @@ namespace Diamond.Buffers
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString() => Name == null ? $"{Target} ({Id})" : $"{Target} {Name} ({Id})";
|
||||
}
|
||||
public override string ToString() => Name == null
|
||||
? $"Buffer<{typeof(T).Name}> {Target} ({Id})"
|
||||
: $"Buffer<{typeof(T).Name}> {Target} {Name} ({Id})";
|
||||
|
||||
public static class GLBuffer
|
||||
{
|
||||
internal static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
public static Buffer<T> Empty<T>(BufferTarget target, BufferUsageHint usage = BufferUsageHint.StaticDraw,
|
||||
string name = null) where T : struct
|
||||
internal static Buffer<T> Empty(BufferTarget target, BufferUsageHint usage, string name)
|
||||
{
|
||||
var wrapper = new BufferWrap(target, usage);
|
||||
var service = new Buffer<T>(wrapper, name);
|
||||
@@ -74,15 +70,23 @@ namespace Diamond.Buffers
|
||||
return service;
|
||||
}
|
||||
|
||||
public static Buffer<T> FromData<T>(T[] data, BufferTarget target,
|
||||
BufferUsageHint usage = BufferUsageHint.StaticDraw,
|
||||
string name = null) where T : struct
|
||||
internal static Buffer<T> FromData(T[] data, BufferTarget target, BufferUsageHint usage, string name = null)
|
||||
{
|
||||
var service = Empty<T>(target, usage, name);
|
||||
var service = Empty(target, usage, name);
|
||||
|
||||
service?.Data(data);
|
||||
|
||||
return service;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Buffer
|
||||
{
|
||||
public static Buffer<T> Empty<T>(BufferTarget target, BufferUsageHint usage = BufferUsageHint.StaticDraw,
|
||||
string name = null) where T : struct => Buffer<T>.Empty(target, usage, name);
|
||||
|
||||
public static Buffer<T> FromData<T>(T[] data, BufferTarget target,
|
||||
BufferUsageHint usage = BufferUsageHint.StaticDraw,
|
||||
string name = null) where T : struct => Buffer<T>.FromData(data, target, usage, name);
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ namespace Diamond
|
||||
{
|
||||
public abstract class GLObject : IDisposable
|
||||
{
|
||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
protected static readonly Logger Logger = LogManager.GetLogger("GLObject");
|
||||
|
||||
private bool _disposed;
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace Diamond
|
||||
|
||||
if (disposing)
|
||||
{
|
||||
Logger.Debug("Disposing {0}", this);
|
||||
Wrapper.Dispose();
|
||||
}
|
||||
|
||||
|
||||
@@ -2173,7 +2173,7 @@
|
||||
<xs:extension base="Target">
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="name" minOccurs="0" maxOccurs="1" shaderType="xs:string" />
|
||||
<xs:element name="autoCreate" minOccurs="0" maxOccurs="1" shaderType="xs:boolean" />
|
||||
<xs:element name="autoGLCreate" minOccurs="0" maxOccurs="1" shaderType="xs:boolean" />
|
||||
<xs:element name="categoryName" minOccurs="0" maxOccurs="1" shaderType="xs:string" />
|
||||
<xs:element name="counterHelp" minOccurs="0" maxOccurs="1" shaderType="xs:string" />
|
||||
<xs:element name="counterName" minOccurs="0" maxOccurs="1" shaderType="xs:string" />
|
||||
@@ -2187,7 +2187,7 @@
|
||||
<xs:documentation>Name of the target.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="autoCreate" shaderType="xs:boolean">
|
||||
<xs:attribute name="autoGLCreate" shaderType="xs:boolean">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Indicates whether performance counter should be automatically created.</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
@@ -8,14 +8,11 @@ namespace Diamond.Shaders
|
||||
{
|
||||
public class Program : GLObject
|
||||
{
|
||||
internal static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
internal ProgramWrap _program;
|
||||
private readonly ProgramWrap _program;
|
||||
internal override Wrapper Wrapper => _program;
|
||||
|
||||
public static Program Current { get; private set; }
|
||||
|
||||
private readonly List<Shader> _shaders = new List<Shader>();
|
||||
private readonly Dictionary<string, int> _uniforms = new Dictionary<string, int>();
|
||||
private readonly Dictionary<string, int> _attributes = new Dictionary<string, int>();
|
||||
|
||||
@@ -73,7 +70,6 @@ namespace Diamond.Shaders
|
||||
|
||||
private void Attach(Shader shader)
|
||||
{
|
||||
_shaders.Add(shader);
|
||||
_program.Attach((ShaderWrap) shader.Wrapper);
|
||||
}
|
||||
|
||||
@@ -81,9 +77,6 @@ namespace Diamond.Shaders
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
foreach (var shader in _shaders)
|
||||
shader.Dispose();
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
@@ -143,7 +136,17 @@ namespace Diamond.Shaders
|
||||
return FromShaders(name, shaderList);
|
||||
}
|
||||
|
||||
public static Program FromFiles(params string[] paths) => FromShaders(paths.Select(Shader.FromFile));
|
||||
public static Program FromFiles(params string[] paths)
|
||||
{
|
||||
var shaders = paths.Select(Shader.FromFile).ToList();
|
||||
|
||||
var program = FromShaders(shaders);
|
||||
|
||||
foreach (var shader in shaders)
|
||||
shader.Dispose();
|
||||
|
||||
return program;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -8,8 +8,6 @@ namespace Diamond.Shaders
|
||||
{
|
||||
public class Shader : GLObject
|
||||
{
|
||||
internal static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private readonly ShaderWrap _shader;
|
||||
internal override Wrapper Wrapper => _shader;
|
||||
|
||||
@@ -35,7 +33,7 @@ namespace Diamond.Shaders
|
||||
[".fs"] = ShaderType.FragmentShader,
|
||||
[".frag"] = ShaderType.FragmentShader,
|
||||
};
|
||||
|
||||
|
||||
public static Shader FromSource(string source, ShaderType type, string name = "Shader")
|
||||
{
|
||||
var wrapper = new ShaderWrap(type);
|
||||
@@ -82,7 +80,6 @@ namespace Diamond.Shaders
|
||||
var ext = Path.GetExtension(path);
|
||||
var name = Path.GetFileNameWithoutExtension(path);
|
||||
|
||||
|
||||
if (ext != null)
|
||||
if (!Extensions.ContainsKey(ext))
|
||||
ext = Path.GetExtension(name);
|
||||
@@ -94,6 +91,7 @@ namespace Diamond.Shaders
|
||||
}
|
||||
|
||||
var type = Extensions[ext];
|
||||
|
||||
return FromFile(path, type);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,8 +9,6 @@ namespace Diamond.Textures
|
||||
{
|
||||
public class Texture : GLObject
|
||||
{
|
||||
internal static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private readonly TextureWrap _texture;
|
||||
internal override Wrapper Wrapper => _texture;
|
||||
|
||||
@@ -27,29 +25,33 @@ namespace Diamond.Textures
|
||||
|
||||
public override string ToString() => Name == null ? $"{Target} ({Id})" : $"{Target} \'{Name}\' ({Id})";
|
||||
|
||||
#region Factory Methods
|
||||
|
||||
public static Texture FromBitmap(Bitmap bmp, string name = null)
|
||||
{
|
||||
var wrapper= new TextureWrap(TextureTarget.Texture2D);
|
||||
var wrapper = new TextureWrap(TextureTarget.Texture2D);
|
||||
var service = new Texture(wrapper, null);
|
||||
|
||||
Logger.Debug("Created texture {0}", service);
|
||||
Logger.Debug("Created Texture {0}", service);
|
||||
|
||||
wrapper.Bind();
|
||||
wrapper.TexParameter(TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
|
||||
wrapper.TexParameter(TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
|
||||
wrapper.TexParameter(TextureParameterName.TextureMinFilter, (int) TextureMinFilter.Nearest);
|
||||
wrapper.TexParameter(TextureParameterName.TextureMagFilter, (int) TextureMagFilter.Nearest);
|
||||
|
||||
var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly,
|
||||
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
||||
wrapper.Image2D(PixelInternalFormat.Rgba, bmp.Width,bmp.Height,PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
|
||||
wrapper.Image2D(PixelInternalFormat.Rgba, bmp.Width, bmp.Height, PixelFormat.Bgra, PixelType.UnsignedByte,
|
||||
data.Scan0);
|
||||
bmp.UnlockBits(data);
|
||||
|
||||
return service;
|
||||
}
|
||||
|
||||
|
||||
public static Texture FromFile(string path)
|
||||
{
|
||||
return FromBitmap(new Bitmap(path));
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -5,16 +5,16 @@ namespace Diamond.Wrappers
|
||||
{
|
||||
internal sealed class BufferWrap : Wrapper
|
||||
{
|
||||
#region Constructor, Delete()
|
||||
#region Constructor, GLDelete()
|
||||
|
||||
internal BufferWrap(BufferTarget target, BufferUsageHint usage)
|
||||
: base(GL.GenBuffer())
|
||||
{
|
||||
Id = GL.GenBuffer();
|
||||
Target = target;
|
||||
Usage = usage;
|
||||
}
|
||||
|
||||
public override void Delete() => GL.DeleteBuffer(Id);
|
||||
protected override void GLDelete() => GL.DeleteBuffer(Id);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@ namespace Diamond.Wrappers
|
||||
{
|
||||
internal sealed class ProgramWrap : Wrapper
|
||||
{
|
||||
#region Constructor, Delete()
|
||||
#region Constructor, GLDelete()
|
||||
|
||||
internal ProgramWrap()
|
||||
: base(GL.CreateProgram())
|
||||
{
|
||||
Id = GL.CreateProgram();
|
||||
}
|
||||
|
||||
public override void Delete() => GL.DeleteProgram(Id);
|
||||
protected override void GLDelete() => GL.DeleteProgram(Id);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -5,15 +5,15 @@ namespace Diamond.Wrappers
|
||||
{
|
||||
internal sealed class ShaderWrap : Wrapper
|
||||
{
|
||||
#region Constructor, Delete()
|
||||
#region Constructor, GLDelete()
|
||||
|
||||
internal ShaderWrap(ShaderType shaderType)
|
||||
: base(GL.CreateShader(shaderType))
|
||||
{
|
||||
Id = GL.CreateShader(shaderType);
|
||||
ShaderType = shaderType;
|
||||
}
|
||||
|
||||
public override void Delete() => GL.DeleteShader(Id);
|
||||
protected override void GLDelete() => GL.DeleteShader(Id);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -5,15 +5,15 @@ namespace Diamond.Wrappers
|
||||
{
|
||||
internal sealed class TextureWrap : Wrapper
|
||||
{
|
||||
#region Constructor, Delete()
|
||||
#region Constructor, GLDelete()
|
||||
|
||||
internal TextureWrap(TextureTarget target)
|
||||
: base(GL.GenTexture())
|
||||
{
|
||||
Id = GL.GenTexture();
|
||||
Target = target;
|
||||
}
|
||||
|
||||
public override void Delete() => GL.DeleteTexture(Id);
|
||||
protected override void GLDelete() => GL.DeleteTexture(Id);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -6,15 +6,20 @@ namespace Diamond.Wrappers
|
||||
{
|
||||
internal abstract class Wrapper : IDisposable
|
||||
{
|
||||
private static readonly Logger Logger = LogManager.GetLogger("OpenGL Wrapper");
|
||||
protected static readonly Logger Logger = LogManager.GetLogger("Wrapper");
|
||||
|
||||
public int Id { get; protected set; }
|
||||
public int Id { get; private set; }
|
||||
|
||||
public static explicit operator int(Wrapper o) => o.Id;
|
||||
|
||||
protected Wrapper(int id)
|
||||
{
|
||||
Id = id;
|
||||
}
|
||||
|
||||
#region IDisposable
|
||||
|
||||
public abstract void Delete();
|
||||
protected abstract void GLDelete();
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
@@ -26,7 +31,7 @@ namespace Diamond.Wrappers
|
||||
if (GraphicsContext.CurrentContext == null)
|
||||
Logger.Error("No graphics context, cannot delete {0}", this);
|
||||
else
|
||||
Delete();
|
||||
GLDelete();
|
||||
|
||||
Id = 0;
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ using Newtonsoft.Json.Linq;
|
||||
using OpenTK;
|
||||
using OpenTK.Graphics;
|
||||
using OpenTK.Graphics.OpenGL4;
|
||||
using Buffer = Diamond.Buffers.Buffer;
|
||||
|
||||
namespace hexworld
|
||||
{
|
||||
@@ -96,9 +97,9 @@ namespace hexworld
|
||||
|
||||
_cubeMesh = cubeMesh;
|
||||
|
||||
_tileBuffer = GLBuffer.FromData(SubArray.Join(_doorTiles, _floorTiles), BufferTarget.ArrayBuffer,
|
||||
_tileBuffer = Buffer.FromData(SubArray.Join(_doorTiles, _floorTiles), BufferTarget.ArrayBuffer,
|
||||
BufferUsageHint.DynamicDraw, "tile");
|
||||
_meshBuffer = GLBuffer.FromData(cubeMesh.Vertices.ToArray(), BufferTarget.ArrayBuffer,
|
||||
_meshBuffer = Buffer.FromData(cubeMesh.Vertices.ToArray(), BufferTarget.ArrayBuffer,
|
||||
BufferUsageHint.StaticDraw, "mesh");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user