Commit graph

901 commits

Author SHA1 Message Date
Christoph Oelckers
ff379e7c0c replaced all 'exit's with an ExitEvent exception
The main exits are initiated from code that cannot filter this back to D_DoomMain easily so the exception is the only way to get there.

The 3 main points of exit are:

* quit/exit CCMD
* quitting the menu through ST_Endoom
* receiving a quit message on the main window.
2019-10-07 01:24:51 +02:00
Christoph Oelckers
5d265d2d88 - don't exit from within a window proc.
This should be handled by the message pump evaluating WM_QUIT which is how Windows suggests this to be done.
2019-10-07 01:11:53 +02:00
Christoph Oelckers
96006eb94f - moved all exception handling out of the backends
The main catch is now in D_DoomMain, only calling platform specific functions to handle the output for the error.

As a nice side effect, -norun can now be done without an exception, just by exiting D_DoomMain with a special exit code.
2019-10-07 00:37:56 +02:00
Christoph Oelckers
b5fa08bf15 - consolidated I_FatalError functions
This also removes the handling from thr Posix backend and will not compile on non-Windows.
2019-10-07 00:20:07 +02:00
Christoph Oelckers
cd086ae1da - consolidated the 3 I_Error implementations
Debug output is now being handled by the respective interface functions, not by the Windows I_Error itself.
2019-10-07 00:01:12 +02:00
Christoph Oelckers
b0acfc3ce6 - split up st_start.cpp into one file with the Windows interface code and a second one which only contains platform independent code.
Since this made heavy use of Windows type, those were duplicated to avoid rewriting the entire interface.
This split at least reduces the amount of code needed to refactor for making the screens work on other platforms than Windows.
2019-10-01 23:00:13 +02:00
Christoph Oelckers
d2c156224b - cleanup of the sound init/exit code.
Now there is only one single entry point for both, instead of previously 2 entry and 4 exit points.
This also eliminates the explicit shutdown of ZMusic. Timidity++'s two buffers have been put in containers that self-destruct on shutdown and calling dumb_exit is not necessary because the only feature requiring it is not used by any code in the music library.
2019-10-01 20:04:46 +02:00
Christoph Oelckers
86ab366958 - some reformatting on exit code, mainly to make searching for the content easier. 2019-10-01 19:06:28 +02:00
Christoph Oelckers
338ae15a4c - sanitized exit code a bit
Instead of trying a homegrown way to avoid recursive exceptions, let's do it with the defined procedure C++ has for this case: call std::terminate.

This allowed removing some old hackery inherited from Boom and will now hopefully allow sanitizing the exit procedure to the point that it can be done without depending on exit handlers.
2019-10-01 01:37:21 +02:00
Christoph Oelckers
ff40bcd178 - moced I_DetectOS call into D_DoomMain
This requires the console and was the reason for this strange setup.
2019-10-01 01:02:49 +02:00
Christoph Oelckers
a1a73ef2b3 - moved the initial C_InitConsole call into D_DoomMain
The only difference here were the size values on Windows but for this initial call they have been useless for a long time. When this code was written the console buffer still had a fixed width that needed to be set before adding any text.
2019-10-01 01:00:37 +02:00
Christoph Oelckers
9f15efc5f5 - also put the Windows system specific exit handlers into atexit's list
Again, these have no place in the game's own uninit code.
2019-10-01 00:51:14 +02:00
Christoph Oelckers
e7c388dccd - don't throw exceptions before the system isn't initialized
If the window cannot be opened this has no way to report the problem. In this case a message box is needed.
2019-10-01 00:42:21 +02:00
Christoph Oelckers
282047e67c - added a mapping table from DOS-IBM-437 to Unicode
This is for future use, added now so that it won't get lost.
2019-10-01 00:26:07 +02:00
Christoph Oelckers
d0cf21654e - moved the CD Audio code to ZMusic, too.
This was the last player class.
This code was also cleaned up for non-Windows systems where CD Audio is not implemented.
Instead of providing an empty implementation, all related code is now explicitly deactivated.
2019-09-30 02:22:53 +02:00
Christoph Oelckers
cfe89ef6e6 - created a new zmusic library which will eventually contain all the music playback code.
Currently all it contains are the MIDI sources and the MIDI devices, the rest needs to be reworked first.
2019-09-28 18:32:25 +02:00
Christoph Oelckers
c3f26422df - changed MIDI sources so that they do not have to include i_musicinterns.h anymore.
They were already clean of unwanted external references, but including this file made it hard to keep it that way.
This also moves a few useful definitions around to less 'dirty' headers.
2019-09-25 21:47:33 +02:00
Magnus Norddahl
a410324084 Merge remote-tracking branch 'origin/master' into polybackend 2019-08-25 11:54:45 +02:00
Christoph Oelckers
66db894866 - split off all music code from s_sound.cpp 2019-08-23 17:15:19 +02:00
Christoph Oelckers
3cfda930ea - removed all Doom specific dependencies from cmdlib.cpp/h.
This meant moving CleanseString and ParseHex elsewhere and removing the I_Error call from ScanDirectory.
2019-08-20 23:12:23 +02:00
Magnus Norddahl
9da46d0e0a - force this branch to always use the poly backend 2019-07-24 21:45:37 +02:00
Magnus Norddahl
e6f6f10e81 Merge remote-tracking branch 'origin/master' into polybackend 2019-07-24 21:39:07 +02:00
Christoph Oelckers
8177583e2f - treat configurations which load a secondary WAD on top of a primary IWAD like SVE to consider the secondary WAD an actual IWAD as well.
This fixes localization of the SVE menu.
2019-07-15 20:48:00 +02:00
drfrag
416f5d03b7 - Fixed compilation with MinGW. 2019-07-15 19:26:25 +02:00
Christoph Oelckers
293aa2e6da - There's really no need anymore to dynamically load RawInput, considering it has been in Windows since XP. 2019-07-14 17:41:25 +02:00
Christoph Oelckers
79ad3e6203 - define _WIN32_WINNT to 0x600 (Vista) in the CMake project instead of littering all files with inconsistent settings for the target version. 2019-07-14 16:55:01 +02:00
Christoph Oelckers
f50e402e92 - sorted sound backend code into subdirectories. 2019-07-14 16:07:18 +02:00
alexey.lysiuk
aba7132846 - cleaned up language detection leftovers 2019-07-13 15:47:43 +03:00
Christoph Oelckers
953e388e1c Merge branch 'master' of https://github.com/coelckers/gzdoom 2019-07-07 08:09:14 +02:00
Magnus Norddahl
259909b6dd - fix querying for the wrong interface when the UNICODE define is set 2019-06-30 21:13:56 +02:00
Magnus Norddahl
6e29d81502 - remove dead code 2019-06-30 21:13:15 +02:00
Christoph Oelckers
1081338af2 - removed a few obsolete definitions from basictypes.h 2019-06-26 22:13:12 +02:00
Christoph Oelckers
e93de62f98 - eliminated dependency of CVar code on AActor.
As a low level feature, the CVAR management should not access game structures like actors, just to retrieve a player index. The index should be calculated by the calling code instead and passed into the function.

# Conflicts:
#	src/win32/i_specialpaths.cpp
2019-06-26 21:28:45 +02:00
Magnus Norddahl
706bc0b7c6 Merge remote-tracking branch 'origin/master' into polybackend 2019-06-23 20:29:04 +02:00
Christoph Oelckers
3030a6d389 - set Visual C++ compiler to use /permissive- mode and fixed the one error this generated.
This also means that Visual Studio 2015 is no longer supported as it has no proper standard conforming compile mode.
2019-06-20 20:25:34 +02:00
Magnus Norddahl
bb47230f79 Merge remote-tracking branch 'origin/master' into polybackend 2019-06-10 22:46:32 +02:00
Christoph Oelckers
2766303cfc - consolidated the 3 atterm implementations.
Each platform had its own copy. Why?
2019-06-10 12:01:01 +02:00
Magnus Norddahl
4a7824c380 - implement vsync and letterbox 2019-05-31 05:22:06 +02:00
Magnus Norddahl
4bbab49e04 - present using direct3d 9 2019-05-30 23:31:39 +02:00
Magnus Norddahl
4fd4bfa092 Merge remote-tracking branch 'origin/master' into polybackend 2019-05-24 19:21:36 +02:00
Magnus Norddahl
756c593e96 - create a new error class for vulkan errors as they are only recoverable during initialization (unlike CRecoverableError which is recoverable during normal processing)
- improve vulkan errors by including the status code returned by vulkan if they fail
2019-05-23 14:09:05 +02:00
Magnus Norddahl
d724b623d1 - enable the depth buffer
- support vid_scalefactor
2019-05-22 17:56:29 +02:00
Magnus Norddahl
0eda298db2 - create a renderer backend based on softpoly's drawers 2019-05-22 06:29:52 +02:00
Christoph Oelckers
ec13d0e4c1 Merge remote-tracking branch 'remotes/origin/vulkan2' 2019-04-22 10:45:32 +02:00
Christoph Oelckers
e6ab678515 - fixed: The minimal window size was not calculated properly.
Minimum size is 640x400 client size not 640x400 window size in non-fullscreen.
2019-04-22 10:20:39 +02:00
Magnus Norddahl
62fa74485d Merge remote-tracking branch 'origin/master' into vulkan2 2019-04-19 18:49:00 +02:00
Christoph Oelckers
327a83a54b - fixed: GetDisplayDeviceName must always pick a valid monitor.
There is no default here, so if vid_adapter is invalid for whatever reason the engine would crash without a defined setting.
2019-04-19 07:33:51 +02:00
Rachael Alexanderson
09a2b53b21 - rename vid_backend to vid_enablevulkan. Also changed the CVAR from a 0-state enable to 1-state. So vid_enablevulkan==1 enables vulkan now. This should be less confusing. 2019-04-16 08:10:57 -04:00
Christoph Oelckers
ab256945aa - use I_Error for throwing errors in the Vulkan backend and print the message if one gets thrown during init. 2019-04-08 23:48:46 +02:00
Rachael Alexanderson
f4ea44b760 - consolidate minimum screen resolution so that it's easier to change 2019-04-07 06:56:06 -04:00
Rachael Alexanderson
efa9284141 - consolidate minimum screen resolution so that it's easier to change 2019-04-07 06:49:54 -04:00
Rachael Alexanderson
e48d2105ef Merge branch 'master' of https://github.com/coelckers/gzdoom into vulkan2 2019-04-06 00:27:18 -04:00
Christoph Oelckers
0153c2aefa - use the Unicode version of GetCommandLine for the crash log. 2019-04-04 17:49:53 +02:00
alexey.lysiuk
025e50219f - fixed missing command line in crash reports
https://forum.zdoom.org/viewtopic.php?t=64149
2019-04-04 16:37:51 +03:00
Rachael Alexanderson
ead3695844 Merge branch 'master' of https://github.com/coelckers/gzdoom into vulkan2
# Conflicts:
#	src/posix/sdl/gl_sysfb.h
2019-03-31 03:49:08 -04:00
Christoph Oelckers
ab16d3cd72 - limit minimum screen size to 640x400.
The current menu system simply does not work that well with 320x200, rendering the game hard to use at that tiny screen size. This is a clear case where the work required to keep it operational stands in no relation to the benefit.
2019-03-31 09:13:22 +02:00
Magnus Norddahl
9f0f659db0 - remove old vid_maxfps implementations as they were garbage anyway and the new one works on all the platforms 2019-03-26 11:10:17 +01:00
Christoph Oelckers
a0b0467e91 - restrict Vulkan to 64 bit builds. 2019-03-24 14:34:48 +01:00
Rachael Alexanderson
dd4ef010ab Merge remote-tracking branch 'origin/master' into vulkan2 2019-03-18 04:05:19 -04:00
Christoph Oelckers
714c656753 - set a Unicode capable font for the Windows console.
The default raster font only contains the OEM 437 code page which is quite useless.
2019-03-16 10:50:53 +01:00
Christoph Oelckers
dbd6c2eabf - removed the automatic system language detection for Windows.
Default language is now always American English, just like on Linux and macOS.
2019-03-16 00:07:18 +01:00
alexey.lysiuk
7b5eedea32 - implemented OpenGL / Vulkan switch in SDL backend 2019-03-12 16:12:14 +02:00
Rachael Alexanderson
6be5769746 - implement backend switcher for Windows. NYD: Still needs to be done for Mac and Linux 2019-03-11 23:36:44 -04:00
Rachael Alexanderson
879aae1bd3 Merge branch 'master' of https://github.com/coelckers/gzdoom into vulkan2 2019-03-11 22:07:46 -04:00
Christoph Oelckers
eb4eb1ac00 - use a wide string for the console input buffer.
Since this needs to do cursor positioning calculations it's the one spot in the entire engine where UTF-8 would simply be to messy, especially when having to deal with double wide characters.
2019-03-10 17:54:03 +01:00
alexey.lysiuk
108ea066f3 - added initial support of Vulkan to SDL backend
Removed all platform-specific code from vulkan device
2019-03-06 13:38:45 +02:00
Magnus Norddahl
319099fee9 Merge remote-tracking branch 'origin/master' into vulkan2 2019-03-05 03:07:30 +01:00
alexey.lysiuk
a3554bda70 - replaced all usages of insecure vsprintf() function 2019-03-04 17:35:38 +02:00
Christopher Bruns
52ab4b968f Remove Quad-buffered from list of VR-modes if we know it won't work. 2019-03-03 16:15:38 +01:00
Christoph Oelckers
413412f603 Merge branch 'master' into vulkan2 2019-02-23 19:53:38 +01:00
Christoph Oelckers
e091369a38 - removed FCriticalSection and replaced all of its uses with std::mutex.
There's really no need for a non-standard solution here anymore with C++11.
This also fixes an unreleased lock in the WildMidi code.
2019-02-22 20:24:24 +01:00
Magnus Norddahl
c6b29846d0 - add 3rd party vulkan dependencies
- add stubs for a vulkan hw renderer backend
- add RAII wrappers for vulkan object types
- add builder classes to isolate vulkan boilerplate code
- add a swap chain class
2019-02-20 21:21:57 +01:00
Christoph Oelckers
78d0fa9269 - fixed Windows startup.
* the window class name was still ASCII, thanks to some totally pointless and ultimately dangerous type cast to LPCTSTR which rendered all type checks ineffective.
* use wWinMain instead of WinMain so that a Unicode argv gets created. For whatever reason, the ANSI startup leaves this variable empty.
* added a 'disablecrashlog' CCMD for Windows. It is a lot more useful with a debugger present to get the standard crash notification from the system which allows opening a debugger than the crash log and no option to open a debugger.
2019-02-17 10:10:41 +01:00
Christoph Oelckers
f512f29270 - fixed crash log display.
This still contained pieces where a multibyte string was passed through SendMessage and WM_SETTEXT. All these have been replaced with SetWindowTextW.
This commit also removes the never used crash log upload code and all associated assets because it is extremely unlikely that such a feature will ever be implemented.
2019-02-17 08:50:49 +01:00
Rachael Alexanderson
0fc4640cc9 - fix building in 32 bit windows 2019-02-16 11:12:10 -05:00
Rachael Alexanderson
9f62289507 Merge branch 'master' of https://github.com/coelckers/gzdoom into localization 2019-02-16 10:50:49 -05:00
Christoph Oelckers
8018ebfab5 - use the Unicode version of Windows's clipboard functions. 2019-02-16 09:50:00 +01:00
Christoph Oelckers
b4d96aaef9 - made Windows backend parts of the console Unicode capable. 2019-02-15 22:05:26 +01:00
Christoph Oelckers
868ac5adf8 - switched the Windows backend to use the Windows Unicode API.
With localization for non-Latin languages on the support list the multibyte API doesn't cut it anymore. It neither can handle system text output outside the local code page nor can an ANSI window receive text input outside its own code page.
Similar problems exist for file names. With the multibyte API it is impossible to handle any file containing characters outside the active local code page.

So as of now, everything that may pass along some Unicode text will use the Unicode API with some text conversion functions. The only places where calls to the multibyte API were left are those where known string literals are passed or where the information is not used for anything but comparing it to other return values from the same API.
2019-02-14 22:23:33 +01:00
Rachael Alexanderson
0d2a24876b - Remove "gitversion.h" from "version.h" - should result in faster compiles after a commit in Windows
- Fix zdoom.rc to show the actual git commit tag and id for the Product Version
- Made zdoom.rc "codepage 1252" compliant as dictated by the #pragma (if this needs changed the pragma should be updated, this was messing up the version strings in the final compile)
2019-02-13 21:34:44 -05:00
Christoph Oelckers
66eb4e5048 - separation of static and map-local event handlers into separate lists.
Having everything lumped together made this a maintenance hassle because it affected how the level has to be stored.
This hasn't been tested yet, so it may not work as intended!
2019-02-02 16:43:11 +01:00
Christoph Oelckers
d005e0b483 - changed the place where the CheckRequireMouse event gets called.
The original place in I_CheckNativeMouse is unsafe because that function can get called from the system message queue which can result in a bad global state of the VM for such a call because it can be recursively invoked from code that may temporarily alter some settings.
2019-02-02 11:00:26 +01:00
Christoph Oelckers
484485f3cf - made the event manager an object so it can be instantiated multiple times. 2019-02-02 10:46:34 +01:00
Christoph Oelckers
45dc9a7b47 - renamed the level variables.
currentUILevel is now primaryLevel.
For ZScript, currentVMLevel was added. This is also exported as 'level' and will change as needed.
This also means that no breaking deprecations will be needed in the future, because in order to sandbox a level only 4 variables need to be handled: level, players, playeringame and consoleplayer.
The remaining global variables are not relevant for the level state.

The static 'level' has been mostly removed from the code except some places that still need work.
2019-02-02 00:25:51 +01:00
Christoph Oelckers
f6a91e1722 - moved the I_Error prototypes to doomerrors.h to avoid having to include the low level system header for this. 2019-01-31 19:38:04 +01:00
Christoph Oelckers
fa3312e2a9 - moved gamestate_t to g_game.h.
This made reviewing the code for accessing the global state hard, because the doomdef.h contains mainly constants, this particular item was the only thing in there that represents actual engine state.
2019-01-31 00:28:43 +01:00
Christoph Oelckers
a7746278a8 - a few remaining simple ones
This also removes a few pointless comments that popped up and consolidates setting a level's music into a subfuntion.
2019-01-28 01:25:52 +01:00
Rachael Alexanderson
dc27011370 - remove vid_hwgamma, force always use shader gamma
*** note to drfrag: Please don't cherry-pick this commit. Systems that do not use renderbuffers will still need this feature!
2019-01-23 21:50:11 +01:00
Christoph Oelckers
64595abe60 - moved main polyobject array into FLevelLocals and simplified the setup process to not depend on P_SpawnMapThing.
Since the SpawnedThings array is still available when polyobjects are spawned it makes no sense to create an expensive linked list in P_SpawnMapThing.
This can be done far better by scanning through the array again and collect all matching items in a second array.
2018-12-28 10:08:39 +01:00
Christoph Oelckers
467c73b2d7 - split P_SetupLevel so that the main part of it can be made part of the MapLoader class.
- allocate BlockNodes from the same memory arena as SecNodes.
2018-12-27 23:34:07 +01:00
Christoph Oelckers
a73c065811 - replaced several explicit allocations with TArrays. 2018-12-17 18:28:04 +01:00
Christoph Oelckers
1422a95aa8 Merge branch 'Texture_Cleanup'
# Conflicts:
#	src/textures/formats/multipatchtexture.cpp
2018-12-16 10:19:58 +01:00
Christoph Oelckers
ab624c8c5a Merge branch 'master' into Texture_Cleanup
# Conflicts:
#	src/textures/hires/hqresize.cpp
2018-12-11 20:27:24 +01:00
alexey.lysiuk
8b46be7686 - print VM stack trace on startup abort exception
https://forum.zdoom.org/viewtopic.php?t=62650
2018-12-11 10:46:56 +02:00
Christoph Oelckers
03626107eb - changed multipatch texture composition to always composite off full source images and not do it recursively.
Previously it tried to copy all patches of composite sub-images directly onto the main image.
This caused massive complications throughout the entire true color texture code and made any attempt of caching the source data for composition next to impossible because the entire composition process operated on the raw data read from the texture and not some cacheable image. While this may cause more pixel data to be processed, this will be easily offset by being able to reuse patches for multiple textures, once a caching system is in place, which even for the IWADs happens quite frequently.

Removing the now unneeded arguments from the implementation also makes things a lot easier to handle.
2018-12-08 17:23:15 +01:00
Christoph Oelckers
a4d61e6fb1 - everything compiles again.
As a bonus this already fixes several bugs caused by the botched texture scaling implementation the original texture manager came with.
System cursors are currently disabled because they rely on functionality that needs to be moved to different classes.
2018-12-06 20:12:15 +01:00
Christoph Oelckers
bced30d1e3 - made CDoomError inherit from std::exception so that the main catch block can also deal with exceptions thrown by the STL.
- Also do not ignore empty exception messages as irrelevant. The only irrelevant exception type is CNoRunExit.
2018-11-23 10:18:52 +01:00
Magnus Norddahl
3e9f531b5f - add NUMA awareness to drawer threads 2018-11-22 14:48:09 +01:00
Christoph Oelckers
705c87c6cc - fixed bad case in #include. 2018-11-04 21:33:35 +01:00
Christoph Oelckers
118bc78fe3 - moved the entire OpenGL backend into a separate namespace. 2018-10-29 13:56:17 +01:00