diff --git a/BizHawk.Emulation.Common/Base Implementations/BasicServiceProvider.cs b/BizHawk.Emulation.Common/Base Implementations/BasicServiceProvider.cs
index d1d7753c70..56a90e1004 100644
--- a/BizHawk.Emulation.Common/Base Implementations/BasicServiceProvider.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/BasicServiceProvider.cs
@@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Common
///
public class BasicServiceProvider : IEmulatorServiceProvider
{
- private Dictionary Services = new Dictionary();
+ private readonly Dictionary Services = new Dictionary();
public BasicServiceProvider(IEmulator core)
{
diff --git a/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs b/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs
index b31010f11b..580c1cce46 100644
--- a/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/CallbackBasedTraceBuffer.cs
@@ -63,6 +63,7 @@ namespace BizHawk.Emulation.Common
{
return _sink;
}
+
set
{
_sink = value;
diff --git a/BizHawk.Emulation.Common/Base Implementations/ControllerDefinition.cs b/BizHawk.Emulation.Common/Base Implementations/ControllerDefinition.cs
index 935fd4520b..57a3bb9cd1 100644
--- a/BizHawk.Emulation.Common/Base Implementations/ControllerDefinition.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/ControllerDefinition.cs
@@ -31,37 +31,37 @@ namespace BizHawk.Emulation.Common
}
///
- /// The name of the controller definition
+ /// Gets or sets the name of the controller definition
///
public string Name { get; set; }
///
- /// A list of all button types that have a boolean (on/off) value
+ /// Gets or sets a list of all button types that have a boolean (on/off) value
///
public List BoolButtons { get; set; }
///
- /// A list of all non-boolean types, that can be represented by a numerical value (such as analog controls, stylus coordinates, etc
+ /// Gets a list of all non-boolean types, that can be represented by a numerical value (such as analog controls, stylus coordinates, etc
///
- public List FloatControls { get; private set; }
+ public List FloatControls { get; }
///
- /// A list of all float ranges for each float control (must be one to one with FloatControls)
+ /// Gets a list of all float ranges for each float control (must be one to one with FloatControls)
/// FloatRanges include the min/max/default values
///
- public List FloatRanges { get; private set; }
+ public List FloatRanges { get; }
///
- /// Axis contraints apply artificial contraints to float values
- /// For instance, a N64 controller's analog range is actually larger than the amount allowed by the plastic that artificially contrains it to lower values
- /// Axis contraints provide a way to technically allow the full range but have a user option to contrain down to typical values that a real control would have
+ /// Gets the axis constraints that apply artificial constraints to float values
+ /// For instance, a N64 controller's analog range is actually larger than the amount allowed by the plastic that artificially constrains it to lower values
+ /// Axis constraints provide a way to technically allow the full range but have a user option to constrain down to typical values that a real control would have
///
- public List AxisConstraints { get; private set; }
+ public List AxisConstraints { get; }
///
- /// A means of categorizing controls in various controller display and config screens
+ /// Gets the category labels. These labels provide a means of categorizing controls in various controller display and config screens
///
- public Dictionary CategoryLabels { get; private set; }
+ public Dictionary CategoryLabels { get; }
public void ApplyAxisConstraints(string constraintClass, IDictionary floatButtons)
{
@@ -93,6 +93,7 @@ namespace BizHawk.Emulation.Common
xval *= ratio;
yval *= ratio;
}
+
floatButtons[xaxis] = (float)xval;
floatButtons[yaxis] = (float)yval;
break;
@@ -214,5 +215,4 @@ namespace BizHawk.Emulation.Common
return BoolButtons.Any() || FloatControls.Any();
}
}
-
}
diff --git a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs
index 25a459e97c..7a6771c695 100644
--- a/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/MemoryCallbackSystem.cs
@@ -33,7 +33,7 @@ namespace BizHawk.Emulation.Common
private bool _hasWrites;
private bool _hasExecutes;
- public bool ExecuteCallbacksAvailable { get; set; }
+ public bool ExecuteCallbacksAvailable { get; }
public void Add(IMemoryCallback callback)
{
@@ -215,19 +215,21 @@ namespace BizHawk.Emulation.Common
public void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
{
- switch(args.Action)
+ switch (args.Action)
{
case NotifyCollectionChangedAction.Add:
- foreach(IMemoryCallback callback in args.NewItems)
+ foreach (IMemoryCallback callback in args.NewItems)
{
CallbackAdded?.Invoke(callback);
}
+
break;
case NotifyCollectionChangedAction.Remove:
- foreach(IMemoryCallback callback in args.OldItems)
+ foreach (IMemoryCallback callback in args.OldItems)
{
CallbackRemoved?.Invoke(callback);
}
+
break;
}
}
diff --git a/BizHawk.Emulation.Common/Base Implementations/MemoryDomain.cs b/BizHawk.Emulation.Common/Base Implementations/MemoryDomain.cs
index ca279e389b..5205269646 100644
--- a/BizHawk.Emulation.Common/Base Implementations/MemoryDomain.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/MemoryDomain.cs
@@ -41,7 +41,7 @@ namespace BizHawk.Emulation.Common
/// must remain valid as long as the MemoryDomain exists!
/// if false, writes will be ignored
[Obsolete]
- public unsafe static MemoryDomain FromIntPtr(string name, long size, Endian endian, IntPtr data, bool writable = true, int wordSize = 1)
+ public static unsafe MemoryDomain FromIntPtr(string name, long size, Endian endian, IntPtr data, bool writable = true, int wordSize = 1)
{
return new MemoryDomainIntPtr(name, endian, data, size, writable, wordSize);
}
@@ -52,7 +52,7 @@ namespace BizHawk.Emulation.Common
/// must remain valid as long as the MemoryDomain exists!
/// if false, writes will be ignored
[Obsolete]
- public unsafe static MemoryDomain FromIntPtrSwap16(string name, long size, Endian endian, IntPtr data, bool writable = true)
+ public static unsafe MemoryDomain FromIntPtrSwap16(string name, long size, Endian endian, IntPtr data, bool writable = true)
{
return new MemoryDomainIntPtrSwap16(name, endian, data, size, writable);
}
@@ -69,9 +69,9 @@ namespace BizHawk.Emulation.Common
{
default:
case Endian.Big:
- return (ushort)((PeekByte(addr) << 8) | (PeekByte(addr + 1)));
+ return (ushort)((PeekByte(addr) << 8) | PeekByte(addr + 1));
case Endian.Little:
- return (ushort)((PeekByte(addr)) | (PeekByte(addr + 1) << 8));
+ return (ushort)(PeekByte(addr) | (PeekByte(addr + 1) << 8));
}
}
@@ -102,10 +102,10 @@ namespace BizHawk.Emulation.Common
default:
case Endian.Big:
PokeByte(addr + 0, (byte)(val >> 8));
- PokeByte(addr + 1, (byte)(val));
+ PokeByte(addr + 1, (byte)val);
break;
case Endian.Little:
- PokeByte(addr + 0, (byte)(val));
+ PokeByte(addr + 0, (byte)val);
PokeByte(addr + 1, (byte)(val >> 8));
break;
}
@@ -121,10 +121,10 @@ namespace BizHawk.Emulation.Common
PokeByte(addr + 0, (byte)(val >> 24));
PokeByte(addr + 1, (byte)(val >> 16));
PokeByte(addr + 2, (byte)(val >> 8));
- PokeByte(addr + 3, (byte)(val));
+ PokeByte(addr + 3, (byte)val);
break;
case Endian.Little:
- PokeByte(addr + 0, (byte)(val));
+ PokeByte(addr + 0, (byte)val);
PokeByte(addr + 1, (byte)(val >> 8));
PokeByte(addr + 2, (byte)(val >> 16));
PokeByte(addr + 3, (byte)(val >> 24));
diff --git a/BizHawk.Emulation.Common/Base Implementations/NullController.cs b/BizHawk.Emulation.Common/Base Implementations/NullController.cs
index d3fb18f099..aa38d19179 100644
--- a/BizHawk.Emulation.Common/Base Implementations/NullController.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/NullController.cs
@@ -24,6 +24,6 @@
return 0f;
}
- public static NullController Instance = new NullController();
+ public static readonly NullController Instance = new NullController();
}
}
\ No newline at end of file
diff --git a/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs b/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs
index 104706c22e..5e3d869375 100644
--- a/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs
@@ -201,7 +201,7 @@ namespace BizHawk.Emulation.Common
private bool _frameBufferClear = true;
private bool _xmas;
- private Pleg _pleg;
+ private readonly Pleg _pleg;
private NullEmulatorSettings _settings;
@@ -356,9 +356,7 @@ namespace BizHawk.Emulation.Common
return;
}
- var s = new SinMan(1500, n);
- s.c = c;
- s.n = n;
+ var s = new SinMan(1500, n) { c = c, n = n };
SinMen.Add(s);
}
@@ -378,6 +376,7 @@ namespace BizHawk.Emulation.Common
ret += s.Next();
}
}
+
if (ret > 32767) ret = 32767;
if (ret < -32767) ret = -32767;
return (short)ret;
@@ -432,10 +431,7 @@ namespace BizHawk.Emulation.Common
public bool fading = false;
- public bool Done
- {
- get { return amp < 2.0; }
- }
+ public bool Done => amp < 2.0;
static double GetFreq(int note)
{
@@ -447,9 +443,15 @@ namespace BizHawk.Emulation.Common
short result = (short)(Math.Sin(theta) * amp);
theta += freq * Math.PI / 22050.0;
if (theta >= Math.PI * 2.0)
+ {
theta -= Math.PI * 2.0;
+ }
+
if (fading)
+ {
amp *= 0.87;
+ }
+
return result;
}
diff --git a/BizHawk.Emulation.Common/Base Implementations/NullVideo.cs b/BizHawk.Emulation.Common/Base Implementations/NullVideo.cs
index 414b268da9..9db6af1ccd 100644
--- a/BizHawk.Emulation.Common/Base Implementations/NullVideo.cs
+++ b/BizHawk.Emulation.Common/Base Implementations/NullVideo.cs
@@ -12,6 +12,8 @@
return new int[BufferWidth * BufferHeight];
}
+ public static NullVideo Instance { get; } = new NullVideo();
+
public int VirtualWidth => 256;
public int VirtualHeight => 192;
@@ -21,9 +23,5 @@
public int BufferHeight => 192;
public int BackgroundColor => 0;
-
- private static readonly NullVideo _nullVideo = new NullVideo();
-
- public static NullVideo Instance => _nullVideo;
}
}
diff --git a/BizHawk.Emulation.Common/BinaryQuickSerializer.cs b/BizHawk.Emulation.Common/BinaryQuickSerializer.cs
index fb61d8e2d2..82136e6a63 100644
--- a/BizHawk.Emulation.Common/BinaryQuickSerializer.cs
+++ b/BizHawk.Emulation.Common/BinaryQuickSerializer.cs
@@ -23,13 +23,18 @@ namespace BizHawk.Emulation.Common
{
var caller = e as MethodCallExpression;
if (caller == null)
+ {
throw new ArgumentException("Expression must be a method call");
+ }
+
return caller.Method;
}
+
private static MethodInfo Method(Expression f)
{
return FromExpression(f.Body);
}
+
private static MethodInfo Method(Expression> f)
{
return FromExpression(f.Body);
@@ -39,14 +44,17 @@ namespace BizHawk.Emulation.Common
#region read and write handlers for individual fields
- private static Dictionary readhandlers = new Dictionary();
- private static Dictionary writehandlers = new Dictionary();
+ private static readonly Dictionary readhandlers = new Dictionary();
+ private static readonly Dictionary writehandlers = new Dictionary();
private static void AddR(Expression> f)
{
var method = Method(f);
if (!typeof(T).IsAssignableFrom(method.ReturnType))
+ {
throw new InvalidOperationException("Type mismatch");
+ }
+
readhandlers.Add(typeof(T), method);
}
@@ -54,7 +62,10 @@ namespace BizHawk.Emulation.Common
{
var method = Method(f);
if (!method.GetParameters()[0].ParameterType.IsAssignableFrom(typeof(T)))
+ {
throw new InvalidOperationException("Type mismatch");
+ }
+
writehandlers.Add(typeof(T), Method(f));
}
@@ -125,12 +136,17 @@ namespace BizHawk.Emulation.Common
il.Emit(OpCodes.Ldarg_1);
MethodInfo m;
if (!readhandlers.TryGetValue(field.FieldType, out m))
+ {
throw new InvalidOperationException("(R) Can't handle nested type " + field.FieldType);
+ }
+
il.Emit(OpCodes.Callvirt, m);
il.Emit(OpCodes.Stfld, field);
}
+
il.Emit(OpCodes.Ret);
}
+
{
var il = wmeth.GetILGenerator();
var target = il.DeclareLocal(t);
@@ -145,9 +161,13 @@ namespace BizHawk.Emulation.Common
il.Emit(OpCodes.Ldfld, field);
MethodInfo m;
if (!writehandlers.TryGetValue(field.FieldType, out m))
+ {
throw new InvalidOperationException("(W) Can't handle nested type " + field.FieldType);
+ }
+
il.Emit(OpCodes.Callvirt, m);
}
+
il.Emit(OpCodes.Ret);
}
@@ -161,7 +181,7 @@ namespace BizHawk.Emulation.Common
#endregion
- private static IDictionary serializers =
+ private static readonly IDictionary serializers =
new ConcurrentDictionary();
private static SerializationFactory GetFactory(Type t)
@@ -172,6 +192,7 @@ namespace BizHawk.Emulation.Common
f = CreateFactory(t);
serializers[t] = f;
}
+
return f;
}
diff --git a/BizHawk.Emulation.Common/BizInvoke/BizInvoker.cs b/BizHawk.Emulation.Common/BizInvoke/BizInvoker.cs
index 4068b1e8cf..d2bf032b6c 100644
--- a/BizHawk.Emulation.Common/BizInvoke/BizInvoker.cs
+++ b/BizHawk.Emulation.Common/BizInvoke/BizInvoker.cs
@@ -36,7 +36,7 @@ namespace BizHawk.Emulation.Common.BizInvoke
///
/// dictionary of all generated proxy implementations and their basetypes
///
- private static IDictionary Impls = new Dictionary();
+ private static readonly IDictionary Impls = new Dictionary();
///
/// the assembly that all proxies are placed in
@@ -138,13 +138,17 @@ namespace BizHawk.Emulation.Common.BizInvoke
{
var uo = baseMethods.FirstOrDefault(a => !a.Info.IsVirtual || a.Info.IsFinal);
if (uo != null)
+ {
throw new InvalidOperationException("Method " + uo.Info.Name + " cannot be overriden!");
+ }
// there's no technical reason to disallow this, but we wouldn't be doing anything
// with the base implementation, so it's probably a user error
var na = baseMethods.FirstOrDefault(a => !a.Info.IsAbstract);
if (na != null)
+ {
throw new InvalidOperationException("Method " + na.Info.Name + " is not abstract!");
+ }
}
// hooks that will be run on the created proxy object
@@ -171,7 +175,9 @@ namespace BizHawk.Emulation.Common.BizInvoke
ImplType = type.CreateType()
};
if (monitor)
+ {
ret.ConnectMonitor = (o, m) => o.GetType().GetField(monitorField.Name).SetValue(o, m);
+ }
return ret;
}
@@ -234,7 +240,9 @@ namespace BizHawk.Emulation.Common.BizInvoke
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldfld, field);
for (int i = 0; i < paramTypes.Length; i++)
+ {
il.Emit(OpCodes.Ldarg, (short)(i + 1));
+ }
il.Emit(OpCodes.Callvirt, delegateInvoke);
@@ -354,11 +362,18 @@ namespace BizHawk.Emulation.Common.BizInvoke
private static void LoadConstant(ILGenerator il, IntPtr p)
{
if (p == IntPtr.Zero)
+ {
il.Emit(OpCodes.Ldc_I4_0);
+ }
else if (IntPtr.Size == 4)
+ {
il.Emit(OpCodes.Ldc_I4, (int)p);
+ }
else
+ {
il.Emit(OpCodes.Ldc_I8, (long)p);
+ }
+
il.Emit(OpCodes.Conv_I);
}
@@ -368,11 +383,18 @@ namespace BizHawk.Emulation.Common.BizInvoke
private static void LoadConstant(ILGenerator il, UIntPtr p)
{
if (p == UIntPtr.Zero)
+ {
il.Emit(OpCodes.Ldc_I4_0);
+ }
else if (UIntPtr.Size == 4)
+ {
il.Emit(OpCodes.Ldc_I4, (int)p);
+ }
else
+ {
il.Emit(OpCodes.Ldc_I8, (long)p);
+ }
+
il.Emit(OpCodes.Conv_U);
}
@@ -382,12 +404,18 @@ namespace BizHawk.Emulation.Common.BizInvoke
private static Type EmitParamterLoad(ILGenerator il, int idx, Type type)
{
if (type.IsGenericType)
+ {
throw new InvalidOperationException("Generic types not supported");
+ }
+
if (type.IsByRef)
{
var et = type.GetElementType();
if (!et.IsPrimitive && !et.IsEnum)
+ {
throw new InvalidOperationException("Only refs of primitive or enum types are supported!");
+ }
+
var loc = il.DeclareLocal(type, true);
il.Emit(OpCodes.Ldarg, (short)idx);
il.Emit(OpCodes.Dup);
@@ -395,17 +423,24 @@ namespace BizHawk.Emulation.Common.BizInvoke
il.Emit(OpCodes.Conv_I);
return typeof(IntPtr);
}
- else if (type.IsArray)
+
+ if (type.IsArray)
{
var et = type.GetElementType();
if (!et.IsPrimitive && !et.IsEnum)
+ {
throw new InvalidOperationException("Only arrays of primitive or enum types are supported!");
+ }
// these two cases aren't too hard to add
if (type.GetArrayRank() > 1)
+ {
throw new InvalidOperationException("Multidimensional arrays are not supported!");
+ }
if (type.Name.Contains('*'))
+ {
throw new InvalidOperationException("Only 0-based 1-dimensional arrays are supported!");
+ }
var loc = il.DeclareLocal(type, true);
var end = il.DefineLabel();
@@ -428,7 +463,8 @@ namespace BizHawk.Emulation.Common.BizInvoke
return typeof(IntPtr);
}
- else if (typeof(Delegate).IsAssignableFrom(type))
+
+ if (typeof(Delegate).IsAssignableFrom(type))
{
var mi = typeof(Marshal).GetMethod("GetFunctionPointerForDelegate", new[] { typeof(Delegate) });
var end = il.DefineLabel();
@@ -446,15 +482,14 @@ namespace BizHawk.Emulation.Common.BizInvoke
il.MarkLabel(end);
return typeof(IntPtr);
}
- else if (type.IsPrimitive || type.IsEnum)
+
+ if (type.IsPrimitive || type.IsEnum)
{
il.Emit(OpCodes.Ldarg, (short)idx);
return type;
}
- else
- {
- throw new InvalidOperationException("Unrecognized parameter type!");
- }
+
+ throw new InvalidOperationException("Unrecognized parameter type!");
}
private static CustomAttributeBuilder GetAttributeBuilder(object o)
@@ -462,7 +497,10 @@ namespace BizHawk.Emulation.Common.BizInvoke
// anything more clever we can do here?
var t = o.GetType();
if (t == typeof(OutAttribute) || t == typeof(InAttribute))
+ {
return new CustomAttributeBuilder(t.GetConstructor(Type.EmptyTypes), new object[0]);
+ }
+
throw new InvalidOperationException("Unknown parameter attribute " + t.Name);
}
}
diff --git a/BizHawk.Emulation.Common/ControllerDefinitionMerger.cs b/BizHawk.Emulation.Common/ControllerDefinitionMerger.cs
index cde008163d..cd8801ff89 100644
--- a/BizHawk.Emulation.Common/ControllerDefinitionMerger.cs
+++ b/BizHawk.Emulation.Common/ControllerDefinitionMerger.cs
@@ -1,14 +1,11 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
namespace BizHawk.Emulation.Common
{
// the idea here is that various connected peripherals have their controls all merged
// into one definition, including logic to unmerge the data back so each one can work
// with it without knowing what else is connected
-
public static class ControllerDefinitionMerger
{
private static string Allocate(string input, ref int plr, ref int plrnext)
@@ -16,22 +13,24 @@ namespace BizHawk.Emulation.Common
int offset = int.Parse(input.Substring(0, 1));
int currplr = plr + offset;
if (currplr >= plrnext)
+ {
plrnext = currplr + 1;
- return string.Format("P{0} {1}", currplr, input.Substring(1));
+ }
+
+ return $"P{currplr} {input.Substring(1)}";
}
///
/// merge some controller definitions for different ports, and such. i promise to fully document this tomorrow
///
- ///
///
- public static ControllerDefinition GetMerged(IEnumerable Controllers, out List Unmergers)
+ public static ControllerDefinition GetMerged(IEnumerable controllers, out List unmergers)
{
ControllerDefinition ret = new ControllerDefinition();
- Unmergers = new List();
+ unmergers = new List();
int plr = 1;
int plrnext = 1;
- foreach (var def in Controllers)
+ foreach (var def in controllers)
{
Dictionary remaps = new Dictionary();
@@ -41,33 +40,37 @@ namespace BizHawk.Emulation.Common
ret.BoolButtons.Add(r);
remaps[s] = r;
}
+
foreach (string s in def.FloatControls)
{
string r = Allocate(s, ref plr, ref plrnext);
ret.FloatControls.Add(r);
remaps[s] = r;
}
+
ret.FloatRanges.AddRange(def.FloatRanges);
plr = plrnext;
- Unmergers.Add(new ControlDefUnMerger(remaps));
+ unmergers.Add(new ControlDefUnMerger(remaps));
}
+
return ret;
}
}
public class ControlDefUnMerger
{
- Dictionary Remaps;
+ private readonly Dictionary Remaps;
- public ControlDefUnMerger(Dictionary Remaps)
+ public ControlDefUnMerger(Dictionary remaps)
{
- this.Remaps = Remaps;
+ Remaps = remaps;
}
private class DummyController : IController
{
- IController src;
- Dictionary remaps;
+ private readonly IController src;
+ private readonly Dictionary remaps;
+
public DummyController(IController src, Dictionary remaps)
{
this.src = src;
@@ -76,7 +79,7 @@ namespace BizHawk.Emulation.Common
public ControllerDefinition Definition { get { throw new NotImplementedException(); } }
- public bool this[string button] { get { return IsPressed(button); } }
+ public bool this[string button] => IsPressed(button);
public bool IsPressed(string button)
{
@@ -93,6 +96,5 @@ namespace BizHawk.Emulation.Common
{
return new DummyController(c, Remaps);
}
-
}
}
diff --git a/BizHawk.Emulation.Common/CoreComms.cs b/BizHawk.Emulation.Common/CoreComms.cs
index 90572f7f7b..7781c47adc 100644
--- a/BizHawk.Emulation.Common/CoreComms.cs
+++ b/BizHawk.Emulation.Common/CoreComms.cs
@@ -11,10 +11,10 @@ namespace BizHawk.Emulation.Common
///
public class CoreComm
{
- public CoreComm(Action showMessage, Action NotifyMessage)
+ public CoreComm(Action showMessage, Action notifyMessage)
{
ShowMessage = showMessage;
- Notify = NotifyMessage;
+ Notify = notifyMessage;
}
public ICoreFileProvider CoreFileProvider;
@@ -47,7 +47,7 @@ namespace BizHawk.Emulation.Common
///
public Action Notify { get; private set; }
- public Func RequestGLContext;
+ public Func RequestGLContext;
public Action