add ctrl+shift+c to copy current client area as a screenshot (as opposed to the ctrl+c raw copy) so you can get scaling and filters too
This commit is contained in:
parent
ae381fc986
commit
f46973119b
|
@ -129,7 +129,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FilterProgram BuildDefaultChain(Size chain_insize, Size chain_outsize)
|
FilterProgram BuildDefaultChain(Size chain_insize, Size chain_outsize, bool includeOSD)
|
||||||
{
|
{
|
||||||
//select user special FX shader chain
|
//select user special FX shader chain
|
||||||
Dictionary<string, object> selectedChainProperties = new Dictionary<string, object>();
|
Dictionary<string, object> selectedChainProperties = new Dictionary<string, object>();
|
||||||
|
@ -150,6 +150,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
Filters.OSD fOSD = new Filters.OSD();
|
Filters.OSD fOSD = new Filters.OSD();
|
||||||
fOSD.RenderCallback = () =>
|
fOSD.RenderCallback = () =>
|
||||||
{
|
{
|
||||||
|
if (!includeOSD)
|
||||||
|
return;
|
||||||
var size = fOSD.FindInput().SurfaceFormat.Size;
|
var size = fOSD.FindInput().SurfaceFormat.Size;
|
||||||
Renderer.Begin(size.Width, size.Height);
|
Renderer.Begin(size.Width, size.Height);
|
||||||
MyBlitter myBlitter = new MyBlitter(this);
|
MyBlitter myBlitter = new MyBlitter(this);
|
||||||
|
@ -195,7 +197,10 @@ namespace BizHawk.Client.EmuHawk
|
||||||
AppendLuaLayer(chain, "native");
|
AppendLuaLayer(chain, "native");
|
||||||
|
|
||||||
//and OSD goes on top of that
|
//and OSD goes on top of that
|
||||||
chain.AddFilter(fOSD, "osd");
|
//TODO - things break if this isnt present (the final presentation filter gets messed up)
|
||||||
|
//so, always include it (we'll handle this flag in the callback to do no rendering)
|
||||||
|
//if (includeOSD)
|
||||||
|
chain.AddFilter(fOSD, "osd");
|
||||||
|
|
||||||
return chain;
|
return chain;
|
||||||
}
|
}
|
||||||
|
@ -256,19 +261,21 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
videoProvider = videoProvider,
|
videoProvider = videoProvider,
|
||||||
simulate = false,
|
simulate = false,
|
||||||
chain_outsize = GraphicsControl.Size
|
chain_outsize = GraphicsControl.Size,
|
||||||
|
includeOSD = true
|
||||||
};
|
};
|
||||||
UpdateSourceInternal(job);
|
UpdateSourceInternal(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BitmapBuffer RenderOffscreen(IVideoProvider videoProvider)
|
public BitmapBuffer RenderOffscreen(IVideoProvider videoProvider, bool includeOSD)
|
||||||
{
|
{
|
||||||
var job = new JobInfo
|
var job = new JobInfo
|
||||||
{
|
{
|
||||||
videoProvider = videoProvider,
|
videoProvider = videoProvider,
|
||||||
simulate = false,
|
simulate = false,
|
||||||
chain_outsize = GraphicsControl.Size,
|
chain_outsize = GraphicsControl.Size,
|
||||||
offscreen = true
|
offscreen = true,
|
||||||
|
includeOSD = includeOSD
|
||||||
};
|
};
|
||||||
UpdateSourceInternal(job);
|
UpdateSourceInternal(job);
|
||||||
return job.offscreenBB;
|
return job.offscreenBB;
|
||||||
|
@ -391,7 +398,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
videoProvider = fvp,
|
videoProvider = fvp,
|
||||||
simulate = true,
|
simulate = true,
|
||||||
chain_outsize = chain_outsize
|
chain_outsize = chain_outsize,
|
||||||
};
|
};
|
||||||
var filterProgram = UpdateSourceInternal(job);
|
var filterProgram = UpdateSourceInternal(job);
|
||||||
|
|
||||||
|
@ -408,6 +415,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public Size chain_outsize;
|
public Size chain_outsize;
|
||||||
public bool offscreen;
|
public bool offscreen;
|
||||||
public BitmapBuffer offscreenBB;
|
public BitmapBuffer offscreenBB;
|
||||||
|
public bool includeOSD;
|
||||||
}
|
}
|
||||||
|
|
||||||
FilterProgram UpdateSourceInternal(JobInfo job)
|
FilterProgram UpdateSourceInternal(JobInfo job)
|
||||||
|
@ -468,7 +476,7 @@ TESTEROO:
|
||||||
//build the default filter chain and set it up with services filters will need
|
//build the default filter chain and set it up with services filters will need
|
||||||
Size chain_insize = new Size(bufferWidth, bufferHeight);
|
Size chain_insize = new Size(bufferWidth, bufferHeight);
|
||||||
|
|
||||||
var filterProgram = BuildDefaultChain(chain_insize, chain_outsize);
|
var filterProgram = BuildDefaultChain(chain_insize, chain_outsize, job.includeOSD);
|
||||||
filterProgram.GuiRenderer = Renderer;
|
filterProgram.GuiRenderer = Renderer;
|
||||||
filterProgram.GL = GL;
|
filterProgram.GL = GL;
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -575,6 +575,18 @@ namespace BizHawk.Client.EmuHawk
|
||||||
TakeScreenshotToClipboard();
|
TakeScreenshotToClipboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ScreenshotClientClipboardMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
using (var bb = GlobalWin.DisplayManager.RenderOffscreen(Global.Emulator.VideoProvider, Global.Config.Screenshot_CaptureOSD))
|
||||||
|
{
|
||||||
|
bb.Normalize(true);
|
||||||
|
using (var img = bb.ToSysdrawingBitmap())
|
||||||
|
Clipboard.SetImage(img);
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalWin.OSD.AddMessage("Screenshot (client) saved to clipboard.");
|
||||||
|
}
|
||||||
|
|
||||||
private void ScreenshotCaptureOSDMenuItem_Click(object sender, EventArgs e)
|
private void ScreenshotCaptureOSDMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Global.Config.Screenshot_CaptureOSD ^= true;
|
Global.Config.Screenshot_CaptureOSD ^= true;
|
||||||
|
|
|
@ -816,7 +816,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
Clipboard.SetImage(img);
|
Clipboard.SetImage(img);
|
||||||
}
|
}
|
||||||
|
|
||||||
GlobalWin.OSD.AddMessage("Screenshot saved to clipboard.");
|
GlobalWin.OSD.AddMessage("Screenshot (raw) saved to clipboard.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TakeScreenshot()
|
public void TakeScreenshot()
|
||||||
|
@ -1600,44 +1600,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private static unsafe BitmapBuffer MakeScreenshotImage()
|
private static unsafe BitmapBuffer MakeScreenshotImage()
|
||||||
{
|
{
|
||||||
//var video = Global.Emulator.VideoProvider;
|
|
||||||
//var image = new Bitmap(video.BufferWidth, video.BufferHeight, PixelFormat.Format32bppArgb);
|
|
||||||
return new BitmapBuffer(Global.Emulator.VideoProvider.BufferWidth, Global.Emulator.VideoProvider.BufferHeight, Global.Emulator.VideoProvider.GetVideoBuffer());
|
return new BitmapBuffer(Global.Emulator.VideoProvider.BufferWidth, Global.Emulator.VideoProvider.BufferHeight, Global.Emulator.VideoProvider.GetVideoBuffer());
|
||||||
|
|
||||||
//this is all rotten.
|
|
||||||
//among other things, cores are required to set 0xFF000000 themselves
|
|
||||||
// TODO - replace with BitmapBuffer
|
|
||||||
//var framebuf = video.GetVideoBuffer();
|
|
||||||
//var bmpdata = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
|
||||||
//int* ptr = (int*)bmpdata.Scan0.ToPointer();
|
|
||||||
//int stride = bmpdata.Stride / 4;
|
|
||||||
//for (int y = 0; y < video.BufferHeight; y++)
|
|
||||||
//{
|
|
||||||
// for (int x = 0; x < video.BufferWidth; x++)
|
|
||||||
// {
|
|
||||||
// int col = framebuf[(y * video.BufferWidth) + x];
|
|
||||||
|
|
||||||
// if (Global.Emulator is TI83)
|
|
||||||
// {
|
|
||||||
// if (col == 0)
|
|
||||||
// {
|
|
||||||
// col = Color.Black.ToArgb();
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// col = Color.White.ToArgb();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // make opaque
|
|
||||||
// col |= unchecked((int)0xff000000);
|
|
||||||
|
|
||||||
// ptr[(y * stride) + x] = col;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//image.UnlockBits(bmpdata);
|
|
||||||
//return image;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveStateAs()
|
private void SaveStateAs()
|
||||||
|
@ -2044,7 +2007,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private BitmapBuffer CaptureOSD()
|
private BitmapBuffer CaptureOSD()
|
||||||
{
|
{
|
||||||
var bb = GlobalWin.DisplayManager.RenderOffscreen(Global.Emulator.VideoProvider);
|
var bb = GlobalWin.DisplayManager.RenderOffscreen(Global.Emulator.VideoProvider,true);
|
||||||
bb.Normalize(true);
|
bb.Normalize(true);
|
||||||
return bb;
|
return bb;
|
||||||
}
|
}
|
||||||
|
@ -3385,5 +3348,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
_master = null;
|
_master = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue