55 lines
1.2 KiB
C#
55 lines
1.2 KiB
C#
using System.Runtime.InteropServices;
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
|
|
{
|
|
unsafe partial class MelonDS : IVideoProvider
|
|
{
|
|
public int VirtualWidth => 256;
|
|
public int VirtualHeight => 384;
|
|
|
|
public int BufferWidth => 256;
|
|
public int BufferHeight => 384;
|
|
|
|
public int VsyncNumerator => 60;
|
|
|
|
public int VsyncDenominator => 1;
|
|
|
|
public int BackgroundColor => 0;
|
|
|
|
[DllImport(dllPath)]
|
|
private static extern int* GetTopScreenBuffer();
|
|
[DllImport(dllPath)]
|
|
private static extern int* GetBottomScreenBuffer();
|
|
|
|
// BizHawk needs to be able to modify the buffer when loading savestates.
|
|
private const int SingleScreenLength = 256 * 192;
|
|
private readonly int[] _buffer = new int[256 * 192 * 2];
|
|
private bool _getNewBuffer = true;
|
|
|
|
public int[] GetVideoBuffer()
|
|
{
|
|
if (_getNewBuffer)
|
|
{
|
|
_getNewBuffer = false;
|
|
PopulateBuffer();
|
|
}
|
|
|
|
return _buffer;
|
|
}
|
|
|
|
private void PopulateBuffer()
|
|
{
|
|
var top = GetTopScreenBuffer();
|
|
var bottom = GetBottomScreenBuffer();
|
|
|
|
for (var i = 0; i < SingleScreenLength; i++)
|
|
{
|
|
_buffer[i] = top[i];
|
|
_buffer[SingleScreenLength + i] = bottom[i];
|
|
}
|
|
}
|
|
}
|
|
}
|