void Append(LogLevel level, string message, object[] args, Exception exception = null) { var time = DateTimeOffset.Now; var text = _stringRenderer.RenderString(message, args); var line = new LogLine(time, _type, level, text, exception); _lines.Enqueue(line); if (_outputToConsole) { Console.WriteLine(line); } }
string Render(string template, params object[] args) { var result = _renderer.RenderString(template, args); Console.WriteLine($@" {template} + {string.Join(Environment.NewLine, args.Select(a => $" {a}"))} => {result}"); return(result); }
void Write(string level, string message, object[] args, Exception exception = null) { var renderedString = _stringRenderer.RenderString(message, args); try { var now = DateTimeOffset.Now; var output = exception == null ? $"{now:yyyy-MM-dd} {now:HH:mm:ss.fff zzz} {level} {renderedString}" : $"{now:yyyy-MM-dd} {now:HH:mm:ss.fff zzz} {level} {renderedString}{Environment.NewLine}{exception}"; System.Console.WriteLine(output); } catch { } }
public void DrawString(string s, StringRenderer font, Color color, float x, float y) { _owner._renderer.SetModulateColor(color); font.RenderString(_owner._renderer, x, y, s); _owner._renderer.SetModulateColorWhite(); }
static unsafe void Main(string[] args) { BizHawk.Bizware.BizwareGL.IGL igl = new BizHawk.Bizware.BizwareGL.Drivers.OpenTK.IGL_TK(); List <Art> testArts = new List <Art>(); ArtManager am = new ArtManager(igl); foreach (var name in typeof(Program).Assembly.GetManifestResourceNames()) { if (name.Contains("flame")) { testArts.Add(am.LoadArt(typeof(Program).Assembly.GetManifestResourceStream(name))); } } var smile = am.LoadArt(typeof(Program).Assembly.GetManifestResourceStream("BizHawk.Bizware.Test.TestImages.smile.png")); am.Close(true); StringRenderer sr; using (var xml = typeof(Program).Assembly.GetManifestResourceStream("BizHawk.Bizware.Test.TestImages.courier16px.fnt")) using (var tex = typeof(Program).Assembly.GetManifestResourceStream("BizHawk.Bizware.Test.TestImages.courier16px_0.png")) sr = new StringRenderer(igl, xml, tex); GuiRenderer gr = new GuiRenderer(igl); TestForm tf = new TestForm(); RetainedGraphicsControl c = new RetainedGraphicsControl(igl); tf.Controls.Add(c); c.Dock = System.Windows.Forms.DockStyle.Fill; tf.FormClosing += (object sender, System.Windows.Forms.FormClosingEventArgs e) => { tf.Controls.Remove(c); c.Dispose(); c = null; }; tf.Show(); //tf.Paint += (object sender, PaintEventArgs e) => c.Refresh(); c.SetVsync(false); //create a render target RenderTarget rt = igl.CreateRenderTarget(60, 60); rt.Bind(); igl.SetClearColor(Color.Blue); igl.Clear(ClearBufferMask.ColorBufferBit); gr.Begin(60, 60, true); gr.Draw(smile); gr.End(); rt.Unbind(); Texture2d rttex2d = igl.LoadTexture(rt.Texture2d.Resolve()); //test retroarch shader RenderTarget rt2 = igl.CreateRenderTarget(240, 240); rt2.Bind(); igl.SetClearColor(Color.CornflowerBlue); igl.Clear(ClearBufferMask.ColorBufferBit); RetroShader shader; using (var stream = typeof(Program).Assembly.GetManifestResourceStream("BizHawk.Bizware.Test.TestImages.4xSoft.glsl")) shader = new RetroShader(igl, new System.IO.StreamReader(stream).ReadToEnd()); igl.SetBlendState(igl.BlendNone); shader.Run(rttex2d, new Size(60, 60), new Size(240, 240), true); bool running = true; c.MouseClick += (object sender, MouseEventArgs e) => { if (e.Button == MouseButtons.Left) { running ^= true; } if (e.Button == MouseButtons.Right) { c.Retain ^= true; } }; DateTime start = DateTime.Now; int wobble = 0; for (; ;) { if (c == null) { break; } if (running) { c.Begin(); igl.SetClearColor(Color.Red); igl.Clear(ClearBufferMask.ColorBufferBit); int frame = (int)((DateTime.Now - start).TotalSeconds) % testArts.Count; gr.Begin(c.ClientSize.Width, c.ClientSize.Height); gr.SetModulateColor(Color.Green); gr.RectFill(250, 0, 16, 16); gr.SetBlendState(igl.BlendNone); gr.Draw(rttex2d, 0, 20); gr.SetBlendState(igl.BlendNormal); sr.RenderString(gr, 0, 0, "?? fps"); gr.SetModulateColor(Color.FromArgb(255, 255, 255, 255)); gr.SetCornerColor(0, OpenTK.Graphics.Color4.Red); gr.Draw(rt2.Texture2d, 0, 0); gr.SetCornerColor(0, OpenTK.Graphics.Color4.White); gr.SetModulateColorWhite(); gr.Modelview.Translate((float)Math.Sin(wobble / 360.0f) * 50, 0); gr.Modelview.Translate(100, 100); gr.Modelview.Push(); gr.Modelview.Translate(testArts[frame].Width, 0); gr.Modelview.Scale(-1, 1); wobble++; gr.SetModulateColor(Color.Yellow); gr.DrawFlipped(testArts[frame], true, false); gr.SetModulateColorWhite(); gr.Modelview.Pop(); gr.SetBlendState(igl.BlendNormal); gr.Draw(smile); gr.End(); c.SwapBuffers(); c.End(); } System.Windows.Forms.Application.DoEvents(); System.Threading.Thread.Sleep(0); } }
private static void RunTest() { IGL igl = new IGL_TK(2, 0, false); ArtManager am = new(igl); var testArts = typeof(Program).Assembly.GetManifestResourceNames().Where(s => s.Contains("flame")) .Select(s => am.LoadArt(ReflectionCache.EmbeddedResourceStream(s.Substring(21)))) // ReflectionCache adds back the prefix .ToList(); var smile = am.LoadArt(ReflectionCache.EmbeddedResourceStream("TestImages.smile.png")); am.Close(); StringRenderer sr; using (var xml = ReflectionCache.EmbeddedResourceStream("TestImages.courier16px.fnt")) using (var tex = ReflectionCache.EmbeddedResourceStream("TestImages.courier16px_0.png")) { sr = new StringRenderer(igl, xml, tex); } GuiRenderer gr = new(igl); RetainedGraphicsControl?c = new(igl) { Dock = DockStyle.Fill }; TestForm tf = new() { Controls = { c } }; tf.FormClosing += (_, _) => { tf.Controls.Remove(c); c.Dispose(); c = null; }; tf.Show(); #if false tf.Paint += (_, _) => c.Refresh(); #endif c.SetVsync(false); // create a render target var rt = igl.CreateRenderTarget(60, 60); rt.Bind(); igl.SetClearColor(Color.Blue); igl.Clear(ClearBufferMask.ColorBufferBit); gr.Begin(60, 60); gr.Draw(smile); gr.End(); rt.Unbind(); var rttex2d = igl.LoadTexture(rt.Texture2d.Resolve()); // test retroarch shader var rt2 = igl.CreateRenderTarget(240, 240); rt2.Bind(); igl.SetClearColor(Color.CornflowerBlue); igl.Clear(ClearBufferMask.ColorBufferBit); RetroShader shader; using (var stream = ReflectionCache.EmbeddedResourceStream("TestImages.4xSoft.glsl")) { shader = new(igl, new StreamReader(stream).ReadToEnd()); } igl.SetBlendState(igl.BlendNoneCopy); shader.Run(rttex2d, new Size(60, 60), new Size(240, 240), true); var running = true; c.MouseClick += (_, args) => { if (args.Button == MouseButtons.Left) { running ^= true; } else if (args.Button == MouseButtons.Right) { c.Retain ^= true; } }; var start = DateTime.Now; var wobble = 0; while (c is not null) { if (running) { c.Begin(); igl.SetClearColor(Color.Red); igl.Clear(ClearBufferMask.ColorBufferBit); var frame = (int)(DateTime.Now - start).TotalSeconds % testArts.Count; gr.Begin(c.ClientSize.Width, c.ClientSize.Height); gr.SetBlendState(igl.BlendNormal); gr.SetModulateColor(Color.Green); gr.RectFill(250, 0, 16, 16); gr.SetBlendState(igl.BlendNoneCopy); gr.Draw(rttex2d, 0, 20); gr.SetBlendState(igl.BlendNormal); sr.RenderString(gr, 0, 0, "?? fps"); gr.SetModulateColor(Color.FromArgb(255, 255, 255, 255)); gr.SetCornerColor(0, new(1.0f, 0.0f, 0.0f, 1.0f)); gr.Draw(rt2.Texture2d, 0, 0); gr.SetCornerColor(0, new(1.0f, 1.0f, 1.0f, 1.0f)); gr.SetModulateColorWhite(); gr.Modelview.Translate((float)Math.Sin(wobble / 360.0f) * 50, 0); gr.Modelview.Translate(100, 100); gr.Modelview.Push(); gr.Modelview.Translate(testArts[frame].Width, 0); gr.Modelview.Scale(-1, 1); wobble++; gr.SetModulateColor(Color.Yellow); gr.DrawFlipped(testArts[frame], true, false); gr.SetModulateColorWhite(); gr.Modelview.Pop(); gr.SetBlendState(igl.BlendNormal); gr.Draw(smile); gr.End(); c.SwapBuffers(); c.End(); } Application.DoEvents(); Thread.Sleep(0); } } }