diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj
index 4440583bbe..993c7638fd 100644
--- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj
+++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj
@@ -149,6 +149,7 @@
+
@@ -316,6 +317,10 @@
{f51946ea-827f-4d82-b841-1f2f6d060312}
BizHawk.Emulation.DiscSystem
+
+ {337ca23e-65e7-44e1-9411-97ee08bb8116}
+ BizHawk.Bizware.BizwareGL.GdiPlus
+
{5160CFB1-5389-47C1-B7F6-8A0DC97641EE}
BizHawk.Bizware.BizwareGL.OpenTK
diff --git a/BizHawk.Client.Common/Extensions.cs b/BizHawk.Client.Common/Extensions.cs
new file mode 100644
index 0000000000..02fae5f4af
--- /dev/null
+++ b/BizHawk.Client.Common/Extensions.cs
@@ -0,0 +1,23 @@
+using System;
+using BizHawk.Bizware.BizwareGL;
+using BizHawk.Bizware.BizwareGL.Drivers.GdiPlus;
+using BizHawk.Bizware.BizwareGL.Drivers.OpenTK;
+using BizHawk.Bizware.BizwareGL.Drivers.SlimDX;
+
+namespace BizHawk.Client.Common
+{
+ public static class Extensions
+ {
+ public static IGuiRenderer CreateRenderer(this IGL gl)
+ {
+ if (gl is IGL_TK)
+ return new GuiRenderer(gl);
+ if (gl is IGL_SlimDX9)
+ return new GuiRenderer(gl);
+ if (gl is IGL_GdiPlus)
+ return new GDIPlusGuiRenderer((IGL_GdiPlus)gl);
+
+ throw new NotSupportedException();
+ }
+ }
+}
diff --git a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
index f6b91a9f52..c2820aa138 100644
--- a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
+++ b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
@@ -46,12 +46,7 @@ namespace BizHawk.Client.EmuHawk
//it's sort of important for these to be initialized to something nonzero
currEmuWidth = currEmuHeight = 1;
- if (GL is BizHawk.Bizware.BizwareGL.Drivers.OpenTK.IGL_TK)
- Renderer = new GuiRenderer(GL);
- else if (GL is BizHawk.Bizware.BizwareGL.Drivers.SlimDX.IGL_SlimDX9)
- Renderer = new GuiRenderer(GL);
- else
- Renderer = new GDIPlusGuiRenderer((BizHawk.Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus)GL);
+ Renderer = GL.CreateRenderer();
VideoTextureFrugalizer = new TextureFrugalizer(GL);
diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs
index f9c4d91416..57fd3accc5 100644
--- a/BizHawk.Client.EmuHawk/Program.cs
+++ b/BizHawk.Client.EmuHawk/Program.cs
@@ -172,17 +172,9 @@ namespace BizHawk.Client.EmuHawk
}
//try creating a GUI Renderer. If that doesn't succeed. we fallback
- //TODO - need a factory for the GUI Renderer, I hate pasting this code
try
{
- BizHawk.Bizware.BizwareGL.IGuiRenderer Renderer;
- if (GlobalWin.GL is BizHawk.Bizware.BizwareGL.Drivers.OpenTK.IGL_TK)
- Renderer = new BizHawk.Bizware.BizwareGL.GuiRenderer(GlobalWin.GL);
- else if (GlobalWin.GL is BizHawk.Bizware.BizwareGL.Drivers.SlimDX.IGL_SlimDX9)
- Renderer = new BizHawk.Bizware.BizwareGL.GuiRenderer(GlobalWin.GL);
- else
- Renderer = new BizHawk.Bizware.BizwareGL.Drivers.GdiPlus.GDIPlusGuiRenderer((BizHawk.Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus)GlobalWin.GL);
- Renderer.Dispose();
+ using (GlobalWin.GL.CreateRenderer()) { }
}
catch(Exception ex)
{
diff --git a/BizHawk.Client.MultiHawk/DisplayManager/DisplayManager.cs b/BizHawk.Client.MultiHawk/DisplayManager/DisplayManager.cs
index 43754224e7..ce304a8d0d 100644
--- a/BizHawk.Client.MultiHawk/DisplayManager/DisplayManager.cs
+++ b/BizHawk.Client.MultiHawk/DisplayManager/DisplayManager.cs
@@ -47,12 +47,7 @@ namespace BizHawk.Client.MultiHawk
//it's sort of important for these to be initialized to something nonzero
currEmuWidth = currEmuHeight = 1;
- if (GL is BizHawk.Bizware.BizwareGL.Drivers.OpenTK.IGL_TK)
- Renderer = new GuiRenderer(GL);
- else if (GL is BizHawk.Bizware.BizwareGL.Drivers.SlimDX.IGL_SlimDX9)
- Renderer = new GuiRenderer(GL);
- else
- Renderer = new GDIPlusGuiRenderer((BizHawk.Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus)GL);
+ Renderer = GL.CreateRenderer();
VideoTextureFrugalizer = new TextureFrugalizer(GL);