diff --git a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
index 855dc7e148..826a08aada 100644
--- a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
+++ b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
@@ -120,6 +120,11 @@ namespace BizHawk.Client.EmuHawk
///
int currEmuWidth, currEmuHeight;
+ ///
+ /// additional pixels added at the unscaled level for the use of lua drawing. essentially increases the input video provider dimensions
+ ///
+ public System.Windows.Forms.Padding GameExtraPadding;
+
TextureFrugalizer VideoTextureFrugalizer;
Dictionary LuaSurfaceFrugalizers = new Dictionary();
RenderTargetFrugalizer[] ShaderChainFrugalizers;
@@ -318,6 +323,8 @@ namespace BizHawk.Client.EmuHawk
///
/// Attempts to calculate a good client size with the given zoom factor, considering the user's DisplayManager preferences
+ /// TODO - this needs to be redone with a concept different from zoom factor.
+ /// basically, each increment of a 'zoomlike' factor should definitely increase the viewable area somehow, even if it isnt strictly by an entire zoom level.
///
public Size CalculateClientSize(IVideoProvider videoProvider, int zoom)
{
@@ -339,6 +346,13 @@ namespace BizHawk.Client.EmuHawk
virtualHeight = Global.Config.DispCustomUserARHeight;
}
+
+ bufferWidth += GameExtraPadding.Left + GameExtraPadding.Right;
+ virtualWidth += GameExtraPadding.Left + GameExtraPadding.Right;
+ bufferHeight += GameExtraPadding.Top + GameExtraPadding.Bottom;
+ virtualHeight += GameExtraPadding.Top + GameExtraPadding.Bottom;
+
+
//Console.WriteLine("DISPZOOM " + zoom); //test
//old stuff
@@ -429,6 +443,8 @@ namespace BizHawk.Client.EmuHawk
chain_outsize = new Size(bufferWidth * zoom, bufferHeight * zoom);
}
+ //add requested lua layer canvas extension
+
var job = new JobInfo
{
videoProvider = fvp,
@@ -477,11 +493,18 @@ namespace BizHawk.Client.EmuHawk
}
}
+ //vw += GameExtraPadding.Left + GameExtraPadding.Right;
+ //vh += GameExtraPadding.Top + GameExtraPadding.Bottom;
+
int[] videoBuffer = videoProvider.GetVideoBuffer();
TESTEROO:
int bufferWidth = videoProvider.BufferWidth;
int bufferHeight = videoProvider.BufferHeight;
+
+ //bufferWidth += GameExtraPadding.Left + GameExtraPadding.Right;
+ //bufferHeight += GameExtraPadding.Top + GameExtraPadding.Bottom;
+
bool isGlTextureId = videoBuffer.Length == 1;
//TODO - need to do some work here for GDI+ to repair gl texture ID importing
@@ -543,6 +566,7 @@ TESTEROO:
//setup the final presentation filter
Filters.FinalPresentation fPresent = filterProgram["presentation"] as Filters.FinalPresentation;
+ fPresent.InputPadding = GameExtraPadding;
fPresent.VirtualTextureSize = new Size(vw, vh);
fPresent.TextureSize = new Size(bufferWidth, bufferHeight);
fPresent.BackgroundColor = videoProvider.BackgroundColor;
diff --git a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs
index bc0887770b..60d0e37ce0 100644
--- a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs
+++ b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs
@@ -35,13 +35,24 @@ namespace BizHawk.Client.EmuHawk.Filters
public float WidthScale, HeightScale;
//do maths on the viewport and the native resolution and the user settings to get a display rectangle
- public LetterboxingLogic(bool maintainAspect, bool maintainInteger, int targetWidth, int targetHeight, int sourceWidth, int sourceHeight, Size textureSize, Size virtualSize)
+ public LetterboxingLogic(System.Windows.Forms.Padding inputPadding, bool maintainAspect, bool maintainInteger, int targetWidth, int targetHeight, int sourceWidth, int sourceHeight, Size textureSize, Size virtualSize)
{
+ //when using inputPadding, the output will already be sized to accept it. the inptu size will be untouched.
+ //heres how we handle it:
+ //1. pretend the input is larger
+ int padw = inputPadding.Left + inputPadding.Right;
+ int padh = inputPadding.Top + inputPadding.Bottom;
+
int textureWidth = textureSize.Width;
int textureHeight = textureSize.Height;
int virtualWidth = virtualSize.Width;
int virtualHeight = virtualSize.Height;
+ textureWidth += padw;
+ textureHeight += padh;
+ virtualWidth += padw;
+ virtualHeight += padh;
+
//zero 02-jun-2014 - we passed these in, but ignored them. kind of weird..
int oldSourceWidth = sourceWidth;
int oldSourceHeight = sourceHeight;
@@ -128,13 +139,16 @@ namespace BizHawk.Client.EmuHawk.Filters
PS = trials[bestIndex];
}
- vw = (int)(PS.X * textureWidth);
- vh = (int)(PS.Y * textureHeight);
+ //accomodate padding here to keep pixel precision
+ vw = (int)(PS.X * (textureWidth-padw));
+ vh = (int)(PS.Y * (textureHeight-padh));
widthScale = PS.X;
heightScale = PS.Y;
}
else
{
+ widthScale /= (sourceWidth / (float)(sourceWidth - padw));
+ heightScale /= (sourceHeight / (float)(sourceHeight - padh));
vw = (int)(widthScale * sourceWidth);
vh = (int)(heightScale * sourceHeight);
}
@@ -150,6 +164,13 @@ namespace BizHawk.Client.EmuHawk.Filters
//HeightScale = heightScale;
WidthScale = (float)vw / oldSourceWidth;
HeightScale = (float)vh / oldSourceHeight;
+
+ //now add the padding, as best we can.
+ //it's a little hard because: ...
+ //vx += (int)(inputPadding.Left * WidthScale);
+ //vy += (int)(inputPadding.Top * HeightScale);
+ //vx += inputPadding.Left;
+ //vy += inputPadding.Top;
}
}
@@ -178,6 +199,11 @@ namespace BizHawk.Client.EmuHawk.Filters
LetterboxingLogic LL;
Size ContentSize;
+ ///
+ /// How much should padding should be added to the input (for canvas extension)
+ ///
+ public System.Windows.Forms.Padding InputPadding;
+
public override void Initialize()
{
DeclareInput();
@@ -200,7 +226,7 @@ namespace BizHawk.Client.EmuHawk.Filters
if (FilterOption != eFilterOption.Bicubic)
return size;
- LL = new LetterboxingLogic(Global.Config.DispFixAspectRatio, Global.Config.DispFixScaleInteger, OutputSize.Width, OutputSize.Height, size.Width, size.Height, TextureSize, VirtualTextureSize);
+ LL = new LetterboxingLogic(InputPadding, Global.Config.DispFixAspectRatio, Global.Config.DispFixScaleInteger, OutputSize.Width, OutputSize.Height, size.Width, size.Height, TextureSize, VirtualTextureSize);
return size;
}
@@ -223,7 +249,7 @@ namespace BizHawk.Client.EmuHawk.Filters
FindInput().SurfaceDisposition = SurfaceDisposition.Texture;
DeclareOutput(new SurfaceState(new SurfaceFormat(OutputSize), SurfaceDisposition.RenderTarget));
InputSize = state.SurfaceFormat.Size;
- LL = new LetterboxingLogic(Global.Config.DispFixAspectRatio, Global.Config.DispFixScaleInteger, OutputSize.Width, OutputSize.Height, InputSize.Width, InputSize.Height, TextureSize, VirtualTextureSize);
+ LL = new LetterboxingLogic(InputPadding, Global.Config.DispFixAspectRatio, Global.Config.DispFixScaleInteger, OutputSize.Width, OutputSize.Height, InputSize.Width, InputSize.Height, TextureSize, VirtualTextureSize);
ContentSize = new Size(LL.vw,LL.vh);
}