diff --git a/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.IVideoProvider.cs b/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.IVideoProvider.cs index 4ff0c2f573..3ff875043c 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.IVideoProvider.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.IVideoProvider.cs @@ -23,24 +23,34 @@ namespace BizHawk.Emulation.Cores.Computers.Doom { var videoBufferSrc = IntPtr.Zero; var palletteBufferSrc = IntPtr.Zero; + _core.dsda_get_video(out var width, out var height, out var pitch, ref videoBufferSrc, out var paletteSize, ref palletteBufferSrc); - // Handling pallette buffer - PaletteSize = paletteSize; - if (_palBuffer.Length < PaletteSize) _palBuffer = new int[PaletteSize]; + var videoBuffer = (byte*) videoBufferSrc.ToPointer(); var paletteBuffer = (int*) palletteBufferSrc.ToPointer(); - for (var i = 0; i < _palBuffer.Length; i++) _palBuffer[i] = paletteBuffer[i]; - - // Handling video buffer + PaletteSize = paletteSize; BufferWidth = width; BufferHeight = height; - if (_vidBuff.Length < BufferWidth * BufferHeight) _vidBuff = new int[BufferWidth * BufferHeight]; - var videoBuffer = (byte*) videoBufferSrc.ToPointer(); - for (var i = 0; i < _vidBuff.Length; i++) _vidBuff[i] = _palBuffer[videoBuffer[i]]; - VirtualHeight = _settings.InternalAspect == AspectRatio.Native - ? BufferWidth * 3 / 4 - : BufferHeight; + // Handling pallette buffer + if (_palBuffer.Length < PaletteSize) + { + _palBuffer = new int[PaletteSize]; + } + for (var i = 0; i < _palBuffer.Length; i++) + { + _palBuffer[i] = paletteBuffer[i]; + } + + // Handling video buffer + if (_vidBuff.Length < BufferWidth * BufferHeight) + { + _vidBuff = new int[BufferWidth * BufferHeight]; + } + for (var i = 0; i < _vidBuff.Length; i++) + { + _vidBuff[i] = _palBuffer[videoBuffer[i]]; + } } } } diff --git a/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs b/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs index 5c0d325a53..ef0246a1de 100644 --- a/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs +++ b/src/BizHawk.Emulation.Cores/Computers/Doom/DSDA.cs @@ -87,20 +87,24 @@ namespace BizHawk.Emulation.Cores.Computers.Doom resolution = resolutions[resolutions.Length - 1]; } + BufferWidth = resolution.X * multiplier; + BufferHeight = resolution.Y * multiplier; + VirtualHeight = _settings.InternalAspect == AspectRatio.Native + ? BufferWidth * 3 / 4 + : BufferHeight; + _configFile = Encoding.ASCII.GetBytes( - $"screen_resolution \"{ - resolution.X * multiplier}x{ - resolution.Y * multiplier}\"\n" + $"screen_resolution \"{BufferWidth}x{BufferHeight}\"\n" // we need the core to treat native resolution as 4:3 aspect, // that ensures FOV is correct on higher resolutions + $"render_aspect {(int)(_settings.InternalAspect == AspectRatio.Native ? AspectRatio._4by3 : _settings.InternalAspect)}\n" + $"render_wipescreen {(_syncSettings.RenderWipescreen ? 1 : 0)}\n" - + "boom_translucent_sprites 0\n" + + "render_stretch_hud 1\n" // patch_stretch_doom_format + + "boom_translucent_sprites 0\n" // may become a setting at some point + "uncapped_framerate 0\n" + "dsda_show_level_splits 0\n" - + "render_stretch_hud 1\n" ); _elf = new WaterboxHost(new WaterboxOptions @@ -178,7 +182,6 @@ namespace BizHawk.Emulation.Cores.Computers.Doom _elf.Seal(); } - // pull the default video size from the core UpdateVideo(); // Registering memory domains