Merge pull request #2212 from Wengier/master

Support for Direct3D output on Windows SDL2 builds
This commit is contained in:
Jonathan Campbell 2021-01-24 13:17:37 -08:00 committed by GitHub
commit a66ce7c758
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 2106 additions and 1811 deletions

View File

@ -1,7 +1,26 @@
0.83.10
- dynamic_x86 now handles pagefaults non-recursively,
which allows to use dynamic core with Windows 9x/ME
without crashes. (koolkdev)
- Enhanced the printer function on Windows platforms
to allow printer names to be specified in [printer]
section via the "device" option for direct printing
to the selected device. If it is left empty, then
Windows Print dialog will be shown, or specifying
"-" will only cause it to show once (unless the user
clicks "Cancel"). Under "Help" menu there is now a
menu option "List Printer Devices" to list printer
devices on Windows, and the parallel port LPT1 now
defaults to the printer on all platforms. (Wengier)
- The dynamic_x86 CPU core can now handle page faults
non-recursively, so you can now run the dynamic_x86
core with Windows 9x/ME without crashes, although
this may slightly decrease the performance, and it
may be disabled by setting the config option "use
dynamic core with paging on" in [cpu] section to
"false". Also fixed incorrect behavior for handling
trap flags in the dynamic core and updated the MMX
code for improved performance. (koolkdev)
- Added support for Direct3D output on Windows SDL2
builds just like Windows SDL1 builds to become the
default output in all Windows builds. (Wengier)
- DOSBox-X now natively supports the pixel-perfect
scaling! Set the option "output=openglpp" in [sdl]
section of the config file to enable this output.
@ -10,11 +29,11 @@
run-time. This feature was implemented by ant_222
with some code cleanups by Wengier.
- Updated the Windows installer to add a page for
new users to select a video system output - the
default output (Direct3D on SDL1 builds / standard
OpenGL on x86/x64 SDL2 builds), OpenGL output with
pixel-perfect scaling for improved image quality,
and the TrueType font (TTF) output. (Wengier)
new users to select a video system output to use -
the default output (Direct3D), OpenGL with pixel-
perfect scaling (openglpp or "OpenGL perfect") for
improved image quality, and the TrueType font (TTF)
output for text-mode DOS applications. (Wengier)
- You can now supply a ZIP/7Z file as a parameter to
DOSBox-X directly so that it will be mounted as C:
drive when DOSBox-X starts. (Wengier)
@ -103,8 +122,6 @@
- Fixed an issue that the DOSBox-X window size may be
incorrect when restoring from a maximized window in
the SDL2 builds. (Wengier)
- Fixed incorrect behavior for handling trap flags
in the dynamic core. (koolkdev)
- Fixed that the menu option "Select OpenGL (GLSL)
shader.." not working properly sometimes. (Wengier)
- Fixed Ctrl+C not working in GNU ed. (Wengier)

View File

@ -50,6 +50,6 @@ export CXXFLAGS="$new$CXXFLAGS"
echo Compiling DOSBox-X
chmod +x configure
# FIXME: I would like MinGW builds to enable the debugger, eventually
./configure --enable-core-inline --prefix=/usr --enable-sdl2 "$@" || exit 1
./configure --enable-core-inline --enable-d3d9 --enable-d3d-shaders --prefix=/usr --enable-sdl2 "$@" || exit 1
make -j3 || exit 1

View File

@ -441,7 +441,7 @@ case "$host" in
CXXFLAGS="$CXXFLAGS -mno-ms-bitfields"
if test x$have_sdl_net_h = xyes ; then
dnl HACK: We have to put SDL_net THEN winsock libraries or else the linker can't resolve things properly
LIBS="$LIBS -lSDL_net -lwsock32 -lws2_32 -liphlpapi"
LIBS="$LIBS -lSDL_net -lwsock32 -lws2_32 -lwinspool -liphlpapi"
fi
dnl FEATURE: Whether to support direct parallel port passthrough
AC_DEFINE(C_DIRECTLPT, 1, [ Define to 1 if you want parallel passthrough support (Win32, Linux).])

View File

@ -10,7 +10,7 @@
<category>Emulation</category>
</categories>
<releases>
<release version="@PACKAGE_VERSION@" date="2021-1-20"/>
<release version="@PACKAGE_VERSION@" date="2021-1-24"/>
</releases>
<screenshots>
<screenshot type="default">

View File

@ -241,10 +241,10 @@ begin
else
PageBuild.Values[4] := True;
CreateHelpButton(ScaleX(20), WizardForm.CancelButton.Top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
msg:='DOSBox-X supports different video output systems for different purposes.' #13#13 'By default it uses the Direct3D output on the SDL1 version and the standard OpenGL output on the SDL2 version. But you may want to select the OpenGL output with pixel-perfect scaling for improved image quality (not available if you had selected an ARM build). Also, if you use text-mode DOS applications you probably want to select the TrueType font (TTF) output to make the text screen look much better.' #13#13 'This setting can be later modified in the DOSBox-X''s configuration file (dosbox-x.conf), or from DOSBox-X''s Video menu.';
msg:='DOSBox-X supports different video output systems for different purposes.' #13#13 'By default it uses the Direct3D output, but you may want to select the OpenGL pixel-perfect scaling output for improved image quality (not available if you had selected an ARM build). Also, if you use text-mode DOS applications you probably want to select the TrueType font (TTF) output to make the text screen look much better.' #13#13 'This setting can be later modified in the DOSBox-X''s configuration file (dosbox-x.conf), or from DOSBox-X''s Video menu.';
PageOutput:=CreateInputOptionPage(100, 'Video output for DOSBox-X', 'Specify the DOSBox-X video output system', msg, True, False);
PageOutput.Add('Default output (SDL1: Direct3D / SDL2: OpenGL)');
PageOutput.Add('OpenGL perfect: pixel-perfect scaling mode');
PageOutput.Add('Default output (Direct3D)');
PageOutput.Add('OpenGL with pixel-perfect scaling');
PageOutput.Add('TrueType font output for text-mode applications');
PageOutput.Values[0] := True;
msg:='You can specify a default DOS version for DOSBox-X to report to itself and DOS programs. This can sometimes change the feature sets of DOSBox-X. For example, selecting 7.10 as the reported DOS version will enable support for Windows-style long filenames (LFN) and FAT32 disk images (>2GB disk images) by default.' #13#13 'If you are not sure about which DOS version to report, you can also leave this unselected, then a preset DOS version will be reported (usually 5.00).' #13#13 'This setting can be later modified in the DOSBox-X''s configuration file (dosbox-x.conf).';
@ -252,7 +252,7 @@ begin
PageVer.Add('DOS version 3.30');
PageVer.Add('DOS version 5.00');
PageVer.Add('DOS version 6.22');
PageVer.Add('DOS version 7.10');
PageVer.Add('DOS version 7.10 (for LFN and FAT32 support)');
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
@ -321,9 +321,9 @@ begin
begin
Wizardform.ReadyMemo.Lines.Add('');
Wizardform.ReadyMemo.Lines.Add('Video output for DOSBox-X:');
msg:='Default output (SDL1: Direct3D / SDL2: OpenGL)';
msg:='Default output (Direct3D)';
if (PageOutput.Values[1]) then
msg:='OpenGL perfect: pixel-perfect scaling mode';
msg:='OpenGL with pixel-perfect scaling';
if (PageOutput.Values[2]) then
msg:='TrueType font output for text-mode applications';
Wizardform.ReadyMemo.Lines.Add(' '+msg);
@ -376,6 +376,29 @@ begin
if not FileExists(ExpandConstant('{app}\dosbox-x.conf')) then
begin
FileCopy(ExpandConstant(refname), ExpandConstant('{app}\dosbox-x.conf'), false);
if FileExists(ExpandConstant('{app}\dosbox-x.conf')) then
begin
FileLines := TStringList.Create;
FileLines.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf'));
section := '';
for i := 0 to FileLines.Count - 1 do
begin
line := Trim(FileLines[i]);
if (Length(line)>2) and (Copy(line, 1, 1) = '[') and (Copy(line, Length(line), 1) = ']') then
section := Copy(line, 2, Length(line)-2);
if (Length(line)>0) and (Copy(line, 1, 1) <> '#') and (Copy(line, 1, 1) <> '[') and (Pos('=', line) > 1) then
begin
linetmp := Trim(Copy(line, 1, Pos('=', line) - 1));
if (CompareText(linetmp, 'printoutput') = 0) and (CompareText(section, 'printer') = 0) then
begin
linetmp := Trim(Copy(line, 1, Pos('=', line)));
FileLines[i] := linetmp+' printer';
break;
end
end
end
FileLines.SaveToFile(ExpandConstant('{app}\dosbox-x.conf'));
end
if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageOutput.Values[1] or PageOutput.Values[2]) then
begin
FileLines := TStringList.Create;

View File

@ -1452,12 +1452,12 @@ ps1audio = off
ps1audiorate = 22050
[joystick]
# joysticktype: Type of joystick to emulate: auto (default), none,
# joysticktype: Type of joystick to emulate: auto (default),
# none (disables joystick emulation),
# 2axis (supports two joysticks),
# 4axis (supports one joystick, first joystick used),
# 4axis_2 (supports one joystick, second joystick used),
# fcs (Thrustmaster), ch (CH Flightstick).
# none disables joystick emulation.
# auto chooses emulation depending on real joystick(s).
# (Remember to reset DOSBox-X's mapperfile if you saved it earlier)
# Possible values: auto, 2axis, 4axis, 4axis_2, fcs, ch, none.
@ -1590,7 +1590,7 @@ joy2deadzone7+ = 0.60
# Additional parameters:
# timeout:<milliseconds> = how long to wait before closing the file on inactivity (default:0),
# squote to use single quotes instad of double quotes for quoted program commands.
# shellhide to hide the command window when opening programs on the Windows system.
# shellhide to hide the command window when opening programs on the Windows platform.
# openwith:<program>: start a program to open the output file.
# openerror:<program>: start a program to open the output file if an error had occurred.
# for directserial: realport (required), rxdelay (optional).
@ -1609,26 +1609,26 @@ joy2deadzone7+ = 0.60
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial4: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
#DOSBOX-X-ADV:# serial5: see serial1
#DOSBOX-X-ADV:# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
#DOSBOX-X-ADV:# serial6: see serial1
#DOSBOX-X-ADV:# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
#DOSBOX-X-ADV:# serial7: see serial1
#DOSBOX-X-ADV:# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
#DOSBOX-X-ADV:# serial8: see serial1
#DOSBOX-X-ADV:# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
#DOSBOX-X-ADV:# serial9: see serial1
#DOSBOX-X-ADV:# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial5: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial6: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial7: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial8: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial9: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# phonebookfile: File used to map fake phone numbers to addresses.
serial1 = dummy
serial2 = dummy
serial3 = disabled
serial4 = disabled
#DOSBOX-X-ADV:serial5 = disabled
#DOSBOX-X-ADV:serial6 = disabled
#DOSBOX-X-ADV:serial7 = disabled
#DOSBOX-X-ADV:serial8 = disabled
#DOSBOX-X-ADV:serial9 = disabled
serial5 = disabled
serial6 = disabled
serial7 = disabled
serial8 = disabled
serial9 = disabled
phonebookfile = phonebook-dosbox-x.txt
[parallel]
@ -1653,7 +1653,7 @@ phonebookfile = phonebook-dosbox-x.txt
# Additional parameters:
# timeout:<milliseconds> = how long to wait before closing the file on inactivity (default:0 or 500),
# squote to use single quotes instad of double quotes for quoted program commands.
# shellhide to hide the command window when opening programs on the Windows system.
# shellhide to hide the command window when opening programs on the Windows platform.
# addFF to add a formfeed when closing, addLF to add a linefeed if the app doesn't.
# cp:<codepage number> to perform codepage translation, i.e. cp:437
# openps:<program>: start a program to open the file if the print output is detected to be PostScript.
@ -1666,22 +1666,22 @@ phonebookfile = phonebook-dosbox-x.txt
# You can optionally specify base addresses and IRQs for them with base: and irq: options.
# parallel2: see parallel1
# parallel3: see parallel1
#DOSBOX-X-ADV:# parallel4: see parallel1
#DOSBOX-X-ADV:# parallel5: see parallel1
#DOSBOX-X-ADV:# parallel6: see parallel1
#DOSBOX-X-ADV:# parallel7: see parallel1
#DOSBOX-X-ADV:# parallel8: see parallel1
#DOSBOX-X-ADV:# parallel9: see parallel1
# parallel4: see parallel1
# parallel5: see parallel1
# parallel6: see parallel1
# parallel7: see parallel1
# parallel8: see parallel1
# parallel9: see parallel1
# dongle: Enable dongle
parallel1 = disabled
parallel1 = printer
parallel2 = disabled
parallel3 = disabled
#DOSBOX-X-ADV:parallel4 = disabled
#DOSBOX-X-ADV:parallel5 = disabled
#DOSBOX-X-ADV:parallel6 = disabled
#DOSBOX-X-ADV:parallel7 = disabled
#DOSBOX-X-ADV:parallel8 = disabled
#DOSBOX-X-ADV:parallel9 = disabled
parallel4 = disabled
parallel5 = disabled
parallel6 = disabled
parallel7 = disabled
parallel8 = disabled
parallel9 = disabled
dongle = false
[printer]
@ -1693,20 +1693,26 @@ dongle = false
# png : Creates PNG images (default)
# ps : Creates PostScript
# bmp : Creates BMP images (very huge files, not recommended)
# printer : Send to an actual printer in Windows (Print dialog will appear)
# printer : Send to an actual printer in Windows (specify a printer, or Print dialog will appear)
# multipage: Adds all pages to one PostScript file or printer job until CTRL-F2 is pressed.
# device: Specify the Windows printer device to use. You can see the list of devices from the
# menu ('List printer devices') or the Status Window. Then make your choice and put either
# the printer device number (e.g. 2) or your printer name (e.g. Microsoft Print to PDF).
# Leaving it empty will show the Windows Print dialog (or '-' for showing once).
# docpath: The path where the output files are stored.
# fontpath: The path where the printer fonts (courier.ttf, ocra.ttf, roman.ttf, sansserif.ttf, script.ttf) are located.
# openwith: Start the specified program to open the output file.
# openerror: Start the specified program to open the output file if an error had occurred.
# shellhide: If set, the command window will be hidden for openwith/openerror options on the Windows system.
# shellhide: If set, the command window will be hidden for openwith/openerror options on the Windows platform.
# timeout: (in milliseconds) if nonzero: the time the page will be ejected automatically after when no more data arrives at the printer.
printer = true
dpi = 360
width = 85
height = 110
#DOSBOX-X-ADV:printoutput = printer
printoutput = png
multipage = false
device = -
docpath = .
fontpath = FONTS
openwith =
@ -1752,7 +1758,7 @@ timeout = 0
#DOSBOX-X-ADV:# direct Non-standard behavior, encode the CALL FAR directly to the entry point rather than indirectly
#DOSBOX-X-ADV:# Possible values: auto, off, msdos2, msdos5, direct.
# share: Report SHARE.EXE as resident. This will allow file locking to be performed, although not all SHARE functions are emulated.
# file access tries: If a positive integer is set, DOSBox-X will try to read/write/lock files directly on mounted local drives for the specified number of times before failing on the Windows system.
# file access tries: If a positive integer is set, DOSBox-X will try to read/write/lock files directly on mounted local drives for the specified number of times before failing on Windows systems.
# network redirector: Report DOS network redirector as resident. This will allow the host name to be returned unless the secure mode is enabled.
# Set either "ipx=true" in [ipx] section or "ne2000=true" in [ne2000] section for a full network redirector environment.
#DOSBOX-X-ADV:# minimum dos initial private segment: In non-mainline mapping mode, where DOS structures are allocated from base memory, this sets the

View File

@ -16,7 +16,7 @@ At the beginning you have got a Z:\> instead of a C:\> at the DOSBox-X prompt. S
To change to the drive mounted like above, type "C:". If everything went fine, DOSBox-X will display the prompt "C:\>". You do not have to manually mount drives after DOSBox-X starts. Click the "Main" menu, and select "Configuration tool". Then select the "AUTOEXEC.BAT" setting group, where you can change its contents. The commands present here are run when DOSBox-X starts, so you can use this section for the mounting and other purposes, such as launching a specific program you want to use, or a game you want to play. You can also quickly launch a DOS program or game in DOSBox-X by clicking "Quick launch program..." under "DOS" menu.
Hint: DOSBox-X supports different video output systems for different purposes. By default it uses the Direct3D output on the SDL1 version and the standard OpenGL output on the SDL2 version. But if you desire the pixel-perfect scaling feature for improved image quality you may want to select the openglpp output. Also, if you use text-mode DOS applications you probably want to select the TrueType font (TTF) output to make the text screen look much better.
Hint: DOSBox-X supports different video output systems for different purposes. By default it uses the Direct3D output, but if you desire the pixel-perfect scaling feature for improved image quality you may want to select the openglpp output ("OpenGL perfect"). Also, if you use text-mode DOS applications and/or the DOS shell a lot you probably want to select the TrueType font (TTF) output to make the text screen look much better.
Further Information
===================

View File

@ -478,12 +478,12 @@ ps1audio = off
ps1audiorate = 22050
[joystick]
# joysticktype: Type of joystick to emulate: auto (default), none,
# joysticktype: Type of joystick to emulate: auto (default),
# none (disables joystick emulation),
# 2axis (supports two joysticks),
# 4axis (supports one joystick, first joystick used),
# 4axis_2 (supports one joystick, second joystick used),
# fcs (Thrustmaster), ch (CH Flightstick).
# none disables joystick emulation.
# auto chooses emulation depending on real joystick(s).
# (Remember to reset DOSBox-X's mapperfile if you saved it earlier)
# Possible values: auto, 2axis, 4axis, 4axis_2, fcs, ch, none.
@ -572,7 +572,7 @@ joy2deadzone7+ = 0.60
# Additional parameters:
# timeout:<milliseconds> = how long to wait before closing the file on inactivity (default:0),
# squote to use single quotes instad of double quotes for quoted program commands.
# shellhide to hide the command window when opening programs on the Windows system.
# shellhide to hide the command window when opening programs on the Windows platform.
# openwith:<program>: start a program to open the output file.
# openerror:<program>: start a program to open the output file if an error had occurred.
# for directserial: realport (required), rxdelay (optional).
@ -591,11 +591,26 @@ joy2deadzone7+ = 0.60
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial4: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial5: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial6: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial7: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial8: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# serial9: see serial1
# Possible values: dummy, disabled, modem, nullmodem, serialmouse, directserial, log, file.
# phonebookfile: File used to map fake phone numbers to addresses.
serial1 = dummy
serial2 = dummy
serial3 = disabled
serial4 = disabled
serial5 = disabled
serial6 = disabled
serial7 = disabled
serial8 = disabled
serial9 = disabled
phonebookfile = phonebook-dosbox-x.txt
[parallel]
@ -620,7 +635,7 @@ phonebookfile = phonebook-dosbox-x.txt
# Additional parameters:
# timeout:<milliseconds> = how long to wait before closing the file on inactivity (default:0 or 500),
# squote to use single quotes instad of double quotes for quoted program commands.
# shellhide to hide the command window when opening programs on the Windows system.
# shellhide to hide the command window when opening programs on the Windows platform.
# addFF to add a formfeed when closing, addLF to add a linefeed if the app doesn't.
# cp:<codepage number> to perform codepage translation, i.e. cp:437
# openps:<program>: start a program to open the file if the print output is detected to be PostScript.
@ -633,10 +648,22 @@ phonebookfile = phonebook-dosbox-x.txt
# You can optionally specify base addresses and IRQs for them with base: and irq: options.
# parallel2: see parallel1
# parallel3: see parallel1
# parallel4: see parallel1
# parallel5: see parallel1
# parallel6: see parallel1
# parallel7: see parallel1
# parallel8: see parallel1
# parallel9: see parallel1
# dongle: Enable dongle
parallel1 = disabled
parallel1 = printer
parallel2 = disabled
parallel3 = disabled
parallel4 = disabled
parallel5 = disabled
parallel6 = disabled
parallel7 = disabled
parallel8 = disabled
parallel9 = disabled
dongle = false
[printer]
@ -648,13 +675,17 @@ dongle = false
# png : Creates PNG images (default)
# ps : Creates PostScript
# bmp : Creates BMP images (very huge files, not recommended)
# printer : Send to an actual printer in Windows (Print dialog will appear)
# printer : Send to an actual printer in Windows (specify a printer, or Print dialog will appear)
# multipage: Adds all pages to one PostScript file or printer job until CTRL-F2 is pressed.
# device: Specify the Windows printer device to use. You can see the list of devices from the
# menu ('List printer devices') or the Status Window. Then make your choice and put either
# the printer device number (e.g. 2) or your printer name (e.g. Microsoft Print to PDF).
# Leaving it empty will show the Windows Print dialog (or '-' for showing once).
# docpath: The path where the output files are stored.
# fontpath: The path where the printer fonts (courier.ttf, ocra.ttf, roman.ttf, sansserif.ttf, script.ttf) are located.
# openwith: Start the specified program to open the output file.
# openerror: Start the specified program to open the output file if an error had occurred.
# shellhide: If set, the command window will be hidden for openwith/openerror options on the Windows system.
# shellhide: If set, the command window will be hidden for openwith/openerror options on the Windows platform.
# timeout: (in milliseconds) if nonzero: the time the page will be ejected automatically after when no more data arrives at the printer.
printer = true
dpi = 360
@ -662,6 +693,7 @@ width = 85
height = 110
printoutput = png
multipage = false
device = -
docpath = .
fontpath = FONTS
openwith =
@ -680,7 +712,7 @@ timeout = 0
# ansi.sys: If set (by default), ANSI.SYS emulation is on. If clear, ANSI.SYS is not emulated and will not appear to be installed.
# NOTE: This option has no effect in PC-98 mode where MS-DOS systems integrate ANSI.SYS into the DOS kernel.
# share: Report SHARE.EXE as resident. This will allow file locking to be performed, although not all SHARE functions are emulated.
# file access tries: If a positive integer is set, DOSBox-X will try to read/write/lock files directly on mounted local drives for the specified number of times before failing on the Windows system.
# file access tries: If a positive integer is set, DOSBox-X will try to read/write/lock files directly on mounted local drives for the specified number of times before failing on Windows systems.
# network redirector: Report DOS network redirector as resident. This will allow the host name to be returned unless the secure mode is enabled.
# Set either "ipx=true" in [ipx] section or "ne2000=true" in [ne2000] section for a full network redirector environment.
# minimum mcb free: Minimum free segment value to leave free. At startup, the DOS kernel will allocate memory

View File

@ -1452,12 +1452,12 @@ ps1audio = off
ps1audiorate = 22050
[joystick]
# joysticktype: Type of joystick to emulate: auto (default), none,
# joysticktype: Type of joystick to emulate: auto (default),
# none (disables joystick emulation),
# 2axis (supports two joysticks),
# 4axis (supports one joystick, first joystick used),
# 4axis_2 (supports one joystick, second joystick used),
# fcs (Thrustmaster), ch (CH Flightstick).
# none disables joystick emulation.
# auto chooses emulation depending on real joystick(s).
# (Remember to reset DOSBox-X's mapperfile if you saved it earlier)
# Possible values: auto, 2axis, 4axis, 4axis_2, fcs, ch, none.
@ -1590,7 +1590,7 @@ joy2deadzone7+ = 0.60
# Additional parameters:
# timeout:<milliseconds> = how long to wait before closing the file on inactivity (default:0),
# squote to use single quotes instad of double quotes for quoted program commands.
# shellhide to hide the command window when opening programs on the Windows system.
# shellhide to hide the command window when opening programs on the Windows platform.
# openwith:<program>: start a program to open the output file.
# openerror:<program>: start a program to open the output file if an error had occurred.
# for directserial: realport (required), rxdelay (optional).
@ -1653,7 +1653,7 @@ phonebookfile = phonebook-dosbox-x.txt
# Additional parameters:
# timeout:<milliseconds> = how long to wait before closing the file on inactivity (default:0 or 500),
# squote to use single quotes instad of double quotes for quoted program commands.
# shellhide to hide the command window when opening programs on the Windows system.
# shellhide to hide the command window when opening programs on the Windows platform.
# addFF to add a formfeed when closing, addLF to add a linefeed if the app doesn't.
# cp:<codepage number> to perform codepage translation, i.e. cp:437
# openps:<program>: start a program to open the file if the print output is detected to be PostScript.
@ -1673,7 +1673,7 @@ phonebookfile = phonebook-dosbox-x.txt
# parallel8: see parallel1
# parallel9: see parallel1
# dongle: Enable dongle
parallel1 = disabled
parallel1 = printer
parallel2 = disabled
parallel3 = disabled
parallel4 = disabled
@ -1693,20 +1693,26 @@ dongle = false
# png : Creates PNG images (default)
# ps : Creates PostScript
# bmp : Creates BMP images (very huge files, not recommended)
# printer : Send to an actual printer in Windows (Print dialog will appear)
# printer : Send to an actual printer in Windows (specify a printer, or Print dialog will appear)
# multipage: Adds all pages to one PostScript file or printer job until CTRL-F2 is pressed.
# device: Specify the Windows printer device to use. You can see the list of devices from the
# menu ('List printer devices') or the Status Window. Then make your choice and put either
# the printer device number (e.g. 2) or your printer name (e.g. Microsoft Print to PDF).
# Leaving it empty will show the Windows Print dialog (or '-' for showing once).
# docpath: The path where the output files are stored.
# fontpath: The path where the printer fonts (courier.ttf, ocra.ttf, roman.ttf, sansserif.ttf, script.ttf) are located.
# openwith: Start the specified program to open the output file.
# openerror: Start the specified program to open the output file if an error had occurred.
# shellhide: If set, the command window will be hidden for openwith/openerror options on the Windows system.
# shellhide: If set, the command window will be hidden for openwith/openerror options on the Windows platform.
# timeout: (in milliseconds) if nonzero: the time the page will be ejected automatically after when no more data arrives at the printer.
printer = true
dpi = 360
width = 85
height = 110
printoutput = printer
printoutput = png
multipage = false
device = -
docpath = .
fontpath = FONTS
openwith =
@ -1752,7 +1758,7 @@ timeout = 0
# direct Non-standard behavior, encode the CALL FAR directly to the entry point rather than indirectly
# Possible values: auto, off, msdos2, msdos5, direct.
# share: Report SHARE.EXE as resident. This will allow file locking to be performed, although not all SHARE functions are emulated.
# file access tries: If a positive integer is set, DOSBox-X will try to read/write/lock files directly on mounted local drives for the specified number of times before failing on the Windows system.
# file access tries: If a positive integer is set, DOSBox-X will try to read/write/lock files directly on mounted local drives for the specified number of times before failing on Windows systems.
# network redirector: Report DOS network redirector as resident. This will allow the host name to be returned unless the secure mode is enabled.
# Set either "ipx=true" in [ipx] section or "ne2000=true" in [ne2000] section for a full network redirector environment.
# minimum dos initial private segment: In non-mainline mapping mode, where DOS structures are allocated from base memory, this sets the

View File

@ -1,4 +1,4 @@
/*auto-generated*/
#define UPDATED_STR "Jan 20, 2021 5:24:11am"
#define GIT_COMMIT_HASH "6b5621d"
#define UPDATED_STR "Jan 24, 2021 2:26:23am"
#define GIT_COMMIT_HASH "16a26bc"
#define COPYRIGHT_END_YEAR "2021"

File diff suppressed because it is too large Load Diff

View File

@ -317,10 +317,8 @@ static const char *def_menu_video_scaler[] =
static const char *def_menu_video_output[] =
{
"output_surface",
#if !defined(C_SDL2) && !defined(HX_DOS)
# if (HAVE_D3D9_H) && defined(WIN32)
#if (HAVE_D3D9_H) && defined(WIN32) && !defined(HX_DOS)
"output_direct3d",
# endif
#endif
#if defined(C_OPENGL) && !defined(HX_DOS)
"output_opengl",
@ -743,11 +741,18 @@ static const char *def_menu_help[] =
"help_issue",
#endif
"--",
#if C_NE2000
"help_nic",
#endif
#if C_PRINTER && defined(WIN32)
"help_prt",
#endif
#if C_DEBUG || !defined(MACOSX) && !defined(LINUX) && !defined(HX_DOS) && !defined(C_EMSCRIPTEN)
"HelpDebugMenu",
#endif
#if C_NE2000 || C_PRINTER && defined(WIN32) || C_DEBUG || !defined(MACOSX) && !defined(LINUX) && !defined(HX_DOS) && !defined(C_EMSCRIPTEN)
"--",
#endif
"help_about",
NULL
};

View File

@ -2212,6 +2212,32 @@ public:
}
};
std::string prtlist="Printer support is not enabled. Check [printer] section of the configuration.";
class ShowHelpPRT : public GUI::ToplevelWindow {
protected:
GUI::Input *name;
public:
ShowHelpPRT(GUI::Screen *parent, int x, int y, const char *title) :
ToplevelWindow(parent, x, y, 700, 230, title) {
std::istringstream in(prtlist.c_str());
int r=0;
if (in) for (std::string line; std::getline(in, line); ) {
r+=25;
new GUI::Label(this, 40, r, line.c_str());
}
(new GUI::Button(this, 330, r+40, "Close", 70))->addActionHandler(this);
resize(700, r+120);
move(parent->getWidth()>this->getWidth()?(parent->getWidth()-this->getWidth())/2:0,parent->getHeight()>this->getHeight()?(parent->getHeight()-this->getHeight())/2:0);
}
void actionExecuted(GUI::ActionEventSource *b, const GUI::String &arg) {
(void)b;//UNUSED
if (arg == "Close")
close();
if (shortcut) running = false;
}
};
std::string niclist="NE2000 networking is not enabled. Check [ne2000] section of the configuration.";
class ShowHelpNIC : public GUI::ToplevelWindow {
protected:
@ -2685,11 +2711,15 @@ static void UI_Select(GUI::ScreenSDL *screen, int select) {
np13->raise();
} break;
case 37: {
auto *np14 = new ShowHelpNIC(screen, 70, 70, "Network interface list");
auto *np14 = new MakeDiskImage(screen, 110, 70, "Create blank disk image");
np14->raise();
} break;
case 38: {
auto *np15 = new MakeDiskImage(screen, 110, 70, "Create blank disk image");
auto *np15 = new ShowHelpNIC(screen, 70, 70, "Network interface list");
np15->raise();
} break;
case 39: {
auto *np15 = new ShowHelpPRT(screen, 70, 70, "Printer device list");
np15->raise();
} break;
default:

View File

@ -250,6 +250,9 @@ bool osx_detect_nstouchbar(void);
void osx_init_touchbar(void);
#endif
#if C_DIRECT3D
void d3d_init(void);
#endif
bool TTF_using(void);
void ShutDownMemHandles(Section * sec);
void resetFontSize(), decreaseFontSize();
@ -693,7 +696,7 @@ bool make_diskimage_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * con
(void)menuitem;//UNUSED
MAPPER_ReleaseAllKeys();
GFX_LosingFocus();
GUI_Shortcut(38);
GUI_Shortcut(37);
MAPPER_ReleaseAllKeys();
GFX_LosingFocus();
return true;
@ -3710,9 +3713,10 @@ void change_output(int output) {
OUTPUT_OPENGL_Select(GLPerfect);
#endif
break;
#if C_DIRECT3D
#if C_DIRECT3D
case 6:
OUTPUT_DIRECT3D_Select();
d3d_init();
break;
#endif
case 7:
@ -3722,8 +3726,10 @@ void change_output(int output) {
break;
case 9:
#if C_DIRECT3D
if (sdl.desktop.want_type == SCREEN_DIRECT3D)
if (sdl.desktop.want_type == SCREEN_DIRECT3D) {
OUTPUT_DIRECT3D_Select();
d3d_init();
}
#endif
break;
#if defined(USE_TTF)
@ -4081,7 +4087,6 @@ void GFX_RestoreMode(void) {
GFX_ResetScreen();
}
#if !defined(C_SDL2)
static bool GFX_GetSurfacePtrLock = false;
unsigned char *GFX_GetSurfacePtr(size_t *pitch, unsigned int x, unsigned int y) {
@ -4113,7 +4118,6 @@ void GFX_ReleaseSurfacePtr(void) {
GFX_GetSurfacePtrLock = false;
}
}
#endif
bool GFX_StartUpdate(uint8_t* &pixels,Bitu &pitch)
{
@ -5355,6 +5359,10 @@ static void GUI_StartUp() {
GFX_LogSDLState();
GFX_Stop();
#if C_DIRECT3D
if (sdl.desktop.want_type == SCREEN_DIRECT3D)
d3d_init();
#endif
#if defined(C_SDL2)
SDL_SetWindowTitle(sdl.window,"DOSBox-X");
@ -10136,31 +10144,65 @@ bool output_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const menui
if (!strcmp(what,"surface")) {
if (sdl.desktop.want_type == SCREEN_SURFACE) return true;
change_output(0);
if (window_was_maximized&&!GFX_IsFullscreen()) {
change_output(0);
#if defined(WIN32)
ShowWindow(GetHWND(), SW_MAXIMIZE);
#endif
} else
change_output(0);
RENDER_Reset();
}
else if (!strcmp(what,"opengl")) {
#if C_OPENGL
if (sdl.desktop.want_type == SCREEN_OPENGL && sdl_opengl.kind == GLBilinear) return true;
change_output(3);
if (window_was_maximized&&!GFX_IsFullscreen()) {
change_output(3);
#if defined(WIN32)
ShowWindow(GetHWND(), SW_MAXIMIZE);
#endif
} else
change_output(3);
#endif
}
else if (!strcmp(what,"openglnb")) {
#if C_OPENGL
if (sdl.desktop.want_type == SCREEN_OPENGL && sdl_opengl.kind == GLNearest) return true;
change_output(4);
if (window_was_maximized&&!GFX_IsFullscreen()) {
change_output(4);
#if defined(WIN32)
ShowWindow(GetHWND(), SW_MAXIMIZE);
#endif
} else
change_output(4);
#endif
}
else if (!strcmp(what,"openglpp")) {
#if C_OPENGL
if (sdl.desktop.want_type == SCREEN_OPENGL && sdl_opengl.kind == GLPerfect) return true;
change_output(5);
if (window_was_maximized&&!GFX_IsFullscreen()) {
change_output(5);
#if defined(WIN32)
ShowWindow(GetHWND(), SW_MAXIMIZE);
#endif
} else
change_output(5);
#endif
}
else if (!strcmp(what,"direct3d")) {
#if C_DIRECT3D
if (sdl.desktop.want_type == SCREEN_DIRECT3D) return true;
change_output(6);
#if C_OPENGL && defined(C_SDL2)
if (sdl.desktop.want_type == SCREEN_OPENGL)
GFX_SetSDLWindowMode(currentWindowWidth, currentWindowHeight, SCREEN_SURFACE);
#endif
if (window_was_maximized&&!GFX_IsFullscreen()) {
change_output(6);
#if defined(WIN32)
ShowWindow(GetHWND(), SW_MAXIMIZE);
#endif
} else
change_output(6);
#endif
}
else if (!strcmp(what,"ttf")) {
@ -11110,7 +11152,7 @@ bool help_nic_callback(DOSBoxMenu * const /*menu*/, DOSBoxMenu::item * const /*m
#endif
GFX_SwitchFullScreen();
}
GUI_Shortcut(37);
GUI_Shortcut(38);
if (switchfs) {
GFX_SwitchFullScreen();
#if defined(C_SDL2)
@ -11125,6 +11167,39 @@ bool help_nic_callback(DOSBoxMenu * const /*menu*/, DOSBoxMenu::item * const /*m
return true;
}
extern std::string prtlist;
bool help_prt_callback(DOSBoxMenu * const /*menu*/, DOSBoxMenu::item * const /*menuitem*/) {
MAPPER_ReleaseAllKeys();
GFX_LosingFocus();
bool switchfs=false;
#if defined(C_SDL2)
int x=-1, y=-1;
#endif
if (prtlist.find("-------------")!=std::string::npos&&!GFX_IsFullscreen()) {
switchfs=true;
#if defined(C_SDL2)
SDL_GetWindowPosition(sdl.window, &x, &y);
#endif
GFX_SwitchFullScreen();
}
GUI_Shortcut(39);
if (switchfs) {
GFX_SwitchFullScreen();
#if defined(C_SDL2)
if (x>-1&&y>-1) SDL_SetWindowPosition(sdl.window, x, y);
#endif
}
MAPPER_ReleaseAllKeys();
GFX_LosingFocus();
return true;
}
void SetCyclesCount_mapper_shortcut_RunInternal(void) {
MAPPER_ReleaseAllKeys();
@ -12397,8 +12472,14 @@ int main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT {
set_callback_function(help_open_url_callback);
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"help_issue").set_text("DOSBox-X support").
set_callback_function(help_open_url_callback);
#if C_NE2000
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"help_nic").set_text("List network interfaces").
set_callback_function(help_nic_callback);
#endif
#if C_PRINTER && defined(WIN32)
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"help_prt").set_text("List printer devices").
set_callback_function(help_prt_callback);
#endif
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"help_about").set_text("About DOSBox-X").
set_callback_function(help_about_callback);
#if !defined(C_EMSCRIPTEN)

View File

@ -48,6 +48,7 @@ static Bitu printer_timout;
static bool timeout_dirty;
static std::string document_path;
static std::string font_path;
static std::string device;
static char confoutputDevice[50];
static bool confmultipageOutput, shellhide;
static std::string actstd, acterr;
@ -67,6 +68,41 @@ void CPrinter::FillPalette(uint8_t redmax, uint8_t greenmax, uint8_t bluemax, ui
}
}
extern std::string prtlist;
void CPrinter::getPrinterContext() {
#if defined (WIN32)
if (device.size()&&device!="-") {
printerDC = CreateDC("WINSPOOL", device.c_str(), NULL, NULL);
return;
}
// Show Print dialog to obtain a printer device context
PRINTDLG pd;
pd.lStructSize = sizeof(PRINTDLG);
pd.hDevMode = (HANDLE) NULL;
pd.hDevNames = (HANDLE) NULL;
pd.Flags = PD_RETURNDC;
pd.hwndOwner = NULL;
pd.hDC = (HDC) NULL;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.nMinPage = 0;
pd.nMaxPage = 0;
pd.nCopies = 1;
pd.hInstance = NULL;
pd.lCustData = 0L;
pd.lpfnPrintHook = (LPPRINTHOOKPROC) NULL;
pd.lpfnSetupHook = (LPSETUPHOOKPROC) NULL;
pd.lpPrintTemplateName = (LPSTR) NULL;
pd.lpSetupTemplateName = (LPSTR) NULL;
pd.hPrintTemplate = (HANDLE) NULL;
pd.hSetupTemplate = (HANDLE) NULL;
if (PrintDlg(&pd)) printerDC = pd.hDC;
else printerDC = NULL;
#endif
}
CPrinter::CPrinter(uint16_t dpi, uint16_t width, uint16_t height, char* output, bool multipageOutput)
{
if (FT_Init_FreeType(&FTlib))
@ -127,35 +163,6 @@ CPrinter::CPrinter(uint16_t dpi, uint16_t width, uint16_t height, char* output,
resetPrinter();
if (strcasecmp(output, "printer") == 0)
{
#if defined (WIN32)
// Show Print dialog to obtain a printer device context
PRINTDLG pd;
pd.lStructSize = sizeof(PRINTDLG);
pd.hDevMode = (HANDLE) NULL;
pd.hDevNames = (HANDLE) NULL;
pd.Flags = PD_RETURNDC;
pd.hwndOwner = NULL;
pd.hDC = (HDC) NULL;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.nMinPage = 0;
pd.nMaxPage = 0;
pd.nCopies = 1;
pd.hInstance = NULL;
pd.lCustData = 0L;
pd.lpfnPrintHook = (LPPRINTHOOKPROC) NULL;
pd.lpfnSetupHook = (LPSETUPHOOKPROC) NULL;
pd.lpPrintTemplateName = (LPSTR) NULL;
pd.lpSetupTemplateName = (LPSTR) NULL;
pd.hPrintTemplate = (HANDLE) NULL;
pd.hSetupTemplate = (HANDLE) NULL;
PrintDlg(&pd);
// TODO: what if user presses cancel?
printerDC = pd.hDC;
#endif
}
LOG(LOG_MISC,LOG_NORMAL)("PRINTER: Enabled");
}
}
@ -223,7 +230,7 @@ CPrinter::~CPrinter(void)
FT_Done_FreeType(FTlib);
}
#if defined (WIN32)
DeleteDC(printerDC);
if (printerDC) DeleteDC(printerDC);
#endif
}
@ -1720,8 +1727,9 @@ void CPrinter::outputPage()
{
#if defined (WIN32)
// You'll need the mouse for the print dialog
if(mouselocked)
if (mouselocked)
GFX_CaptureMouse();
if (!device.size() || printerDC==NULL) getPrinterContext();
uint16_t physW = GetDeviceCaps(printerDC, PHYSICALWIDTH);
uint16_t physH = GetDeviceCaps(printerDC, PHYSICALHEIGHT);
@ -2074,7 +2082,7 @@ void CPrinter::finishMultipage()
else if (strcasecmp(output, "printer") == 0)
{
#if defined (WIN32)
EndDoc(printerDC);
if (printerDC) EndDoc(printerDC);
#endif
}
outputHandle = NULL;
@ -2240,11 +2248,11 @@ void PRINTER_Init()
//real_writew(0x0040, 0x0008, LPTPORT);
if (!section->Get_bool("printer")) return;
inited = true;
document_path = section->Get_string("docpath");
ResolvePath(document_path);
font_path = section->Get_string("fontpath");
ResolvePath(font_path);
device = section->Get_string("device");
confdpi = section->Get_int("dpi");
confwidth = section->Get_int("width");
confheight = section->Get_int("height");
@ -2269,6 +2277,32 @@ void PRINTER_Init()
DOSBoxMenu::item *item;
MAPPER_AddHandler(FormFeed, MK_f2 , MMOD1, "ejectpage", "Send form-feed", &item);
item->set_text("Send form-feed");
#if defined(WIN32)
if (!inited && !strcasecmp(confoutputDevice, "printer")) {
DWORD dwNeeded = 0, dwReturned = 0;
bool fnReturn = EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 1L, (LPBYTE)NULL, 0L, &dwNeeded, &dwReturned); PRINTER_INFO_1* pInfo = NULL;
if (dwNeeded > 0) pInfo = (PRINTER_INFO_1 *)HeapAlloc(GetProcessHeap(), 0L, dwNeeded);
if (NULL != pInfo) {
dwReturned = 0;
fnReturn = EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 1L, (LPBYTE)pInfo, dwNeeded, &dwNeeded, &dwReturned);
}
if (fnReturn) {
unsigned int devnum;
if (1!=sscanf(device.c_str(),"%u",&devnum)) devnum=-2;
prtlist = "Printer Device List\n-------------------------------------------------------------\n";
for (int i=1; i < dwReturned; i++) {
if(devnum>0&&i==devnum) device=pInfo[i].pName;
prtlist+=(i<10?"0":"")+std::to_string(i)+" "+pInfo[i].pName+"\n";
}
std::istringstream in(("\n"+prtlist+"\n").c_str());
if (in) for (std::string line; std::getline(in, line); )
LOG_MSG("%s", line.c_str());
} else
pInfo = NULL;
}
#endif
inited = true;
}
#endif

View File

@ -90,6 +90,8 @@ public:
CPrinter (uint16_t dpi, uint16_t width, uint16_t height, char* output, bool multipageOutput);
virtual ~CPrinter();
void getPrinterContext();
// Process one character sent to virtual printer
void printChar(uint8_t ch);

View File

@ -3,4 +3,4 @@ AM_CPPFLAGS = -I$(top_srcdir)/include "-DRESDIR=\"$(resdir)\""
resdir = $(datarootdir)/dosbox-x
noinst_LIBRARIES = libmisc.a
libmisc_a_SOURCES = cross.cpp messages.cpp programs.cpp setup.cpp support.cpp regionalloctracking.cpp shiftjis.cpp iconvpp.cpp
libmisc_a_SOURCES = cross.cpp messages.cpp programs.cpp setup.cpp support.cpp regionalloctracking.cpp savestates.cpp shiftjis.cpp iconvpp.cpp

1672
src/misc/savestates.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -123,7 +123,11 @@ HRESULT CDirect3D::InitializeDX(HWND wnd, bool triplebuf)
thread_run = true;
thread_command = D3D_IDLE;
#if defined(C_SDL2)
thread = SDL_CreateThread(EntryPoint, "Direct3D", this);
#else
thread = SDL_CreateThread(EntryPoint, this);
#endif
SDL_SemWait(thread_ack);
#endif

View File

@ -13,7 +13,7 @@ using namespace std;
CDirect3D* d3d = NULL;
void ResolvePath(std::string& in);
static void d3d_init(void)
void d3d_init(void)
{
sdl.desktop.want_type = SCREEN_DIRECT3D;
if (!sdl.using_windib)
@ -30,7 +30,11 @@ static void d3d_init(void)
SDL_SysWMinfo wmi;
SDL_VERSION(&wmi.version);
if (!SDL_GetWMInfo(&wmi))
#if defined(C_SDL2)
if (!SDL_GetWindowWMInfo(sdl.window, &wmi))
#else
if (!SDL_GetWMInfo(&wmi))
#endif
{
LOG_MSG("SDL:Error retrieving window information");
LOG_MSG("Failed to get window info");
@ -50,7 +54,11 @@ static void d3d_init(void)
OUTPUT_SURFACE_Select();
return;
}
else if (d3d->InitializeDX(wmi.child_window, sdl.desktop.doublebuf) != S_OK)
#if defined(C_SDL2)
else if (d3d->InitializeDX(wmi.info.win.window, sdl.desktop.doublebuf) != S_OK)
#else
else if (d3d->InitializeDX(wmi.child_window, sdl.desktop.doublebuf) != S_OK)
#endif
{
LOG_MSG("Unable to initialize DirectX");
OUTPUT_SURFACE_Select();
@ -83,7 +91,6 @@ void OUTPUT_DIRECT3D_Select()
{
sdl.desktop.want_type = SCREEN_DIRECT3D;
render.aspectOffload = true;
d3d_init();
#if defined(WIN32) && !defined(C_SDL2)
SDL1_hax_inhibit_WM_PAINT = 1;
@ -232,18 +239,35 @@ Bitu OUTPUT_DIRECT3D_SetSize()
// Create a dummy sdl surface
// D3D will hang or crash when using fullscreen with ddraw surface, therefore we hack SDL to provide
// a GDI window with an additional 0x40 flag. If this fails or stock SDL is used, use WINDIB output
void GFX_SetResizeable(bool enable);
if (GCC_UNLIKELY(d3d->bpp16))
{
#if defined(C_SDL2)
GFX_SetResizeable(true);
sdl.window = GFX_SetSDLWindowMode(windowWidth, windowHeight, SCREEN_SURFACE);
if (sdl.window != NULL) sdl.surface = SDL_GetWindowSurface(sdl.window);
else sdl.surface = NULL;
sdl.desktop.pixelFormat = SDL_GetWindowPixelFormat(sdl.window);
#else
sdl.surface = SDL_SetVideoMode(windowWidth, windowHeight, 16, sdl.desktop.fullscreen ? SDL_FULLSCREEN | 0x40 : SDL_RESIZABLE | 0x40);
sdl.deferred_resize = false;
sdl.must_redraw_all = true;
#endif
retFlags = GFX_CAN_16 | GFX_SCALING;
}
else
{
#if defined(C_SDL2)
GFX_SetResizeable(true);
sdl.window = GFX_SetSDLWindowMode(windowWidth, windowHeight, SCREEN_SURFACE);
if (sdl.window != NULL) sdl.surface = SDL_GetWindowSurface(sdl.window);
else sdl.surface = NULL;
sdl.desktop.pixelFormat = SDL_GetWindowPixelFormat(sdl.window);
#else
sdl.surface = SDL_SetVideoMode(windowWidth, windowHeight, 0, sdl.desktop.fullscreen ? SDL_FULLSCREEN | 0x40 : SDL_RESIZABLE | 0x40);
sdl.deferred_resize = false;
sdl.must_redraw_all = true;
#endif
retFlags = GFX_CAN_32 | GFX_SCALING;
}

View File

@ -49,16 +49,13 @@
#define C_SDL_NET 1
/* Define to 1 if you have the <d3d9.h> header file. */
#if !defined(C_SDL2)
#define HAVE_D3D9_H 1
#endif
#if HAVE_D3D9_H
/* Define to 1 if you want to add Direct3D output to the list of available outputs */
#define C_DIRECT3D 1
/* Define to 1 to use Direct3D shaders, requires d3d9.h and libd3dx9 */
#define C_D3DSHADERS 1
#endif
/* MT32 (munt) emulation */
#define C_MT32 1

View File

@ -1299,6 +1299,7 @@ copy "$(SolutionDir)\..\contrib\windows\shaders\*.*" "$(OutputPath)\shaders\"</C
<ClCompile Include="..\src\misc\programs.cpp" />
<ClCompile Include="..\src\ints\qcow2_disk.cpp" />
<ClCompile Include="..\src\misc\regionalloctracking.cpp" />
<ClCompile Include="..\src\misc\savestates.cpp" />
<ClCompile Include="..\src\misc\setup.cpp" />
<ClCompile Include="..\src\misc\support.cpp" />
<ClCompile Include="..\src\output\direct3d\direct3d.cpp" />