1
0
Fork 0
Commit graph

446 commits

Author SHA1 Message Date
Patryk Obara
e872ea0169 Use memory safe container for GL error log
Fixes V576 warning from PVS-Studio - in this case PVS is somewhat
pedantic, as it warns about printf'ing of malloc'ed memory and risk the
associated problems in OOM situations.

In this case it can be a problem, as LOG_MSG aka GFX_ShowMsg
allocates memory during printing in result an error message could cause
stack overflow, although it's extremely unlikely on modern OSes.

Avoid triggering this warning by using memory-safe container and using
C++11 data() accessor to vector internal buffer; in case of OOM
situation, stack will be unrolled and program should exit with nice
error message.
2020-02-12 08:40:01 +01:00
Patryk Obara
be6b446028 Merge branch 'svn/trunk' r4319 2020-02-12 08:39:40 +01:00
Peter Veenstra
4a565a75ed Add OpenGL shader support. (patch by ny00123 and refined by jmarsh). Add several builtin ones that mimic the scalers and some extra. Thanks jmarsh
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4319
2020-02-10 18:59:01 +00:00
Patryk Obara
bbd40ca73e Merge branch 'svn/trunk' r4317 2020-02-08 14:56:52 +01:00
Peter Veenstra
ae80176bbb Increase limits a bit more for people who want to use that.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4317
2020-02-07 15:41:31 +00:00
Peter Veenstra
2dec4d0a11 Limit max software scaler line limit to a 4k monitor. (relevant for people who use larger scalers)
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4316
2020-02-07 15:39:21 +00:00
Peter Veenstra
eb9b86269d Some graphics cards return a too small overlay when the size is larger than 1024. Fall back in that case.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4315
2020-02-07 14:25:52 +00:00
Patryk Obara
f5bf769522 Unifdef unused scaler implementations
A number of "templated" scaler implementations are unused in the
implementation.  If any single one of them needs to be brought back
(unlikely), then it's a simple matter of removing an ifdef.

These templates turn off compilation of following scaler
implementations:

void Normal1x_9_8_L(const void*)
void Normal1x_9_8_R(const void*)
void Normal2x_9_8_L(const void*)
void Normal2x_9_8_R(const void*)
void Normal3x_9_8_L(const void*)
void Normal3x_9_8_R(const void*)
void NormalDw_9_8_L(const void*)
void NormalDw_9_8_R(const void*)
void NormalDh_9_8_L(const void*)
void NormalDh_9_8_R(const void*)
void HQ2x_15_L()
void HQ2x_15_R()
void HQ3x_15_L()
void HQ3x_15_R()
void Super2xSaI_15_L()
void Super2xSaI_15_R()
void SuperEagle_15_L()
void SuperEagle_15_R()
void _2xSaI_15_L()
void _2xSaI_15_R()
void AdvMame2x_15_L()
void AdvMame2x_15_R()
void AdvMame3x_15_L()
void AdvMame3x_15_R()
void Cache_9_8(const void*)
2020-02-06 09:23:18 +01:00
krcroft
219ebc491c Fix six Coverity and PVS analysis bugs 2020-02-02 16:37:09 +01:00
Patryk Obara
e7b8d546a4 Remove usage of register storage specifier
This keywords is only a hint, was used in C in 1970s, but is useless
nowadays. Some reports indicate, that GCC never used it to actually
treat variable as a register.

It was deprecated from C++ in 2009:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4193.html#809

It was removed from language in C++17, and will likely see new meaning
in some future standard, similar to how 'auto' got replaced in C++11.
2020-02-02 15:16:29 +01:00
krcroft
1666275515 Fixup all effc++ warnings 2020-02-02 00:43:24 +01:00
krcroft
3446db1ee9 Expand mouse control methods
Replace the [sdl] `autolock = true/false` configuration setting with [sdl]
`capture_mouse = ...` with a two-value setting.

The first value defines how the mouse is controlled:
- onclick:       The mouse will be captured with a click inside the window.
- onstart:       The mouse is captured immediately on start (similar to real DOS).
- seamless:      The mouse will move seamlessly in and out of DOSBox and cannot be captured.
- nomouse:       The mouse is disabled and hidden without any input sent to the game.

The second value defines how middle-clicks are handled:
- middlegame:    Middle-clicks are sent to the game (not used to uncapture the mouse).
- middlerelease: Middle-click will uncapture the mouse when windowed (not sent to the game).

Middle-clicks are sent to the game when fullscreen or when seamless control is set.

The default setting of "onclick middlegame" reproduces DOSBox's existing behavior.
2020-02-02 00:43:24 +01:00
Nopey Nope
7dbf5cece4 Add and document KeyMapper reloading
This is accomplished by clearing all the binds on the events, and
then re-parsing the file.

This allows batch scripts to change keybindings, and is useful for DOS
game menus, who can now change the mappings per-game.
ie: config -set sdl mapperfile=~/.dosbox/mario-and-luigi.map
or: config -r -conf ~/.dosbox/mario-and-luigi.conf
(with a mapperfile=mario-and-luigi.map line in mario-and-luigi.conf)

Warning: Because internal changes don't have access to the
current_config_path, paths set with config -set are relative to the
CWD. Relevant source lines are src/misc/setup.cpp lines 349 and 917

I'm unsure if this interacts well with the CAPS and NUMLOCK code at the
bottom of MAPPER_Init, as those now get run every time the mapper
reloads. If it does misbehave, those if statements can probably be
moved to the MAPPER_StartUp function, although it is called a bit earlier
than MAPPER_Init.

A natural extension of this would be to add the ability to change the
mapperfile from within the MAPPER UI.
2020-02-01 22:31:27 +01:00
Patryk Obara
46e5fdee69 Merge branch 'svn/trunk' r4312 2020-01-29 13:07:31 +01:00
Peter Veenstra
6d11dd5eac Fix unintentional change of union to struct.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4312
2020-01-29 07:38:18 +00:00
Patryk Obara
435cd6bf1f Merge branch 'svn/trunk' r4311 2020-01-28 18:15:48 +01:00
Peter Veenstra
ec8b59ab06 Make scalerwritecache sizes depend on the maximum scaler size.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4311
2020-01-28 12:25:15 +00:00
Patryk Obara
a7ce2b442a Merge branch 'svn/trunk' r4310 2020-01-28 12:06:02 +01:00
Peter Veenstra
80c7bb7cc1 Improve PMAKE on big endian machines and fix some bugs. Includes fix from #364. (jmarsh)
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4310
2020-01-28 10:20:59 +00:00
krcroft
a0eafc9d8e Fix NULL issues in render_templates_hq.h 2020-01-22 09:40:00 +01:00
Patryk Obara
1f1e832a6c Use dosbox-staging splash screen
Users who test dosbox-staging via various GUI frontends might have a
problem distinguishing if the instance they have configured is really
dosbox-staging or some other version of DOSBox. Different splash screen
is a simple remedy for it.

Two graphical files are included: one in vector format to allow for
further refinements and one converted to necessary size in png format,
that is used as direct source of logo embedded in the source code. Use
GIMP to convert the png logo to a C file.

Notes about new design:

Orange background was replaced by black to make switch to black
background of empty terminal a little less jarring.

The box side is covered with the rainbow-like pattern to resemble logos
of various computer platforms popular in the 80s.  AFAIK IBM or
PC-clones never had such colourful logos, but the point is to resemble
a retro-computing platform while being aesthetically pleasing.

Some computing platforms, that used rainbow patterns are Sinclair,
Commodore, Amiga, Dragon 32, and Apple.  The pattern used for
dosbox-staging splash is deliberately different from all of these.

Word "staging" is rendered using excellent Raleway font:
https://www.theleagueofmoveabletype.com/raleway

This change is not supposed to be upstreamed.
2020-01-16 06:42:19 +01:00
Patryk Obara
5e3535f1e5 Merge branch 'svn/trunk' r4306 (sans SDL 1.2 bits)
This merge had serious conflicts; some of changes could be applied, but
others needed to be removed.

- Code for new SETMODE_RESTARTS_SUBSYSTEM was removed, as it depends on
  SDL 1.2 functionality (SDL_SetVideoMode) and seems rather pointless
  for SDL 2.0.
- Support for setting windowresolution as a percentage was retained, but
  window centering of this feature likely won't work, as it depends on
  SDL 1.2 env variable SDL_VIDEO_CENTERED.
- Support for applying windowresolution as a percentage was removed, as
  it was implemented purely in code removed during transition to
  SDL 2.0.
2020-01-08 04:27:29 +01:00
Patryk Obara
343b9babca Merge branch 'svn/trunk' r4305 2020-01-07 11:29:39 +01:00
Peter Veenstra
dbd6be2da0 Add OpenGL error reporting (disabled by default)
Add way to restart graphics subsystem on fullscreen/windowed mode transitions in OpenGL mode (disabled by default)
Add check for pixels being valid in OpenGL to prevent direct crash when the allocation fails. 
Add define to turn off Pixel Buffer Object usage. (disabled by default)
Add a way to specify the windowresolution as percentage of your current resolution. (This centers the window.)

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4306
2020-01-06 17:23:38 +00:00
Peter Veenstra
b59d73f5b7 Log detected extensions and correct spacing.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4305
2020-01-05 19:10:32 +00:00
Patryk Obara
fa48273663 Merge branch 'svn/trunk' r4303 2020-01-05 19:11:15 +01:00
Peter Veenstra
c5ad973795 Disable scaling by the OS on windows (scale != 100%). Could not get this working through the manifest, but this seems to work as well.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4303
2020-01-05 16:48:41 +00:00
Patryk Obara
dc0d174824 Remove unused macro definitions 2019-12-26 03:23:19 +01:00
Patryk Obara
a7280cf1f7 Query SDL for available texture renderers
There's no point in hardcoding these values - they can be different to
every user (it depends on hardware, OS, SDL version, etc).

Also, future versions of SDL might introduce more renderers, so this way
the code is more future-proof.
2019-12-26 03:23:19 +01:00
Patryk Obara
6ce7ff8b58 Change sdl.renderer to sdl.texture_renderer
Otherwise users might easily miss, that this option is supposed to work
only for 'texture' output.

Also, do slight adjustments to formatting in generated .conf file.
2019-12-26 03:23:19 +01:00
Patryk Obara
3a68ba2b26 Indicate system includes for relevant SDL headers 2019-12-26 03:23:19 +01:00
Patryk Obara
f89f87ced5 Fix large number of effc++ warnings in sdl_mapper 2019-12-26 03:23:19 +01:00
Patryk Obara
0d108a7df5 Remove GFX_SetPalette
After move to SDL2, this function is no longer useful.
2019-12-26 03:23:19 +01:00
Patryk Obara
7a415e3b8d Remove last remains of DirectDraw renderer
SDL2 patch replaced it with output=texture renderer=direct3d
2019-12-26 03:23:19 +01:00
Patryk Obara
1a58ccb14f Reorder includes in sdl_mapper 2019-12-26 03:23:19 +01:00
Patryk Obara
532345f70e Fix warnings related to misuse of SDL2 types
Use the opportunity to implement a bunch of formatting changes and fix
other warnings.
2019-12-26 03:23:19 +01:00
Patryk Obara
a06035a35e Replace SDL 1.2 with SDL 2.0
This massive patch is based on work of NY00123, which was published on
Vogons forum in 2013 and was waiting for inclusion in SVN since then:

https://www.vogons.org/viewtopic.php?f=41&t=34770

Revision from December 2018 was used to kickstart this work. However, a
number of changes were implemented:

- Original patch preserves all SDL 1.2 code by ifdefing it; this patch
  completely removes all code ifdefed for several versions of SDL 1.2.*
  This way the code will be easier to maintain going forward and
  features enabled by SDL 2.0 do not need to be backported.
  A side-effect of this change is almost-complete removal of DirectDraw
  support - but users can now use Direct3D based acceleration (without
  any ifdefs in code).
- Code ifdefed for Android was removed to make the project easier to
  understand and modify. Android port should still be possible, but it
  requires more work (mostly CI and buildsystem work).
  Android-related functionalities that were cross-platform were
  preserved.
- Code ifdefed for OpenGL ES (which was only used for Android) was
  removed - this should not affect Android support, as
  hardware-accelerated 2D should still be viable via "texture" output,
  but it was not tested, as buildsystem does not support Android ATM.
- SDL_cdrom code is not included; it was outside of scope of SDL2
  changes. Inclusion of that library did not justify supporting one
  small usecase (playblack of CD audio from physical CDs).
- Few code warning were fixed (but new sdl_mapper implementation
  introduces many, many new warnings).
- Some formatting changes were implemented.

Overall, the original patch had ~40k lines of code - here it was
trimmed to +769,-972 (so more old code got removed than new code added).

This implementation was extensively tested on Linux and somewhat tested
on Windows 10.  It fixes numerous issues (too many too list).

Testing found two small regressions:

- Starting game in fullscreen makes it impossible to switch back to
  windowed mode correctly (Windows 10)
- Scaling works a bit worse, only in text mode, only in window (Linux)

This implementation introduces revised user settings in sdl section - it
is only partly compatible with settings from SDL 1.2; this is an issue,
but it will need to be addressed in a separete commit.
2019-12-26 03:23:19 +01:00
Patryk Obara
e1286efca9 Remove SDL_cdrom 1.2 based CD-ROM interfaces
This removes a feature of mounting physical CD-ROMs in DOSBox.

SDL 2.0 removed SDL_cdrom from supported libraries, so to bring this
code back, either the functionality will need to be reimplemented or
SDL_cdrom code modernized for SDL 2.0, and bundled with the repo (the
same way SDL_sound is already bundled).
2019-12-18 22:31:19 +01:00
Patryk Obara
5f9ac5eeab Remove code ifdefed for OS/2
Cleanup before replacing SDL1.2 with SDL2.

OS/2 support was introduced in DOSBox in March 2006.  OS/2 reached EOL
in December 2006.

As of 2019, OS/2 is being continued by proprietary 32-bit only ArcaOS,
although there is no official SDL2 support, despite pledges from SDL2
maintainers.
2019-12-09 16:27:11 +01:00
Patryk Obara
301d7c3423 Merge branch 'svn/trunk' r4296 2019-11-26 18:37:09 +01:00
Peter Veenstra
1521b7ad7d Fix bug #519
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4296
2019-11-26 16:52:04 +00:00
Patryk Obara
34112dd2da Merge branch 'svn/trunk' r4282 2019-11-12 08:56:37 +01:00
Peter Veenstra
8f3474ecfd Make it possible to compile without CoreMIDI and CoreAudio on Mac OS X using a non-Apple compiler. Give some feedback to user in this case. (modified version of patch by krcroft with input from jmarsh, Dominus and Qbix)
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4281
2019-11-10 14:50:11 +00:00
Patryk Obara
9099f0620e Merge branch 'svn/trunk' 2019-10-20 07:15:43 +02:00
Peter Veenstra
5b690f936a fix externals.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4274
2019-10-19 20:08:46 +00:00
Peter Veenstra
276b187181 Make frameskip an integer.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4273
2019-10-19 19:52:24 +00:00
Patryk Obara
79fe83ede6 Merge branch 'svn/trunk' 2019-10-10 00:16:04 +02:00
Peter Veenstra
195484d5e9 Change OpenGL drawing routine to draw one big oversized TRIANGLE instead of a QUAD in order to work around an Nvidia specific scaling bug. Fixes bug #515.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4270
2019-10-09 20:53:35 +00:00
Patryk Obara
a4a6bed5c1 Merge branch 'svn/trunk' 2019-10-01 18:11:50 +02:00
Peter Veenstra
ca20ca3a3e use delete instead of free, although this code is never really used, as the running process should have been replaced at that point.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4263
2019-10-01 11:11:57 +00:00