146 lines
4.0 KiB
C#
146 lines
4.0 KiB
C#
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Windows.Forms;
|
|
|
|
using BizHawk.Bizware.Graphics;
|
|
using BizHawk.Bizware.Graphics.Controls;
|
|
|
|
namespace BizHawk.Bizware.Test
|
|
{
|
|
public static class Program
|
|
{
|
|
public static void Main() => RunTest();
|
|
|
|
private sealed class TestForm : Form
|
|
{
|
|
public TestForm()
|
|
{
|
|
SuspendLayout();
|
|
AutoScaleDimensions = new(6F, 13F);
|
|
AutoScaleMode = AutoScaleMode.Font;
|
|
ClientSize = new(292, 273);
|
|
Name = "TestForm";
|
|
Text = "TestForm";
|
|
ResumeLayout();
|
|
}
|
|
}
|
|
|
|
private static void RunTest()
|
|
{
|
|
IGL igl = new IGL_OpenGL();
|
|
// graphics control must be made right away to create the OpenGL context
|
|
RetainedGraphicsControl? c = new(igl) { Dock = DockStyle.Fill, BackColor = Color.Black };
|
|
|
|
var testTexs = typeof(Program).Assembly.GetManifestResourceNames().Where(s => s.Contains("flame"))
|
|
.Select(s => igl.LoadTexture(ReflectionCache.EmbeddedResourceStream(s[21..]))) // ReflectionCache adds back the prefix
|
|
.ToList();
|
|
var smile = igl.LoadTexture(ReflectionCache.EmbeddedResourceStream("TestImages.smile.png"))!;
|
|
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);
|
|
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.ClearColor(Color.Blue);
|
|
gr.Begin(60, 60);
|
|
gr.Draw(smile);
|
|
gr.End();
|
|
igl.BindDefaultRenderTarget();
|
|
|
|
var rttex2d = igl.LoadTexture(rt.Resolve())!;
|
|
|
|
// test retroarch shader
|
|
var rt2 = igl.CreateRenderTarget(240, 240);
|
|
rt2.Bind();
|
|
igl.ClearColor(Color.CornflowerBlue);
|
|
RetroShader shader;
|
|
using (var stream = ReflectionCache.EmbeddedResourceStream("TestImages.4xSoft.glsl"))
|
|
{
|
|
shader = new(igl, new StreamReader(stream).ReadToEnd());
|
|
}
|
|
igl.DisableBlending();
|
|
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.ClearColor(Color.Red);
|
|
|
|
var frame = (int) (DateTime.Now - start).TotalSeconds % testTexs.Count;
|
|
|
|
gr.Begin(c.ClientSize.Width, c.ClientSize.Height);
|
|
gr.EnableBlending();
|
|
|
|
gr.SetModulateColor(Color.Green);
|
|
gr.DrawSubrect(null, 250, 0, 16, 16, 0, 0, 1, 1);
|
|
|
|
gr.DisableBlending();
|
|
gr.Draw(rttex2d, 0, 20);
|
|
gr.EnableBlending();
|
|
|
|
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, 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(testTexs[frame].Width, 0);
|
|
gr.ModelView.Scale(-1, 1);
|
|
wobble++;
|
|
gr.SetModulateColor(Color.Yellow);
|
|
gr.DrawSubrect(testTexs[frame], 0, 0, testTexs[frame].Width, testTexs[frame].Height, 1, 0, 0, 1);
|
|
gr.SetModulateColorWhite();
|
|
gr.ModelView.Pop();
|
|
gr.EnableBlending();
|
|
gr.Draw(smile);
|
|
|
|
gr.End();
|
|
|
|
c.SwapBuffers();
|
|
c.End();
|
|
}
|
|
|
|
Application.DoEvents();
|
|
Thread.Sleep(0);
|
|
}
|
|
}
|
|
}
|
|
}
|