59 lines
1.4 KiB
C#
59 lines
1.4 KiB
C#
using BizHawk.Emulation.Common;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BizHawk.Emulation.Cores
|
|
{
|
|
public class SideBySideVideo : IVideoProvider
|
|
{
|
|
public SideBySideVideo(IVideoProvider l, IVideoProvider r)
|
|
{
|
|
_l = l;
|
|
_r = r;
|
|
_buff = new int[BufferWidth * BufferHeight];
|
|
}
|
|
|
|
private static unsafe void Blit(int* src, int srcp, int* dst, int dstp, int w, int h)
|
|
{
|
|
int* srcend = src + h * srcp;
|
|
while (src < srcend)
|
|
{
|
|
for (int j = 0; j < w; j++)
|
|
dst[j] = src[j];
|
|
src += srcp;
|
|
dst += dstp;
|
|
}
|
|
}
|
|
|
|
public unsafe void Fetch()
|
|
{
|
|
int h = BufferHeight;
|
|
int w = BufferWidth;
|
|
|
|
fixed(int* _pl = _l.GetVideoBuffer(), _pr = _r.GetVideoBuffer(), _pd = _buff)
|
|
{
|
|
Blit(_pl, w / 2, _pd, w, w / 2, h);
|
|
Blit(_pr, w / 2, _pd + w / 2, w, w / 2, h);
|
|
}
|
|
}
|
|
private readonly IVideoProvider _l;
|
|
private readonly IVideoProvider _r;
|
|
private int[] _buff;
|
|
public int BackgroundColor => _l.BackgroundColor;
|
|
public int BufferHeight => _l.BufferHeight;
|
|
public int BufferWidth => _l.BufferWidth * 2;
|
|
public int VirtualHeight => _l.VirtualHeight;
|
|
public int VirtualWidth => _l.VirtualWidth * 2;
|
|
public int VsyncDenominator => _l.VsyncDenominator;
|
|
public int VsyncNumerator => _l.VsyncNumerator;
|
|
|
|
public int[] GetVideoBuffer()
|
|
{
|
|
return _buff;
|
|
}
|
|
}
|
|
}
|