cleanups in Bizware, mostly higher language features like null propagation and expression bodies
This commit is contained in:
parent
9008bf269a
commit
9e7bdd2424
|
@ -8,8 +8,8 @@ using System.Linq;
|
|||
using BizHawk.Common.StringExtensions;
|
||||
|
||||
// the HawkFile class is excessively engineered with the IHawkFileArchiveHandler to decouple the archive handling from the basic file handling.
|
||||
// This is so we could drop in an unamanged dearchiver library optionally later as a performance optimization without ruining the portability of the code.
|
||||
// Also, we want to be able to use HawkFiles in BizHawk.Common withuot bringing in a large 7-zip dependency
|
||||
// This is so we could drop in an unmanaged dearchiver library optionally later as a performance optimization without ruining the portability of the code.
|
||||
// Also, we want to be able to use HawkFiles in BizHawk.Common without bringing in a large 7-zip dependency
|
||||
namespace BizHawk.Common
|
||||
{
|
||||
// TODO:
|
||||
|
@ -165,12 +165,10 @@ namespace BizHawk.Common
|
|||
/// </summary>
|
||||
public byte[] ReadAllBytes()
|
||||
{
|
||||
using (Stream stream = GetStream())
|
||||
{
|
||||
var ms = new MemoryStream((int)stream.Length);
|
||||
stream.CopyTo(ms);
|
||||
return ms.GetBuffer();
|
||||
}
|
||||
using Stream stream = GetStream();
|
||||
var ms = new MemoryStream((int)stream.Length);
|
||||
stream.CopyTo(ms);
|
||||
return ms.GetBuffer();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -376,9 +376,11 @@
|
|||
<s:Boolean x:Key="/Default/UserDictionary/Words/=quicksave/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Regionable/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=regs/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Renderers/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=resampling/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=resizer/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=resync/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=retroarch/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Rewinder/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=RLCA/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Roms/@EntryIndexedValue">True</s:Boolean>
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
Owner = owner;
|
||||
}
|
||||
|
||||
public ArtManager Owner { get; private set; }
|
||||
public ArtManager Owner { get; }
|
||||
public Texture2d BaseTexture { get; internal set; }
|
||||
|
||||
public float Width, Height;
|
||||
|
|
|
@ -44,8 +44,8 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
/// </summary>
|
||||
public Art LoadArt(string path)
|
||||
{
|
||||
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
|
||||
return LoadArtInternal(new BitmapBuffer(path, new BitmapLoadOptions()));
|
||||
using var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
return LoadArtInternal(new BitmapBuffer(path, new BitmapLoadOptions()));
|
||||
}
|
||||
|
||||
Art LoadArtInternal(BitmapBuffer tex)
|
||||
|
@ -70,23 +70,23 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
IsOpened = false;
|
||||
IsClosedForever = forever;
|
||||
|
||||
//first, cleanup old stuff
|
||||
// first, cleanup old stuff
|
||||
foreach (var tex in ManagedTextures)
|
||||
tex.Dispose();
|
||||
ManagedTextures.Clear();
|
||||
|
||||
//prepare input for atlas process and perform atlas
|
||||
//add 2 extra pixels for padding on all sides
|
||||
List<TexAtlas.RectItem> atlasItems = new List<TexAtlas.RectItem>();
|
||||
// prepare input for atlas process and perform atlas
|
||||
// add 2 extra pixels for padding on all sides
|
||||
var atlasItems = new List<TexAtlas.RectItem>();
|
||||
foreach (var kvp in ArtLooseTextureAssociation)
|
||||
atlasItems.Add(new TexAtlas.RectItem(kvp.Value.Width+2, kvp.Value.Height+2, kvp));
|
||||
var results = TexAtlas.PackAtlas(atlasItems);
|
||||
|
||||
//this isnt supported yet:
|
||||
// this isn't supported yet:
|
||||
if (results.Atlases.Count > 1)
|
||||
throw new InvalidOperationException("Art files too big for atlas");
|
||||
|
||||
//prepare the output buffer
|
||||
// prepare the output buffer
|
||||
BitmapBuffer bmpResult = new BitmapBuffer(results.Atlases[0].Size);
|
||||
|
||||
//for each item, copy it into the output buffer and set the tex parameters on them
|
||||
|
@ -142,7 +142,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
/// </summary>
|
||||
private void AssertIsOpen(bool state) { if (IsOpened != state) throw new InvalidOperationException($"{nameof(ArtManager)} instance is not open!"); }
|
||||
|
||||
public IGL Owner { get; private set; }
|
||||
public IGL Owner { get; }
|
||||
|
||||
public bool IsOpened { get; private set; }
|
||||
public bool IsClosedForever { get; private set; }
|
||||
|
@ -150,16 +150,16 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
/// <summary>
|
||||
/// This is used to remember the original bitmap sources for art files. Once the ArtManager is closed forever, this will be purged
|
||||
/// </summary>
|
||||
Dictionary<Art, BitmapBuffer> ArtLooseTextureAssociation = new Dictionary<Art, BitmapBuffer>();
|
||||
readonly Dictionary<Art, BitmapBuffer> ArtLooseTextureAssociation = new Dictionary<Art, BitmapBuffer>();
|
||||
|
||||
/// <summary>
|
||||
/// Physical texture resources, which exist after this ArtManager has been closed
|
||||
/// </summary>
|
||||
List<Texture2d> ManagedTextures = new List<Texture2d>();
|
||||
readonly List<Texture2d> ManagedTextures = new List<Texture2d>();
|
||||
|
||||
/// <summary>
|
||||
/// All the Arts managed by this instance
|
||||
/// </summary>
|
||||
List<Art> ManagedArts = new List<Art>();
|
||||
readonly List<Art> ManagedArts = new List<Art>();
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
{
|
||||
|
|
|
@ -165,10 +165,9 @@ namespace Cyotek.Drawing.BitmapFont
|
|||
|
||||
public Size TextureSize { get; set; }
|
||||
|
||||
public Character this[char character]
|
||||
{ get { return this.Characters[character]; } }
|
||||
public Character this[char character] => this.Characters[character];
|
||||
|
||||
public bool Unicode { get; set; }
|
||||
public bool Unicode { get; set; }
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
//public domain assumed from cyotek.com
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
public Dictionary<string, string> MapNativeToCode = new Dictionary<string, string>();
|
||||
}
|
||||
|
||||
Regex rxHlslSamplerCrashWorkaround = new Regex(@"\((.*?)(in sampler2D)(.*?)\)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
|
||||
readonly Regex rxHlslSamplerCrashWorkaround = new Regex(@"\((.*?)(in sampler2D)(.*?)\)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
|
||||
|
||||
public Results Run(string code, string entry, string profile, bool hlslHacks)
|
||||
{
|
||||
|
@ -48,93 +48,97 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
}
|
||||
|
||||
//http://stackoverflow.com/questions/139593/processstartinfo-hanging-on-waitforexit-why
|
||||
using (Process proc = new Process())
|
||||
using var proc = new Process
|
||||
{
|
||||
proc.StartInfo.UseShellExecute = false;
|
||||
proc.StartInfo.CreateNoWindow = true;
|
||||
proc.StartInfo.RedirectStandardInput = true;
|
||||
proc.StartInfo.RedirectStandardOutput = true;
|
||||
proc.StartInfo.RedirectStandardError = true;
|
||||
proc.StartInfo.Arguments = sbCmdline.ToString();
|
||||
proc.StartInfo.FileName = CGCBinPath;
|
||||
|
||||
StringBuilder output = new StringBuilder(), error = new StringBuilder();
|
||||
|
||||
using (AutoResetEvent outputWaitHandle = new AutoResetEvent(false))
|
||||
using (AutoResetEvent errorWaitHandle = new AutoResetEvent(false))
|
||||
StartInfo =
|
||||
{
|
||||
proc.OutputDataReceived += (sender, e) =>
|
||||
{
|
||||
if (e.Data == null) outputWaitHandle.Set();
|
||||
else output.AppendLine(e.Data);
|
||||
};
|
||||
proc.ErrorDataReceived += (sender, e) =>
|
||||
{
|
||||
if (e.Data == null) errorWaitHandle.Set();
|
||||
else error.AppendLine(e.Data);
|
||||
};
|
||||
|
||||
|
||||
proc.Start();
|
||||
new Thread(() =>
|
||||
{
|
||||
proc.StandardInput.AutoFlush = true;
|
||||
proc.StandardInput.Write(code);
|
||||
proc.StandardInput.Flush();
|
||||
proc.StandardInput.Close();
|
||||
}).Start();
|
||||
|
||||
proc.BeginOutputReadLine();
|
||||
proc.BeginErrorReadLine();
|
||||
proc.WaitForExit();
|
||||
outputWaitHandle.WaitOne();
|
||||
errorWaitHandle.WaitOne();
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
RedirectStandardInput = true,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
Arguments = sbCmdline.ToString(),
|
||||
FileName = CGCBinPath
|
||||
}
|
||||
};
|
||||
|
||||
bool ok = (proc.ExitCode == 0);
|
||||
StringBuilder output = new StringBuilder(), error = new StringBuilder();
|
||||
|
||||
var ret = new Results()
|
||||
using (AutoResetEvent outputWaitHandle = new AutoResetEvent(false))
|
||||
{
|
||||
using var errorWaitHandle = new AutoResetEvent(false);
|
||||
proc.OutputDataReceived += (sender, e) =>
|
||||
{
|
||||
Succeeded = ok,
|
||||
Code = output.ToString(),
|
||||
Errors = error.ToString()
|
||||
if (e.Data == null) outputWaitHandle.Set();
|
||||
else output.AppendLine(e.Data);
|
||||
};
|
||||
proc.ErrorDataReceived += (sender, e) =>
|
||||
{
|
||||
if (e.Data == null) errorWaitHandle.Set();
|
||||
else error.AppendLine(e.Data);
|
||||
};
|
||||
|
||||
if (!ok)
|
||||
Console.WriteLine(ret.Errors);
|
||||
|
||||
if (hlslHacks)
|
||||
proc.Start();
|
||||
new Thread(() =>
|
||||
{
|
||||
ret.Code = rxHlslSamplerCrashWorkaround.Replace(ret.Code, m => $"({m.Groups[1].Value}uniform sampler2D{m.Groups[3].Value})");
|
||||
}
|
||||
proc.StandardInput.AutoFlush = true;
|
||||
proc.StandardInput.Write(code);
|
||||
proc.StandardInput.Flush();
|
||||
proc.StandardInput.Close();
|
||||
}).Start();
|
||||
|
||||
//make variable name map
|
||||
//loop until the first line that doesnt start with a comment
|
||||
var reader = new StringReader(ret.Code);
|
||||
for(;;)
|
||||
{
|
||||
var line = reader.ReadLine();
|
||||
if (line == null) break;
|
||||
if (!line.StartsWith("//")) break;
|
||||
if (!line.StartsWith("//var")) continue;
|
||||
var parts = line.Split(':');
|
||||
var native_name = parts[0].Split(' ')[2];
|
||||
var code_name = parts[1].Trim();
|
||||
if (code_name.StartsWith("TEXUNIT")) code_name = ""; //need parsing differently
|
||||
if (code_name == "")
|
||||
code_name = parts[2].Trim();
|
||||
//remove some array indicators. example: `modelViewProj1[0], 4`
|
||||
code_name = code_name.Split(',')[0];
|
||||
code_name = code_name.Split(' ')[0];
|
||||
if (code_name != "")
|
||||
{
|
||||
ret.MapCodeToNative[code_name] = native_name;
|
||||
ret.MapNativeToCode[native_name] = code_name;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
proc.BeginOutputReadLine();
|
||||
proc.BeginErrorReadLine();
|
||||
proc.WaitForExit();
|
||||
outputWaitHandle.WaitOne();
|
||||
errorWaitHandle.WaitOne();
|
||||
}
|
||||
|
||||
bool ok = (proc.ExitCode == 0);
|
||||
|
||||
var ret = new Results
|
||||
{
|
||||
Succeeded = ok,
|
||||
Code = output.ToString(),
|
||||
Errors = error.ToString()
|
||||
};
|
||||
|
||||
if (!ok)
|
||||
Console.WriteLine(ret.Errors);
|
||||
|
||||
if (hlslHacks)
|
||||
{
|
||||
ret.Code = rxHlslSamplerCrashWorkaround.Replace(ret.Code, m => $"({m.Groups[1].Value}uniform sampler2D{m.Groups[3].Value})");
|
||||
}
|
||||
|
||||
//make variable name map
|
||||
//loop until the first line that doesn't start with a comment
|
||||
var reader = new StringReader(ret.Code);
|
||||
for(;;)
|
||||
{
|
||||
var line = reader.ReadLine();
|
||||
if (line == null) break;
|
||||
if (!line.StartsWith("//")) break;
|
||||
if (!line.StartsWith("//var")) continue;
|
||||
var parts = line.Split(':');
|
||||
var native_name = parts[0].Split(' ')[2];
|
||||
var code_name = parts[1].Trim();
|
||||
if (code_name.StartsWith("TEXUNIT")) code_name = ""; //need parsing differently
|
||||
if (code_name == "")
|
||||
code_name = parts[2].Trim();
|
||||
|
||||
// remove some array indicators. example: `modelViewProj1[0], 4`
|
||||
code_name = code_name.Split(',')[0];
|
||||
code_name = code_name.Split(' ')[0];
|
||||
if (code_name != "")
|
||||
{
|
||||
ret.MapCodeToNative[code_name] = native_name;
|
||||
ret.MapNativeToCode[native_name] = code_name;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
using System;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
|
||||
using System.Drawing;
|
||||
using OpenTK;
|
||||
using OpenTK.Graphics;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
{
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
//this is full of bugs probably, related to state from old rendering sessions being all messed up. its only barely good enough to work at all
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
using OpenTK;
|
||||
|
@ -20,7 +17,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
Owner = gl;
|
||||
}
|
||||
|
||||
OpenTK.Graphics.Color4[] CornerColors = new OpenTK.Graphics.Color4[4] {
|
||||
readonly OpenTK.Graphics.Color4[] CornerColors = new OpenTK.Graphics.Color4[4] {
|
||||
new OpenTK.Graphics.Color4(1.0f,1.0f,1.0f,1.0f),new OpenTK.Graphics.Color4(1.0f,1.0f,1.0f,1.0f),new OpenTK.Graphics.Color4(1.0f,1.0f,1.0f,1.0f),new OpenTK.Graphics.Color4(1.0f,1.0f,1.0f,1.0f)
|
||||
};
|
||||
|
||||
|
@ -41,8 +38,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
|
||||
public void Dispose()
|
||||
{
|
||||
if (CurrentImageAttributes != null)
|
||||
CurrentImageAttributes.Dispose();
|
||||
CurrentImageAttributes?.Dispose();
|
||||
}
|
||||
|
||||
|
||||
|
@ -273,7 +269,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
var tw = tex.Opaque as GDIPTextureWrapper;
|
||||
g.PixelOffsetMode = sd.Drawing2D.PixelOffsetMode.Half;
|
||||
g.DrawImage(tw.SDBitmap, destPoints, new sd.RectangleF(sx, sy, sw, sh), sd.GraphicsUnit.Pixel, CurrentImageAttributes);
|
||||
g.Transform = new sd.Drawing2D.Matrix(); //.Reset() doesnt work ? ?
|
||||
g.Transform = new sd.Drawing2D.Matrix(); //.Reset() doesn't work ? ?
|
||||
}
|
||||
|
||||
unsafe void DrawInternal(Art art, float x, float y, float w, float h, bool fx, bool fy)
|
||||
|
@ -283,8 +279,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
|
||||
|
||||
public bool IsActive { get; private set; }
|
||||
public IGL Owner { get; private set; }
|
||||
public IGL Owner { get; }
|
||||
public IGL Gdi => Owner;
|
||||
|
||||
}
|
||||
}
|
|
@ -3,10 +3,6 @@
|
|||
//why this stupid assert on the blendstate. just set one by default, geeze.
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using OpenTK;
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
|
||||
|
@ -17,7 +13,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
/// <summary>
|
||||
/// A simple renderer useful for rendering GUI stuff.
|
||||
/// When doing GUI rendering, run everything through here (if you need a GL feature not done through here, run it through here first)
|
||||
/// Call Begin, then draw, then End, and dont use other Renderers or GL calls in the meantime, unless you know what youre doing.
|
||||
/// Call Begin, then draw, then End, and don't use other Renderers or GL calls in the meantime, unless you know what you're doing.
|
||||
/// This can perform batching (well.. maybe not yet), which is occasionally necessary for drawing large quantities of things.
|
||||
/// </summary>
|
||||
public class GuiRenderer : IDisposable, IGuiRenderer
|
||||
|
@ -53,7 +49,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
CurrPipeline = DefaultPipeline = Owner.CreatePipeline(VertexLayout, vs, ps, true, "xgui");
|
||||
}
|
||||
|
||||
OpenTK.Graphics.Color4[] CornerColors = new OpenTK.Graphics.Color4[4] {
|
||||
readonly OpenTK.Graphics.Color4[] CornerColors = new OpenTK.Graphics.Color4[4] {
|
||||
new OpenTK.Graphics.Color4(1.0f,1.0f,1.0f,1.0f),new OpenTK.Graphics.Color4(1.0f,1.0f,1.0f,1.0f),new OpenTK.Graphics.Color4(1.0f,1.0f,1.0f,1.0f),new OpenTK.Graphics.Color4(1.0f,1.0f,1.0f,1.0f)
|
||||
};
|
||||
|
||||
|
@ -343,10 +339,11 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
}
|
||||
|
||||
public bool IsActive { get; private set; }
|
||||
public IGL Owner { get; private set; }
|
||||
public IGL Owner { get; }
|
||||
|
||||
VertexLayout VertexLayout;
|
||||
Pipeline CurrPipeline, DefaultPipeline;
|
||||
readonly VertexLayout VertexLayout;
|
||||
Pipeline CurrPipeline;
|
||||
readonly Pipeline DefaultPipeline;
|
||||
|
||||
//state cache
|
||||
Texture2d sTexture;
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
using System;
|
||||
using System.Drawing;
|
||||
using System.Collections.Generic;
|
||||
|
||||
|
@ -21,7 +20,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
|
||||
public bool IsDirty;
|
||||
|
||||
Stack<Matrix4> stack = new Stack<Matrix4>();
|
||||
readonly Stack<Matrix4> stack = new Stack<Matrix4>();
|
||||
|
||||
/// <summary>
|
||||
/// This is made public for performance reasons, to avoid lame copies of the matrix when necessary. Don't mess it up!
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
|
@ -59,15 +58,12 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
return temp;
|
||||
}
|
||||
|
||||
internal set
|
||||
{
|
||||
base[key] = value;
|
||||
}
|
||||
internal set => base[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
SpecialWorkingDictionary UniformsDictionary;
|
||||
IDictionary<string, PipelineUniform> Uniforms { get { return UniformsDictionary; } }
|
||||
readonly SpecialWorkingDictionary UniformsDictionary;
|
||||
IDictionary<string, PipelineUniform> Uniforms => UniformsDictionary;
|
||||
|
||||
public IEnumerable<PipelineUniform> GetUniforms() { return Uniforms.Values; }
|
||||
|
||||
|
@ -78,15 +74,12 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
return ret;
|
||||
}
|
||||
|
||||
public PipelineUniform this[string key]
|
||||
{
|
||||
get { return UniformsDictionary[key]; }
|
||||
}
|
||||
public PipelineUniform this[string key] => UniformsDictionary[key];
|
||||
|
||||
public IGL Owner { get; private set; }
|
||||
public object Opaque { get; private set; }
|
||||
public VertexLayout VertexLayout { get; private set; }
|
||||
public bool Available { get; private set; }
|
||||
public IGL Owner { get; }
|
||||
public object Opaque { get; }
|
||||
public VertexLayout VertexLayout { get; }
|
||||
public bool Available { get; }
|
||||
public string Errors { get; set; }
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -23,8 +23,8 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
_UniformInfos.Add(ui);
|
||||
}
|
||||
|
||||
public IEnumerable<UniformInfo> UniformInfos { get { return _UniformInfos; } }
|
||||
List<UniformInfo> _UniformInfos = new List<UniformInfo>();
|
||||
public IEnumerable<UniformInfo> UniformInfos => _UniformInfos;
|
||||
readonly List<UniformInfo> _UniformInfos = new List<UniformInfo>();
|
||||
|
||||
/// <returns>the first and only <see cref="UniformInfo"/></returns>
|
||||
/// <exception cref="InvalidOperationException">more than one <see cref="UniformInfo"/> exists</exception>
|
||||
|
@ -37,54 +37,46 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
}
|
||||
}
|
||||
|
||||
public Pipeline Owner { get; private set; }
|
||||
public Pipeline Owner { get; }
|
||||
|
||||
public void Set(Matrix4 mat, bool transpose = false)
|
||||
{
|
||||
if (Owner == null) return; //uniform was optimized out
|
||||
Owner.Owner.SetPipelineUniformMatrix(this, mat, transpose);
|
||||
Owner?.Owner.SetPipelineUniformMatrix(this, mat, transpose);
|
||||
}
|
||||
|
||||
public void Set(Vector4 vec)
|
||||
{
|
||||
if (Owner == null) return; //uniform was optimized out
|
||||
Owner.Owner.SetPipelineUniform(this, vec);
|
||||
Owner?.Owner.SetPipelineUniform(this, vec);
|
||||
}
|
||||
|
||||
public void Set(Vector2 vec)
|
||||
{
|
||||
if (Owner == null) return; //uniform was optimized out
|
||||
Owner.Owner.SetPipelineUniform(this, vec);
|
||||
Owner?.Owner.SetPipelineUniform(this, vec);
|
||||
}
|
||||
|
||||
public void Set(float f)
|
||||
{
|
||||
if (Owner == null) return; //uniform was optimized out
|
||||
Owner.Owner.SetPipelineUniform(this, f);
|
||||
Owner?.Owner.SetPipelineUniform(this, f);
|
||||
}
|
||||
|
||||
public void Set(Vector4[] vecs)
|
||||
{
|
||||
if (Owner == null) return; //uniform was optimized out
|
||||
Owner.Owner.SetPipelineUniform(this, vecs);
|
||||
Owner?.Owner.SetPipelineUniform(this, vecs);
|
||||
}
|
||||
|
||||
public void Set(ref Matrix4 mat, bool transpose = false)
|
||||
{
|
||||
if (Owner == null) return; //uniform was optimized out
|
||||
Owner.Owner.SetPipelineUniformMatrix(this, ref mat, transpose);
|
||||
Owner?.Owner.SetPipelineUniformMatrix(this, ref mat, transpose);
|
||||
}
|
||||
|
||||
public void Set(bool value)
|
||||
{
|
||||
if (Owner == null) return; //uniform was optimized out
|
||||
Owner.Owner.SetPipelineUniform(this, value);
|
||||
Owner?.Owner.SetPipelineUniform(this, value);
|
||||
}
|
||||
|
||||
public void Set(Texture2d tex)
|
||||
{
|
||||
if (Owner == null) return; //uniform was optimized out
|
||||
Owner.Owner.SetPipelineUniformSampler(this, tex);
|
||||
Owner?.Owner.SetPipelineUniformSampler(this, tex);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,3 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
{
|
||||
public interface IBlendState { }
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
{
|
||||
|
@ -18,9 +17,9 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
return $"GL RT: {Texture2d.Width}x{Texture2d.Height}";
|
||||
}
|
||||
|
||||
public object Opaque { get; private set; }
|
||||
public IGL Owner { get; private set; }
|
||||
public Texture2d Texture2d { get; private set; }
|
||||
public object Opaque { get; }
|
||||
public IGL Owner { get; }
|
||||
public Texture2d Texture2d { get; }
|
||||
|
||||
public void Unbind()
|
||||
{
|
||||
|
|
|
@ -11,9 +11,8 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
/// </summary>
|
||||
public class RetroShader : IDisposable
|
||||
{
|
||||
//NOTE: we may need to overhaul uniform-setting infrastructure later.
|
||||
//maybe samplers will need to be set by index and not by name (I think the specs dont dictate what the sampler must be named)
|
||||
|
||||
// NOTE: we may need to overhaul uniform-setting infrastructure later.
|
||||
// maybe samplers will need to be set by index and not by name (I think the specs don't dictate what the sampler must be named)
|
||||
public RetroShader(IGL owner, string source, bool debug = false)
|
||||
{
|
||||
Owner = owner;
|
||||
|
@ -37,9 +36,9 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
return;
|
||||
}
|
||||
|
||||
//retroarch shaders will sometimes not have the right sampler name
|
||||
//it's unclear whether we should bind to s_p or sampler0
|
||||
//lets bind to sampler0 in case we dont have s_p
|
||||
// retroarch shaders will sometimes not have the right sampler name
|
||||
// it's unclear whether we should bind to s_p or sampler0
|
||||
// lets bind to sampler0 in case we don't have s_p
|
||||
sampler0 = Pipeline.TryGetUniform("s_p");
|
||||
if (sampler0 == null)
|
||||
{
|
||||
|
@ -60,10 +59,10 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
Available = true;
|
||||
}
|
||||
|
||||
public bool Available { get; private set; }
|
||||
public string Errors { get { return Pipeline.Errors; } }
|
||||
public bool Available { get; }
|
||||
public string Errors => Pipeline.Errors;
|
||||
|
||||
PipelineUniform sampler0;
|
||||
private readonly PipelineUniform sampler0;
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
|
@ -131,9 +130,9 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
}
|
||||
|
||||
|
||||
public IGL Owner { get; private set; }
|
||||
public IGL Owner { get; }
|
||||
|
||||
VertexLayout VertexLayout;
|
||||
readonly VertexLayout VertexLayout;
|
||||
public Pipeline Pipeline;
|
||||
}
|
||||
}
|
|
@ -1,11 +1,8 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an individual (fragment,vertex) shader.
|
||||
/// It isnt IDisposable because itll be lifecycle-managed by the IGL (disposed when all dependent pipelines are disposed)
|
||||
/// It isn't IDisposable because it'll be lifecycle-managed by the IGL (disposed when all dependent pipelines are disposed)
|
||||
/// But if you want to be sure to save it for later, use AddRef
|
||||
/// </summary>
|
||||
public class Shader
|
||||
|
@ -18,8 +15,8 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
Errors = "";
|
||||
}
|
||||
|
||||
public IGL Owner { get; private set; }
|
||||
public object Opaque { get; private set; }
|
||||
public IGL Owner { get; }
|
||||
public object Opaque { get; }
|
||||
public bool Available { get; private set; }
|
||||
public string Errors { get; set; }
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
if (!FontInfo.Characters.TryGetValue((char)c, out bfc))
|
||||
bfc = FontInfo.Characters[unchecked((char)-1)];
|
||||
|
||||
//calculate texcoords (we shouldve already had this cached, but im speedcoding now)
|
||||
// calculate texcoords (we shouldve already had this cached, but im speedcoding now)
|
||||
Texture2d tex = TexturePages[bfc.TexturePage];
|
||||
float w = tex.Width;
|
||||
float h = tex.Height;
|
||||
|
@ -119,9 +119,9 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
}
|
||||
}
|
||||
|
||||
public IGL Owner { get; private set; }
|
||||
public IGL Owner { get; }
|
||||
|
||||
Cyotek.Drawing.BitmapFont.BitmapFont FontInfo;
|
||||
readonly Cyotek.Drawing.BitmapFont.BitmapFont FontInfo;
|
||||
List<Texture2d> TexturePages = new List<Texture2d>();
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
using System;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Drawing;
|
||||
|
||||
|
@ -29,10 +25,11 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
class TryFitParam
|
||||
{
|
||||
public TryFitParam(int _w, int _h) { this.w = _w; this.h = _h; }
|
||||
public int w, h;
|
||||
public readonly int w;
|
||||
public readonly int h;
|
||||
public bool ok = true;
|
||||
public RectangleBinPack rbp = new RectangleBinPack();
|
||||
public List<RectangleBinPack.Node> nodes = new List<RectangleBinPack.Node>();
|
||||
public readonly RectangleBinPack rbp = new RectangleBinPack();
|
||||
public readonly List<RectangleBinPack.Node> nodes = new List<RectangleBinPack.Node>();
|
||||
}
|
||||
|
||||
public class PackedAtlasResults
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
using OpenTK;
|
||||
using OpenTK.Graphics;
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
|
@ -66,21 +63,21 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
SetMagFilter(TextureMagFilter.Nearest);
|
||||
}
|
||||
|
||||
public IGL Owner { get; private set; }
|
||||
public IGL Owner { get; }
|
||||
public object Opaque { get; private set; }
|
||||
|
||||
//note.. this was a lame idea. convenient, but weird. lets just change this back to ints.
|
||||
public float Width { get; private set; }
|
||||
public float Height { get; private set; }
|
||||
// note.. this was a lame idea. convenient, but weird. lets just change this back to ints.
|
||||
public float Width { get; }
|
||||
public float Height { get; }
|
||||
|
||||
public int IntWidth { get { return (int)Width; } }
|
||||
public int IntHeight { get { return (int)Height; } }
|
||||
public Rectangle Rectangle { get { return new Rectangle(0, 0, IntWidth, IntHeight); } }
|
||||
public Size Size { get { return new Size(IntWidth, IntHeight); } }
|
||||
public int IntWidth => (int)Width;
|
||||
public int IntHeight => (int)Height;
|
||||
public Rectangle Rectangle => new Rectangle(0, 0, IntWidth, IntHeight);
|
||||
public Size Size => new Size(IntWidth, IntHeight);
|
||||
|
||||
/// <summary>
|
||||
/// opengl sucks, man. seriously, screw this (textures from render targets are upside down)
|
||||
/// (couldnt we fix it up in the matrices somewhere?)
|
||||
/// (couldn't we fix it up in the matrices somewhere?)
|
||||
/// </summary>
|
||||
public bool IsUpsideDown;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Bizware.BizwareGL
|
||||
{
|
||||
public class UniformInfo
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using BizHawk.Common;
|
||||
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
|
@ -9,12 +7,12 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
{
|
||||
/// <summary>
|
||||
/// Represents a vertex layout, really a kind of a peer of the vertex and fragment shaders.
|
||||
/// It isnt IDisposable because itll be lifecycle-managed by the IGL (disposed when all dependent pipelines are disposed)
|
||||
/// It isn't IDisposable because it'll be lifecycle-managed by the IGL (disposed when all dependent pipelines are disposed)
|
||||
/// But if you want to be sure to save it for later, use AddRef
|
||||
/// </summary>
|
||||
public class VertexLayout
|
||||
{
|
||||
//TODO - could refactor to use vertex array objects? check opengl profile requirements (answer: 3.0. dont want to do this.)
|
||||
//TODO - could refactor to use vertex array objects? check opengl profile requirements (answer: 3.0. don't want to do this.)
|
||||
|
||||
public VertexLayout(IGL owner, object opaque)
|
||||
{
|
||||
|
@ -23,8 +21,8 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
Items = new MyDictionary();
|
||||
}
|
||||
|
||||
public object Opaque { get; private set; }
|
||||
public IGL Owner { get; private set; }
|
||||
public object Opaque { get; }
|
||||
public IGL Owner { get; }
|
||||
|
||||
int RefCount;
|
||||
|
||||
|
@ -74,19 +72,12 @@ namespace BizHawk.Bizware.BizwareGL
|
|||
{
|
||||
public new LayoutItem this[int key]
|
||||
{
|
||||
get
|
||||
{
|
||||
return base[key];
|
||||
}
|
||||
|
||||
internal set
|
||||
{
|
||||
base[key] = value;
|
||||
}
|
||||
get => base[key];
|
||||
internal set => base[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public MyDictionary Items { get; private set; }
|
||||
public MyDictionary Items { get; }
|
||||
bool Closed = false;
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue