Decouple RenderTargetWrapper from GDI+ implementations
This commit is contained in:
parent
984982cd9b
commit
bf4bac93b9
|
@ -1,9 +1,14 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
namespace BizHawk.Bizware.BizwareGL
|
namespace BizHawk.Bizware.BizwareGL
|
||||||
{
|
{
|
||||||
public interface IGraphicsControl : IDisposable
|
public interface IGraphicsControl : IDisposable
|
||||||
{
|
{
|
||||||
|
Rectangle ClientRectangle { get; }
|
||||||
|
|
||||||
|
Graphics CreateGraphics();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets whether presentation operations on this control will vsync
|
/// Sets whether presentation operations on this control will vsync
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -15,11 +15,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
// rendering state
|
// rendering state
|
||||||
private RenderTarget _currRenderTarget;
|
private RenderTarget _currRenderTarget;
|
||||||
|
|
||||||
public IGL_GdiPlus()
|
|
||||||
{
|
|
||||||
MyBufferedGraphicsContext = new BufferedGraphicsContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
void IDisposable.Dispose()
|
void IDisposable.Dispose()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -267,7 +262,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
var ret = new GLControlWrapper_GdiPlus(this);
|
var ret = new GLControlWrapper_GdiPlus(this);
|
||||||
|
|
||||||
// create a render target for this control
|
// create a render target for this control
|
||||||
var rtw = new RenderTargetWrapper(this) { Control = ret };
|
var rtw = new RenderTargetWrapper(() => MyBufferedGraphicsContext, ret);
|
||||||
ret.RenderTargetWrapper = rtw;
|
ret.RenderTargetWrapper = rtw;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -287,7 +282,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
};
|
};
|
||||||
var tex = new Texture2d(this, tw, w, h);
|
var tex = new Texture2d(this, tw, w, h);
|
||||||
|
|
||||||
var rtw = new RenderTargetWrapper(this);
|
var rtw = new RenderTargetWrapper(() => MyBufferedGraphicsContext);
|
||||||
var rt = new RenderTarget(this, rtw, tex);
|
var rt = new RenderTarget(this, rtw, tex);
|
||||||
rtw.Target = rt;
|
rtw.Target = rt;
|
||||||
return rt;
|
return rt;
|
||||||
|
@ -342,7 +337,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public GLControlWrapper_GdiPlus CurrentControl;
|
public GLControlWrapper_GdiPlus CurrentControl;
|
||||||
public RenderTargetWrapper CurrentRenderTargetWrapper;
|
public RenderTargetWrapper CurrentRenderTargetWrapper;
|
||||||
|
|
||||||
public BufferedGraphicsContext MyBufferedGraphicsContext;
|
public readonly BufferedGraphicsContext MyBufferedGraphicsContext = new();
|
||||||
|
|
||||||
|
|
||||||
} //class IGL_GdiPlus
|
} //class IGL_GdiPlus
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
|
||||||
using BizHawk.Bizware.BizwareGL;
|
using BizHawk.Bizware.BizwareGL;
|
||||||
|
@ -6,21 +7,24 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
public class RenderTargetWrapper
|
public class RenderTargetWrapper
|
||||||
{
|
{
|
||||||
public RenderTargetWrapper(IGL_GdiPlus gdi)
|
public RenderTargetWrapper(
|
||||||
|
Func<BufferedGraphicsContext> getBufferedGraphicsContext,
|
||||||
|
IGraphicsControl control = null)
|
||||||
{
|
{
|
||||||
Gdi = gdi;
|
_getBufferedGraphicsContext = getBufferedGraphicsContext;
|
||||||
|
Control = control;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly IGL_GdiPlus Gdi;
|
private readonly Func<BufferedGraphicsContext> _getBufferedGraphicsContext;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// the control associated with this render target (if any)
|
/// the control associated with this render target (if any)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public GLControlWrapper_GdiPlus Control;
|
private readonly IGraphicsControl Control;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// the offscreen render target, if that's what this is representing
|
/// the offscreen render target, if that's what this is representing
|
||||||
|
@ -47,7 +51,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
|
|
||||||
MyBufferedGraphics?.Dispose();
|
MyBufferedGraphics?.Dispose();
|
||||||
MyBufferedGraphics = Gdi.MyBufferedGraphicsContext.Allocate(refGraphics, r);
|
MyBufferedGraphics = _getBufferedGraphicsContext().Allocate(refGraphics, r);
|
||||||
// MyBufferedGraphics.Graphics.PixelOffsetMode = PixelOffsetMode.HighSpeed;
|
// MyBufferedGraphics.Graphics.PixelOffsetMode = PixelOffsetMode.HighSpeed;
|
||||||
|
|
||||||
//not sure about this stuff...
|
//not sure about this stuff...
|
||||||
|
|
Loading…
Reference in New Issue