Commit graph

3720 commits

Author SHA1 Message Date
Denis Pauk
408e7d9a99 Scale down model preview icon is too big 2021-06-13 15:52:48 +03:00
Denis Pauk
7be959894b fix line duplication 2021-06-13 15:46:16 +03:00
Denis Pauk
d554b89730 sound: cleanup ogg to wav code 2021-06-13 15:46:16 +03:00
Denis Pauk
fbde7b753f fclose is not required with close_on_free=true 2021-06-13 15:46:16 +03:00
Denis Pauk
bf286dc952 Add ogg/vorbis sound for effects 2021-06-13 15:46:16 +03:00
David Carlier
53c684525f solairs/illumos build fix proposal. 2021-06-13 08:25:56 +01:00
Yamagi
f4e7ee59c4 Bump version to 8.00rc1. 2021-06-07 10:10:16 +02:00
Yamagi
bb7bf8ef9e Disable floating-point expression contraction on gcc builds.
While this shouldn't be a problem with C code, better be safe than
sorry. @DanielGibson stumbled over this while debugging some strange
RB-Doom3 / dhewm3 issues with gcc. See this bug report for details:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100839
2021-06-06 18:48:38 +02:00
Yamagi
228c6060f3 Update the CHANGELOG for 8.00. 2021-06-06 17:46:41 +02:00
Daniel Gibson
7ae9655f3a Fix UBSan Warnings
- memcpy() shouldn't be called with NULL, even if length == 0
- In CMod_LoadBrushSides() j (from in->texinfo) could be -1,
  which of course is no valid array index
2021-06-04 13:39:43 +02:00
Daniel Gibson
dc7ad65bb0 Fix crash in soft renderer
RE_Draw_StretchPicImplementation() would write up to
height+picupscale-1 lines.
That overflows the buffer so make sure it doesn't.
2021-06-04 13:38:14 +02:00
Yamagi
2861874da6 Small corrections to the documentation. 2021-06-03 07:24:42 +02:00
Spirrwell
b9129f2fa8 Fix some leaks
Most of these are probably "harmless", but I could definitely see the missing/improper SDL_Quit/SDL_QuitSubsystem causing headaches later.
2021-06-02 19:45:34 -04:00
Yamagi
c9913eb538 Detect if an autosave is loaded and advance world by 100 frames.
Autosaves are special. The are a byproduct of the level change process.
When loaded they aren't respawning the player at it's last position, the
player is relocated to func_playerstart. Since entities spawn at their
start position, the player may end up in the wrong spot.

One example is train.bsp -> base2.bsp. The platform spawns in upper
position, the player in lower position. The platform comes down and
crushes the player.

Most of these cases work by luck when the client isn't paused during
load, because the world advances a few frames before the player is
spawned. Implement a better fix: Detect if an autosave is loaded (name
is save0 or current) and treat it like a map change, advance the world
by 100 frames. We cant use the `autosave` boolean, because it's in the
game savefile.

Fix suggested by @BjossiAlfreds, closes #711.
2021-05-29 17:16:42 +02:00
Yamagi
8f6a085434 Remove ref_vk, the Vulkan renderer ported from vkQuake2.
While having a Vulkan renderer in Yamagi Quake II sounded like a good
idea, especially for cheap hardware with broken OpenGL drivers, the last
weeks showed that the code is not ready for primetime. Some examples
for critical problems:

 * Render glitches when using non-standard assets. Everything with more
   polygons and texture resultion than baseq2 seems to be broken.
 * The startup and shutdown code is a mess. While I fixes the most
   critical bug, there're a lot of cases left. Startup and shutdown
   mostly works by luck.
 * At least one memory leak in the model code.

And neither @DanielGibson nor myself have deeper knowledge about Vulkan.
We don't have the time and the motivation to learn it. While some
community members did excellent work on ref_vk (especially @0lvin and
@rg3), the community maintenance promised in the initial pull request
never really materialized. Therefor we risk ending up with a renderer
that we can't and won't maintain by ourself.

Vulkan is not gone. The code will be recommitted in a separate
repository at: https://github.com/yquake2/ref_vk

We're willing to give community members commit access to that
repository. Send a substantial pull request and ask for it.
2021-05-28 09:33:46 +02:00
Yamagi
76d61d9d8f Remove rev_vk from the client. 2021-05-28 09:33:44 +02:00
Yamagi
0838faf120 Remove ref_vk from the documentation. 2021-05-28 09:32:42 +02:00
Yamagi
ce10213d91 Remove rev_vk from the Makefile. 2021-05-28 09:32:42 +02:00
Yamagi
8c297a003f Remove rev_vk from the CmakeLists.txt. 2021-05-28 09:32:42 +02:00
Yamagi
84312ae8b7 Check if renderer lib exists before loading it.
This is a noop change, we're just bailing out somewhat earlier.
2021-05-28 09:32:42 +02:00
Yamagi
496985eb90 'Unknown renderer' as upper entry point to the fallback magic.
This is next to no functional change, the only difference to before is,
that the Vulkan renderer is treated as an unknown renderer. gl3 is the
first regular fallback.
2021-05-28 09:32:42 +02:00
Yamagi
ffddd0f7c9 Unify renderer lib path generation.
This makes sure that all users of the renderer lib have the same world
view.
2021-05-28 09:32:42 +02:00
Yamagi
6822da851e Move renderer availability check into vid.c, rename to VID_HasRenderer. 2021-05-28 09:32:42 +02:00
Yamagi
ddce6691e2 Let the video menu skip over non existent renderer libs.
Unitl now the video menu showed all known renderer libs (gl1, gl3, vk
and soft), regardless if the lib was available or not. Rework the
renderer selection logic to skip over non existent renderer libs:
Generate an array combining the menu string and cvar string of all
available renderer libs, use this array instead of the hardcoded array.
While at it simplify the code a little bit.
2021-05-28 09:32:42 +02:00
Yamagi
e66fd250c2 It's vk, not vulkan. 2021-05-25 11:54:38 +02:00
Yamagi
968cd4248d Bump max number of OGG/Vorbis files to 128.
Requested in #714, closes #714.
2021-05-12 18:11:26 +02:00
Daniel Gibson
002498c33d framerate-independent turning of player-model in multiplayer menu
fixes #701
2021-05-08 18:59:52 +02:00
Daniel Gibson
ea51d5f924 Add r_listmodes, change one comment and a message
r_listmodes does the same as vid_listmodes, but is more consistent with
r_mode

the rest is cosmetical
2021-05-08 18:58:24 +02:00
Yamagi
2e8e6088b3 Add logic to prevent Vulkan restart loops.
So far I haven't seen a restart loop, but at least in theory they'e
possible. Because its hard to break out of such loop, especially on
Windows were interaction with the taskmanager is required, play save
and restart max. 3 times in a row.
2021-04-30 13:14:29 +02:00
Yamagi
950ec0d67e Lower vkAcquireNextImageKHR() timeout to 500 milliseconds.
The timeout specifies how long Vulkan waits for the next frame becoming
available. On the one hand we need to take the vsync or the possibility
that we get scheduled away for longer times into account. On the other
hand we don't want to wait for too long, the game may run into the
timeout after its windows was minimized, etc. 500 milliseconds sounds
like a good compromise.
2021-04-30 13:14:29 +02:00
Yamagi
7ea425ee25 Handle VK_TIMEOUT, may lead to restart loops. 2021-04-30 13:14:29 +02:00
Yamagi
c543d3cc05 Work around maximal extent size of 0x0 when the game is minimized.
Some GPU drivers set a maximal extent size of 0x0 when the window gets
minimized. One example is Intel on Windows. A swapchain with extent
size of 0x0 is invalid, so we cannot reinitialize the renderer... Work
around that by postponing the restart as long as the maxmimal extent
size stays 0x0.

This could should be done in the client (don't call into th renderer
when the window is minimized), but it would need a lot of changes
to the client <-> renderer interactions. So take the easy route.
2021-04-30 13:14:29 +02:00
Yamagi
dd80702913 Add a function QVk_CheckExtent() to query the extent state.
This will be used to detect if we've got an extent size of 0x0 because
the window has been maximized.
2021-04-30 13:14:29 +02:00
Yamagi
0ccf1e8ef8 Make current frame as not started after vk init / shutdown.
The client might call into the renderer after it was shut down by
`VID_ShutdownRenderer()` or initialized `VID_LoadRenderer()`. This
is arguably a client bug, but hard to fix on client side and not
a problem for all other renderers. Work around it by marking the
current frame as 'not started' at Vulkan shutdown and init.
2021-04-30 13:14:29 +02:00
Yamagi
a38084c621 Move QVk_Postinit() from render init to context init.
This is more in line with the rest of the code. Reinitializing the
internal state when building a new context is saver than relying on
Vulkan telling us that something is wrong an reacting to that.
2021-04-30 13:14:29 +02:00
Yamagi
1f4082c419 Call QVk_WaitAndShutdownAll() on context shutdown.
Just calling `QVk_Shutdown()` is wrong. It doesn't wait for Vulkan to
finish, which can cause crashes. And it leaks some ressources which
makes the GPU driver unhappy.
2021-04-30 13:14:29 +02:00
Yamagi
3cf786e158 Ensure that the vk renderer isn't init or shutdown twice.
The ref_vk renderer was written for vkQ2 which has differend renderer
<-> client semantics. In YQ2 we can end up initializing or shutting the
renderer down several times. Not by the client, but by the client not
knowing of the renderer has already initialized / shutdown it's internal
state. This is fatal, leading to ressource leaks, crashes and other fun.

Introduce a new global variable `vk_initialize` and use it to track if
we're initialized or not.
2021-04-30 13:14:29 +02:00
Yamagi
2ccc80a1c6
Merge pull request #707 from BjossiAlfreds/player-sounds
Fix for some player sound bugs
2021-04-30 11:53:01 +02:00
BjossiAlfreds
d41d90d8b3 Fix for some player sound bugs 2021-04-30 01:43:15 +00:00
Yamagi
4cacd4a0c9
Merge pull request #706 from BjossiAlfreds/shark-bbox
Shark bbox fix and added check for inuse after entity thinking
2021-04-27 08:59:53 +02:00
Yamagi
c88c299172 Fix playback of OGG/Vorbis files with != 2 channels.
This was a stupid bug and the code worked just by luck, but only with
stereo files. Because sizeof(short) == 2 and ogg_file->channels.
2021-04-24 17:48:28 +02:00
BjossiAlfreds
75d671656e Shark bbox fix and added check for inuse after entity thinking 2021-04-18 01:07:07 +00:00
Yamagi
7d27e0d0e8
Merge pull request #698 from BjossiAlfreds/map-fixes
Map fixes for old and newly discovered bugs + removed code hacks
2021-04-13 13:00:19 +02:00
Yamagi
ef248cbe6a Port the vk renderer to the new ref restart API.
Since `vid_fullscreen` isn't special anymore, it's completely handled by
`Vid_Restart_f()`, which in turn simplifies the spaghetti code in the vk
renderer. If I understand that glibberish correctly the only we need to
handle is the partial restart in `QVk_Restart()`.
2021-04-11 11:23:45 +02:00
Yamagi
fa30a41c5e Port the soft renderer to the new ref restart API. 2021-04-11 11:23:45 +02:00
Yamagi
01fa2cfc1c Port the gl1 renderer to the new ref restart API. 2021-04-11 11:23:44 +02:00
Yamagi
27a021eb7c Port the client to the new restart API.
This fixes the video menu and alt-tab when running a renderer that uses
the new API.
2021-04-11 11:23:44 +02:00
Yamagi
a5102f47dd Port the gl3 renderer to the new ref restart API. 2021-04-11 11:23:44 +02:00
Yamagi
09d645ab4b Extend the ref import API with Vid_RequestRestart().
This function will be used to replace the vid_fullscreen->modified
mechanism used the communicate renderer configuration restarts to the
client with a proper proper API. The implementation is backward
compatible, existing renderers are still working.
2021-04-11 11:23:44 +02:00
Yamagi
886ce1525e Port missing !vk_frameStarted guards from vulkanQ2.
Without these guards draw calls may be emitted without having a working
or sane context, leading to crashes in the Vulkan driver.
2021-04-11 11:17:52 +02:00