Commit graph

1691 commits

Author SHA1 Message Date
Denis Pauk
11bb96401f soft: set current frame before use worldentity 2021-10-16 12:35:22 +03:00
Denis Pauk
7576d2d300 gl3: make currententity local 2021-10-16 12:35:04 +03:00
Denis Pauk
46c654b379 gl1: use local currentmodel 2021-10-16 12:34:32 +03:00
Denis Pauk
93ab5896e9 gl3: port submodel load code from vk render(8bd39ad5) 2021-10-16 12:34:23 +03:00
Denis Pauk
84773d7d79 gl3: use local model on load(35d598bc) 2021-10-16 12:34:15 +03:00
Denis Pauk
423c3fa299 gl3: preserve cache on free slots in image and models list(aa6032f0) 2021-10-16 12:33:51 +03:00
Denis Pauk
330830fc38 gl1: preserve cache on free slots in image and models list(aa6032f0) 2021-10-16 12:33:13 +03:00
Denis Pauk
e3a83c6b32 add const to Mod_ClusterPVS 2021-10-16 12:32:04 +03:00
Denis Pauk
f3f8c9a1f6 soft: make r_worldentity local 2021-10-15 23:39:34 +03:00
Denis Pauk
083cfca305 gl1: make currententity local 2021-10-15 23:37:56 +03:00
Denis Pauk
2d1a090feb gl: use local currentmodel 2021-10-15 23:37:56 +03:00
Denis Pauk
2c942d83f1 gl: use local model on load(35d598bc) 2021-10-15 23:37:56 +03:00
Denis Pauk
d8eb64cdcd gl1: port submodel load code from vk render(8bd39ad5) 2021-10-15 23:37:53 +03:00
Denis Pauk
34fb8d45b0 soft: Use common RadiusFromBounds 2021-10-15 23:30:56 +03:00
Denis Pauk
a9d6939297 gl: use lower MSAA value on error 2021-10-15 23:30:56 +03:00
Denis Pauk
0bbd65ebac gl1: Scale 8bit images with retexturing=2 2021-10-15 23:30:56 +03:00
Denis Pauk
58af4c84ff gl3: Scale 8bit images with retexturing=2 2021-10-15 23:30:56 +03:00
David Carlier
6cb2981c9c sw/gl1 client Mod_PointInLeaf sig mismatch. 2021-10-08 21:38:34 +01:00
Yamagi
f4f61c1f27 Add g_machinegun_norecoil to the list of cheat proteced cvars. 2021-09-28 18:37:56 +02:00
apartfromtime
a737500f89 Consistent naming 2021-09-21 14:18:25 +10:00
Denis Pauk
ea272241a4 soft: Use SmoothColorImage as r_anisotropic 2021-08-08 23:34:47 +03:00
Denis Pauk
aa6032f00f soft: preserve cache on free slots in image and models list 2021-08-08 17:43:14 +03:00
Denis Pauk
35d598bce6 soft: use local model on load 2021-08-07 23:03:48 +03:00
Denis Pauk
8bd39ad5dd soft: port submodel load code from vk render 2021-08-07 17:24:39 +03:00
Denis Pauk
a8b02d4725 Sound: unload only on run of slots 2021-08-07 10:38:02 +03:00
Yamagi
e2e2bddfa3 Fix demo loop after changing the game through the menu.
Injecting the demo loop right after the `game` cvar was changed cannot
work: The demo loop is implemented through aliases, aliases are expended
as soon as they're added to the command buffer. However, the game isn't
changed as soon as the cvar is set, but the next time when the control
flow enters the file system. Therefor the aliases get expanded to the
wrong game and the demo loops breaks.

This closes #719.
2021-07-25 09:45:51 +02:00
Denis Pauk
7f1fd069f4 use LittleShort in S_GetStatistics and S_GetVolume 2021-06-26 15:23:07 +03:00
Denis Pauk
c4526bac51 Sync haptic effect to sound track 2021-06-26 15:23:07 +03:00
Yamagi
d9d5552662
Merge pull request #717 from 0lvin/ogg_sound
Add ogg/vorbis sound for effects
2021-06-25 10:18:41 +02:00
Yamagi
21483dc1bd
Merge pull request #718 from Spirrwell/master
Fix some leaks
2021-06-19 08:48:54 +02:00
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
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
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
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
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
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
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
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
Yamagi
4fd0369f47
Merge pull request #697 from 0lvin/for_review
soft: fix m8 image load
2021-04-08 11:05:56 +02:00
Denis Pauk
5cc959e501 soft: fix m8 image 2021-04-07 22:58:46 +03:00
David CARLIER
f66d7a9540 Fix segfault when turning the console before the game is launched
(thus audio backend not yet initialised).
2021-04-07 20:17:27 +01:00
Denis Pauk
68a0605582 sw: support full size retextured it_pic 2021-04-07 00:03:04 +03:00
Denis Pauk
e8105810d7 vk: rework lefthand pipeline logic 2021-04-04 13:36:47 +03:00
Denis Pauk
456acfda05 vk: Reuse TriangledFan logic for TriangleStrip 2021-04-04 12:11:11 +03:00
Denis Pauk
f8708a0f76 vk: rename triangle_{fan}_index_count 2021-04-04 10:46:35 +03:00
Denis Pauk
b2ff95249e vk: fix water on jail1 level 2021-04-03 13:31:21 +03:00
Denis Pauk
ec013874a0 check vert realloc in vk and vert list overflow in model 2021-04-03 13:31:05 +03:00
Denis Pauk
0b821a49c3 ref_vk: Reallocate mesh verts 2021-04-01 00:26:55 +03:00
Denis Pauk
bef9485859 Fix vulkan validation warning
VK_WARNING: Validation Performance Warning: [ UNASSIGNED-BestPractices-vkCreateRenderPass-image-requires-memory ] Object 0: handle = 0x58e7d23ea0, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x4003982 | Attachment 2 in the VkRenderPass is a multisampled image with 4 samples, but it uses loadOp/storeOp which requires accessing data from memory. Multisampled images should always be loadOp = CLEAR or DONT_CARE, storeOp = DONT_CARE. This allows the implementation to use lazily allocated memory effectively. (performance)
2021-03-31 22:20:01 +03:00
Yamagi
557668c35e
Merge pull request #680 from rg3/vk_restart_tweaks
Vulkan restart tweaks
2021-03-31 19:36:18 +02:00
Ricardo Garcia
6c3261180b Use vid_renderer instead of vid_refresh to re-register clients 2021-03-29 22:15:28 +02:00
Yamagi
1c8077cf61
Merge pull request #683 from devnexen/mapids_code_simpl
map list/little code changes proposal.
2021-03-28 18:32:00 +02:00
David Carlier
7492fd875d map list/little code changes proposal. 2021-03-27 08:10:15 +00:00
Ricardo Garcia
17c2c94f07 Fix memory leak when restarting the Vulkan renderer
models_known needs to be freed after freeing its contents.
2021-03-21 18:30:06 +01:00
Ricardo Garcia
e362e0280e Restart Vulkan renderer at EndFrame instead of BeginFrame
This brings yquake2 closer to vkQuake2 regarding renderer restarts when
the swapchain is out of date, among other situations that trigger a
Vulkan renderer restart.

Basically, the current behavior has the problem that when the renderer
is restarted at the beginning of the frame, the models are lost and we
end up with "ERROR: Mod_PointInLeaf: bad model" when attempting to
render anything after that restart.

To solve this, we move the restart logic to EndFrame and add a twist to
it: we use a vid_refresh variable to signal the server that the client
needs re-registration before starting the next frame cleanly, which will
trigger the registration logic to prepare the models again.
2021-03-21 18:29:38 +01:00
Ricardo Garcia
8891319bc1 Do not reset r_anisotropic to 1 from GL renderers
r_anisotropic can be zero in Vulkan to indicate anisotropic filtering
needs to be completely disabled, instead of enabled with value 1.0.
2021-03-21 11:08:09 +01:00
Ricardo Garcia
f601ffddfc Use the real anisotropic filtering value in Vulkan
When creating the Vulkan texture samplers, make them have the real
anisotropic filtering value selected by the user. This has two side
effects:

* We no longer need two sets of texture samplers in Vulkan (one with and
  another one without anisotropic filtering).

* The anisotropic filter value in Vulkan is no longer an on/off switch
  and we use the value as chosen by the user.
2021-03-21 11:08:09 +01:00
Ricardo Garcia
6f8949fd95 Apply anisotropic filter only when hitting "Apply"
Making the anisotropic filter value only be applied after hitting Apply
in the video menu will make it more natural for the Vulkan renderer to
restart itself when a new anisotropic value is selected, paving the way
to use the actual anisotropic filtering value in Vulkan.
2021-03-21 02:31:09 +01:00
Yamagi
11bcb785d0 Force SDL to minimize the window when focus is lost.
This was the default until 2.0.12 and is what the expects. It changed
with 2.0.14, casing problems with window ordering under windows and
some X11 window managers like kwin.

Do it unconditionally. So we're shure that we're ending with a minimized
windows, no matter what SDL does.

Fixes part of #647.
2021-03-17 09:21:48 +01:00
Denis Pauk
56a8ab6d4d Fix fullscreen value in hacks (f1b6b827) 2021-03-10 23:25:59 +02:00
Yamagi
18a9827b74 When drawing the renderer list, move vk before soft.
The software renderer should be the last option offered to the user,
because it is the weakest renderer.
2021-03-10 10:45:36 +01:00
Yamagi
f1b6b82721 Pull the major release card and switch the semantics of vid_fullscreen
One of the most common bug reports is, that the fullscreen mode doesn't
behave like users expect. This is caused by `vid_fullscreen 1` setting
desktop fullscreen mode (a fullscreen windows) and not the native
fullscreen mode. This commits switches the semantics:

* 1: Native fullscreen, like Vanilla Quake II.
* 2: Desktop fullscreen.

With this alt-tab reverts to native fullscreen. While at it improve the
documentation, suggest setting `r_mode -2` when using `vid_fullscreen
2`. Change the menu strings to make things clearer, set `r_mode -2` when
selecting 'fullscreen window' in the menu.

I pondered several other options:

* Introducing a second cvar for the desktop fullscreen, like we did in
  dhewm3. This has the problem, that in Quake II vi_fullscreen is
  special and used to communicate changed to the renderer configuration
  between the client and renderer. A second fullscreen cvar would
  complicate this already shaky mechanism even more.
* Setting `r_mode -2` when `vid_fullscreen 2`. This might not be what
  the user wants and causes problems when we're unable to get the
  desktop resolution.
2021-03-10 10:30:21 +01:00
Yamagi
51caf5b85e
Merge pull request #676 from rg3/vk_restart_fixes
Avoid restarting the whole video on VK_ERROR_OUT_OF_DATE_KHR
2021-03-10 10:01:47 +01:00
Yamagi
3c4dfcbba8 Switch the r_fixsurfsky default value to 0.
Switching this back to Vanilla Q2 behavior fixes at least one lightning
problem in the space map in baseq2. It'll break the lighting in some
addon maps, but is more correct from a global standpoint. You can't
have everything...

Closes #677.
2021-03-10 09:49:03 +01:00
Yamagi
e8107b4c64 Add else case missed / not committed in 9a17eb9a. 2021-03-08 21:30:34 +01:00
Ricardo Garcia
6989d22a2e Avoid restarting the whole video on VK_ERROR_OUT_OF_DATE_KHR
If an error is detected in vkAcquireNextImageKHR or vkQueuePresentKHR,
avoid restarting the whole video system and the game window. Instead,
shut down the Vulkan subsystem as gracefully as possible and restart it
without touching the window.

This fixes the problem with infinite video restarts under the Gnome
desktop environment.
2021-03-07 23:11:10 +01:00
Yamagi
80c637b5d6 Clamp scr_conspeed to 0.1f and use Cvar_Set().
Pointed out by @maraakate.
2021-03-05 10:29:46 +01:00
Yamagi
bfa25a13d9 Clamp the console speed to 1 or higher.
Lower values mess up the console rendering. Closes #671.
2021-03-04 07:13:42 +01:00
Yamagi
ae9a248e9e Add a cvar g_footsteps to control the generation of footstep sound.
1: The Vanilla Quake II behaviour, footsteps are generated when the
   player is faster than 255.
0: Footstep sounds are never generated.
2: Footstep sounds are always generated.

Defaults to `1`, cheat protected to `1`.

Closes #666.
2021-03-02 15:08:23 +01:00
Yamagi
d713944681
Merge pull request #658 from rg3/more_vulkan_fixes
More Vulkan fixes
2021-02-26 14:48:00 +01:00
Ricardo Garcia
bdd715ee5c Fix validation errors with unnormalized samplers
When using samplers with unnormalized coordinates in Vulkan, the shaders
must specify the LOD explicitly.
2021-02-23 22:07:32 +01:00
Ricardo Garcia
63f6778910 Only center Vulkan viewport in "keep resolution" mode
When windowed or in "switch resolution" mode, the viewport must be kept
in the top-left corner or it will appear cut while in fullscreen.

Also, make offset and width calculations safe from the point of view of
the swapchain extent, in case there's a mismatch.
2021-02-14 23:01:14 +01:00
Ricardo Garcia
b96b3a8d84 Synchronize color attachment layout transitions with loads
Since we are now loading the world color buffer content before drawing
on them again, we need to make sure the attachment layout transition
from shader-read-optimal to color-attachment-optimal happens before
color attachment read operations.
2021-02-14 00:03:40 +01:00
Ricardo Garcia
e0e52de47f Add a convenience Qvk_MemoryBarrier function 2021-02-14 00:02:08 +01:00
Denis Pauk
791b5e1e13 Save buffer size and use as limit for operations 2021-02-06 23:35:02 +02:00
Denis Pauk
ba173e68b5 rearrange init functions 2021-02-06 22:42:15 +02:00
Denis Pauk
0b79fa99ed #660: convert wrong modeltype to warning 2021-02-03 00:08:10 +02:00
Denis Pauk
1882fc2dbc #661: Use corrected resolution in fullscreen=1 2021-02-01 23:02:51 +02:00
Yamagi
06d183b6db
Merge pull request #655 from 0lvin/stereo_sound
Support of wav stereo sound
2021-01-31 12:18:26 +01:00
Ricardo Garcia
8599cab275 Load framebuffer contents correctly for MSAA
The contents of the previous drawn frame, used to mask geometry glitches
due to geometry sometimes not being watertight, was not being correctly
loaded for MSAA cases.

When MSAA is not used, the single-sample attachment needs to be loaded
and stored. With MSAA enabled, it's the multisample attachment the one
needing to be loaded and stored.
2021-01-31 10:54:03 +01:00
Ricardo Garcia
9661ce0ba0 Make scaled down view borders work with MSAA
The pipeline used to draw a texture quad was only created compatible
with the RP_UI render pass, which has a single-sample color attachment.
This made the pipeline work when MSAA was disabled, but it did not work
properly with it enabled.

To fix the issue, create a set of pipelines, instead of a single one,
with compatibility with the different types of render passes, as the
pipeline is used for both the scaled down view borders as well as UI
elements in the third render pass.
2021-01-31 10:38:59 +01:00
Yamagi
9a17eb9ac3 Make limiting power screen sounds to 16 optional.
This was added in e3e5bd1 as a work around for some openal-soft bug.
When too many audio samples got played at the same time, the global
volume dropped. This was fixed in openal-soft 0.19.0, released more
than two years ago. We're keeping the work around, because some
distros may still ship with buggy openal-soft versions and some
players may like the changed behavior. It's disabled by default.
2021-01-30 13:51:02 +01:00
Denis Pauk
6f045f71af sound: use current func name in Com_Error 2021-01-27 22:38:31 +02:00
Denis Pauk
f73bcf5fbd cppcheck fixes
src/client/refresh/soft/sw_main.c:
   1512 (style) Variable 'err' is assigned a value that is never used. [unreadVariable]

src/client/refresh/vk/vk_rmain.c:
  1023 (style) Suspicious calculation. Please use parentheses to clarify the code. The code ''a&b?c:d'' should be written as either ''(a&b)?c:d'' or ''a&(b?c:d)''. [clarifyCalculation]

src/client/sound/ogg.c:
  335 (style,inconclusive) Function 'OGG_PlayTrack' argument 1 names different: declaration 'track' definition 'trackNo'. [funcArgNamesDifferent]
  212 (style) Local variable 'gogTrack' shadows outer variable [shadowVariable]

src/client/sound/sdl.c:
  179 (style) The scope of the variable 'i' can be reduced.
  180 (style) The scope of the variable 'lpos' can be reduced.
  181 (style) The scope of the variable 'ls_paintedtime' can be reduced.
  182 (style) The scope of the variable 'out_idx' can be reduced.
  183 (style) The scope of the variable 'count' can be reduced.
  185 (style) The scope of the variable 'p' can be reduced.
  186 (style) The scope of the variable 'snd_linear_count' can be reduced.
  187 (style) The scope of the variable 'step' can be reduced.
  189 (style) The scope of the variable 'snd_out' can be reduced.
  330 (style) The scope of the variable 'data' can be reduced.
  368 (style) The scope of the variable 'data' can be reduced.
  369 (style) The scope of the variable 'left' can be reduced.
  369 (style) The scope of the variable 'right' can be reduced.
  401 (style) The scope of the variable 'end' can be reduced.
  529 (style) The scope of the variable 's' can be reduced.
  799 (style) The scope of the variable 'i' can be reduced.
  874 (style) The scope of the variable 'scale' can be reduced.
  910 (style) The scope of the variable 'srcsample' can be reduced.
  1093 (style) The scope of the variable 'total' can be reduced.
  196 (style) Local variable 'i' shadows outer variable [shadowVariable]
  197 (style) Local variable 'count' shadows outer variable [shadowVariable]

src/client/sound/sound.c:
  450 (style) The scope of the variable 'maleFilename' can be reduced.
  980 (style) The scope of the variable 'num' can be reduced.
  1085 (style) The scope of the variable 'sfx' can be reduced.
  423 (style,inconclusive) Function 'S_RegisterSound' argument 1 names different: declaration 'sample' definition 'name'. [funcArgNamesDifferent]
  909 (style,inconclusive) Function 'S_StartLocalSound' argument 1 names different: declaration 's' definition 'sound'. [funcArgNamesDifferent]
  1048 (style,inconclusive) Function 'S_Update' argument 2 names different: declaration 'v_forward' definition 'forward'. [funcArgNamesDifferent]
  1048 (style,inconclusive) Function 'S_Update' argument 3 names different: declaration 'v_right' definition 'right'. [funcArgNamesDifferent]
  1048 (style,inconclusive) Function 'S_Update' argument 4 names different: declaration 'v_up' definition 'up'. [funcArgNamesDifferent]
2021-01-27 22:38:31 +02:00
Denis Pauk
8c69684e8d client/sound: make local symbols static 2021-01-27 22:38:31 +02:00
Denis Pauk
c3e76236ba Support stereo effects #641
Based on:
  https://github.com/mczero80/KMQuake2/blob/4c23519/client/snd_mem.c#L324
  https://github.com/mczero80/KMQuake2/blob/4c23519/client/snd_mem.c#L236
2021-01-27 22:38:31 +02:00
Yamagi
957c11513c
Merge pull request #657 from rg3/vulkan_fullscreen_fixes
Fullscreen Vulkan fixes
2021-01-27 08:38:03 +01:00
Ricardo Garcia
e85f266a84 Restore reduced view textured borders
This commit removes the previous R_CleanupBorders hack and fixes
textured border drawing, so borders are correctly drawn in the right
place and are not taken into account when applying the underwater
effect.
2021-01-24 23:47:21 +01:00
Ricardo Garcia
741f64604c Remove duplicate comment 2021-01-24 23:25:02 +01:00
Ricardo Garcia
abda667781 Fix screenshots so they capture the center of the framebuffer 2021-01-24 23:19:20 +01:00
Ricardo Garcia
fe13cfbbb7 Avoid frame cleaning hack in refdef changes
With the fix from 76f56458, we no longer need to clean the frame when
the world view changes sizes.
2021-01-24 22:18:41 +01:00
Ricardo Garcia
76f56458b1 Fix water warp edge distortion when keeping resolution
With vid_fullscreen 1 and a scaled down viewport, the water distortion
effect produced waves in the viewport edge. This commit fixes those.
2021-01-24 13:32:45 +01:00
Ricardo Garcia
5fcfcd56b3 Fullscreen Vulkan fixes
This commit includes the following changes:

* When vid_fullscreen is 1, the game is now drawn centered in the
  screen instead of the top left corner, by modifying the viewport and
  scissor when drawing the world warp and UI render passes.

* When vid_fullscreen is 1, the world view no longer has an incorrect
  size and/or aspect ratio. This was due to the world warp and UI
  render passes sampling from the whole color buffer instead of the
  restricted render area. To fix this, the postprocessing and world warp
  shaders now use unnormalized coordinates, corrected with the frame
  offset, and sample directly from the appropriate texels.

* The game no longer outputs pixels which have not been written to,
  which are usually displayed black but may come out with undefined
  colors. For this, some output color attachments are cleared before
  drawing the final elements in the frame.
2021-01-24 11:52:30 +01:00
Ricardo Garcia
bb827cad8c Fix text indicating MSAA samples for Vulkan 2021-01-23 09:56:24 +01:00
Yamagi
449776d3f6
Merge pull request #654 from 0lvin/ref_vk
Sync variable names for msaa, retexturing and anisotropic filtering
2021-01-22 12:27:18 +01:00
Denis Pauk
46c24d4d18 Sync variable names for msaa, retexturing and anisotropic filtering #646 2021-01-19 21:39:44 +02:00
Denis Pauk
6a89f30768 Show message about anisotropy for selected device 2021-01-19 21:39:34 +02:00
Denis Pauk
b9d4549a9b Add support r_customwidth/r_customheight in ref_vk #652 2021-01-19 21:39:25 +02:00
Denis Pauk
000c72fecc Rework vk_msaa to use number of samples #646 2021-01-19 21:39:13 +02:00
Hugo Locurcio
08d59ee8e8
Rename cl_anglekicks to cl_kickangles for consistency with Q2PRO 2021-01-18 04:41:57 +01:00
Yamagi
f01998896f Hide the fix for sky surfaces missused for indoor lighting begind cvar.
All renderers had the fix, but it was only optional in the GL renderers.
And there it was missimplemented, cvars must be defined in the renderers
main() function. Otherwise they aren't available at startup.

Rename gl_fixsurfsky to r_fixsurfsky, implement it for all renderers and
enable it by default.
2021-01-17 10:25:09 +01:00
Yamagi
a9914efde7 Implement vk_underwater, make the underwater warp effect optional.
This was requested in #505.
2021-01-13 21:46:15 +01:00
Yamagi
8a54e49f61
Merge pull request #643 from 0lvin/ref_vk
Enable depthWriteEnable for particles
2021-01-13 18:27:17 +01:00
Ricardo Garcia
8142898b56 Fix black pixels along skybox edges in Vulkan
Due to the skybox geometry not always being watertight, it's sometimes
possible to see instances of isolated black pixels flickering along
skybox edges. This happens when the sampling coordinates for the given
pixel fall outside any triangle in the skybox due to the previous
problem.

These pixels are usually visible when MSAA is not used and pixels are
big enough on the screen, like when using lower screen resolutions or
large vk_pixel_size values. If MSAA is used, normally only a few of the
samples fall outside any triangle and the problem is masked a bit, being
harder to spot.

Instead of fixing the skybox clipping routines, which may be
complicated, this commit simply preserves color buffer contents between
frames. If any pixel ends up without coverage, its color will be taken
from a previous draw a few frames before, depending on the swapchain
size. This is usually more than enough to completely mask the problem
visually.
2021-01-12 23:33:55 +01:00
Ricardo Garcia
aa2baedd97 Fix skybox edges being visible in Vulkan
Skybox edges are sometimes visible in Vulkan, specially in lower screen
resolutions or when vk_pixel_size is used to the same effect.

To avoid this problem, draw the skybox using CLAMP_TO_EDGE addressing
mode in samplers. In order to do that, the number of texture samplers is
doubled and a second set of samplers with the new addressing mode are
created, and used only when drawing the skybox.
2021-01-12 23:33:55 +01:00
Yamagi
023a012e82 Change the hyperblaster back to yellow for Vanilla Q2 lightning.
In Vanilla Q2 (without any point releases) the hyperblaster projectiles
emitted white light. In the 3.21 sources it's yellow. It likely changed
in on of the (early) point releases. Change it to yellow, the code now
matches 3.21.
2021-01-11 07:34:30 +01:00
Yamagi
462a0ddff5
Merge pull request #636 from rg3/vk_resolution_scaling
Add resolution scaling to Vulkan renderer
2021-01-10 19:02:51 +01:00
Yamagi
a98d533ae1 Add cl_r1q2_lighstyle, set to 0 for Vanilla Q2 dlight colors.
Since the first release Yamagi Quake II used the more fanzy R1Q2 colors
for some dynamic lights:

* In R1Q2 the rocket has orange light, matching the color of the fire
  trail and the generic explosion. Vanilla Quake II had yellow light,
  the same as the blaster and several muzzle flashs.
* In R1Q2 hyperblaster projectiles are emitting yellow light, like the
  normal blaster. That matches the projectile colors, the muzzle flash
  and the effect when hitting a wall. And it's more logical, since the
  hyperblaster is just a blaster on steroids. Vanilla Quake II had white
  / uncolored lights.

Add an option to revert to Vanilla Quake II colors, leave the R1Q2
colors as default. Closes #640.
2021-01-10 18:30:49 +01:00
Denis Pauk
3b9aa6448e Enable depthWriteEnable for particles 2021-01-10 13:25:10 +02:00
Denis Pauk
1bc60032e7 Fix pipeline debug naming 2021-01-10 13:07:44 +02:00
Ricardo Garcia
150db4d443 Widen pipeline scissor adjusted for vk_pixel_size
When calculating the pipeline scissor adjusted for vk_pixel_size, round
scissor offset down and size up. This avoids black bars on image borders
when scaling up if the division is not exact.
2020-12-24 23:51:27 +01:00
Denis Pauk
84aceda76d Use submodels directly from current map 2020-12-24 13:40:07 +02:00
Ricardo Garcia
930872b358 Add resolution scaling to Vulkan renderer
This commit adds a new cvar called vk_pixel_size that represents how big
pixels should look in the rendered world in order to simulate lower
screen resolutions. With its default value of 1 everything looks normal,
but with bigger sizes (e.g. 4) the rendered world starts to look
"pixelated" due to pixels appearing bigger.

To implement the effect, the viewport and scissor are modified when
drawing the world so the rendering results cover a smaller area in the
top-left corner of the image.

The post-processing fragment shader is used to scale the image back to
the swapchain size before drawing UI elements on top of it.

The UI is not affected by this change, so the existing UI scaling
options continue to work as before with no changes, adding some
flexibility to the mix.

Related to feature request #588.
2020-12-24 10:14:39 +01:00
Denis Pauk
4f9067e6b8 Reallocate models with huge current map 2020-12-23 23:29:29 +02:00
Denis Pauk
2c00502b0b Free Unused Image and Models only if we are near to limit 2020-12-23 21:35:27 +02:00
Denis Pauk
b0cc97e6f3 make cppcheck happy with R_RestoreMips
132: Array 'image->pixels[4]' accessed at index -1, which is out of bounds.
133,134: Shifting by a negative value is undefined behaviour.
2020-12-23 12:36:45 +02:00
Denis Pauk
004e5e250f Rearange code and make loadmodel local 2020-12-23 12:12:35 +02:00
Denis Pauk
462633d3d9 Vulkan: Calculate needed hunk size in Mod_LoadBrushModel()
Based on ec6d743d
2020-12-23 11:48:41 +02:00
Denis Pauk
278f9104cd Remove unused TargaHeader 2020-12-22 16:47:35 +02:00
Denis Pauk
3418280b06 Fix cppcheck warnings
src/common/cvar.c:160 Logical disjunction always evaluates to true: c >= '0' || c <= '9'. Are these conditions necessary? Did you intend to use && instead? Are the numbers correct? Are you comparing the correct variables?
src/common/cvar.c:141 The scope of the variable 'c' can be reduced.
src/common/cvar.c:517 The scope of the variable 'c' can be reduced.
src/common/shared/shared.c:1359 Either the condition '!value' is redundant or there is possible null pointer dereference: value.
src/common/shared/shared.c:1371 Either the condition '!value' is redundant or there is possible null pointer dereference: value.
src/common/shared/shared.c:1377 Either the condition '!value' is redundant or there is possible null pointer dereference: value.
src/client/refresh/soft/sw_main.c:1531 Variable 'err' is assigned a value that is never used.
2020-12-17 22:49:03 +02:00
Denis Pauk
a4181a0bdb Add m8 textures support(heretic2 mods) 2020-12-17 21:59:04 +02:00
Denis Pauk
f975a94c74 Add farsee flag to ref_soft 2020-12-17 00:05:45 +02:00
Denis Pauk
e23be99a49 Fix image shrink calls 2020-12-16 23:53:29 +02:00
Denis Pauk
2e93364940 Use SmoothColorImage as final filtering 2020-12-16 22:45:39 +02:00
Denis Pauk
be2e91e142 Sync LoadSP2, turret_driver_die, SP_info_player_intermission declarations
src/client/refresh/gl1/gl1_model.c:39:6: warning: type of ‘LoadSP2’ does not match original declaration [-Wlto-type-mismatch]
src/game/g_turret.c:29:6: warning: type of ‘infantry_die’ does not match original declaration [-Wlto-type-mismatch]
src/game/g_spawn.c:43:6: warning: type of ‘SP_info_player_intermission’ does not match original declaration [-Wlto-type-mismatch]
2020-12-16 22:44:38 +02:00
Denis Pauk
d190c3d143 soft: scale cinema raw images 2020-12-16 22:11:02 +02:00
Yamagi
983f7f6b4b Port some lightning fixes from gl3 to vk.
* Fix for skyboxes abused as lightsources, was #393.
* Don't reuse i as counter variable when calculating light points.
2020-12-16 09:19:28 +01:00
Denis Pauk
b7bdd0be72 Add vk_nolerp_list support 2020-12-12 14:45:04 +01:00
Denis Pauk
539fea96bb add vk_retexturing force flag 2020-12-12 14:45:04 +01:00
Denis Pauk
1a4d495028 Enable retexturing by default and dump real image sizes 2020-12-12 14:45:04 +01:00
Denis Pauk
e3b387f7e7 Scale up 8bit images 2020-12-12 14:45:04 +01:00
Denis Pauk
8e5f68bb68 Remove vk_round_down as regressed visual quality 2020-12-12 14:45:04 +01:00
Denis Pauk
0d57f47b9b restore near color value only for transparent images 2020-12-12 14:45:04 +01:00
Denis Pauk
d4df592572 remove redundant suballocate (vk_util has already suballicate buffers) 2020-12-12 14:45:04 +01:00
Denis Pauk
07c043d8ce rename gammatable to overbrightable and apply only to world models 2020-12-12 14:45:04 +01:00
Denis Pauk
67821d753b Port VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU flag check 2020-12-12 14:45:04 +01:00
Denis Pauk
ff82bb5a78 Port memory flags from VulkanMemoryAllocator 2020-12-12 14:45:04 +01:00
Denis Pauk
16eb7f5c27 Show memory types supported by device 2020-12-12 14:45:04 +01:00
Denis Pauk
03a20b2050 Mark non VK_PRESENT_MODE_FIFO_KHR as triple buffered 2020-12-12 14:45:04 +01:00
Yamagi
17357d8c5e Fix another printf format specifier under Windows. 2020-12-12 14:45:04 +01:00
Denis Pauk
16ae9af406 Fix unmap warning on swap buffers resize 2020-12-12 14:45:04 +01:00
Denis Pauk
fd327dcdae vk: scale cinema raw images 2020-12-12 14:45:04 +01:00
Denis Pauk
124b0c224f Add palette image scale{2,3}x 2020-12-12 14:45:04 +01:00
Denis Pauk
4183c14cfa Update license in vk_util 2020-12-12 14:45:04 +01:00
Denis Pauk
5a4554cfb5 Fix multiplayer -> player setup 2020-12-12 14:45:04 +01:00
Denis Pauk
39e69c90f0 Rework memory allocation 2020-12-12 14:45:04 +01:00
Denis Pauk
59e5c4fca5 Add gunfov and farsee in ref_vk 2020-12-12 14:45:04 +01:00
Denis Pauk
17c5e04d8f Reuse TGA loader from STB 2020-12-12 14:45:04 +01:00
Denis Pauk
17d9ff77a6 update function declarations prototypes 2020-12-12 14:45:04 +01:00
Denis Pauk
01918110d7 fix symbol collision 2020-12-12 14:45:04 +01:00
Yamagi
85b9f84b3d Don't link against the Vulkan loader, load it at runtime. 2020-12-12 14:45:04 +01:00
Yamagi
d936bad256 Use uintptr_t instead of uint64_t for better Windows compatibility. 2020-12-12 14:45:04 +01:00
Yamagi
c9d54381a5 Fix uint64_t printf() format string for Windows. 2020-12-12 14:45:04 +01:00
Yamagi
3e0c3efa74 Fix size_t printf() format strings under Windows. 2020-12-12 14:45:04 +01:00
Yamagi
a72cd9ea50 Add the vulkan renderer to the beginning fallback sequence.
The fallback sequence is now: vk -> gl3 -> gl1 -> soft -> failed.
2020-12-12 14:45:04 +01:00
Yamagi
6329a1dfcb Shutdown QVK in R_Shutdown() by calling R_ShutdownContext().
The QVK shutdown is necessary, otherwise we'll leak all(?) allocated
Vulkan resources in case of a renderer restart by `vid_restart` and the
like. The also fixes some crashes in RADV at renderer shutdown.
2020-12-12 14:45:04 +01:00
Denis Pauk
00f676c973 Add support lavapipe (mesa vulkan software render) 2020-12-12 14:45:04 +01:00
Denis Pauk
d5f8791728 make current entity local 2020-12-12 14:45:04 +01:00
Denis Pauk
3648ef0866 make current model local 2020-12-12 14:45:04 +01:00
Denis Pauk
832d9666d4 Merge vk_point_particles with vk_particle_square to vk_custom_particles 2020-12-12 14:45:04 +01:00
Denis Pauk
7be20ac1cd Use vkResetCommandPool for vk_stagingCommandPool 2020-12-12 14:45:04 +01:00
Denis Pauk
e6e2a45e87 Use vkResetCommandPool for vk_commandPool 2020-12-12 14:45:04 +01:00
Denis Pauk
ca79fc78a6 remove window save code 2020-12-12 14:45:04 +01:00
Krzysztof Kondrak
da38e2a8f8 No need to request optional fillModeNonSolid since we're only using VK_POLYGON_MODE_FILL in all pipelines. 2020-12-12 14:45:04 +01:00
Krzysztof Kondrak
da32d051b3 Create MSAA color buffer only when it's actually needed. 2020-12-12 14:45:04 +01:00
Krzysztof Kondrak
a2ab709c2b Check if swapchain supports VK_IMAGE_USAGE_TRANSFER_SRC_BIT. 2020-12-12 14:45:04 +01:00
Krzysztof Kondrak
7784b197ca Enable VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT only if the SDK supports it. 2020-12-12 14:45:04 +01:00
Denis Pauk
7eb075198e Fix vk_validation warnings 2020-12-12 14:45:04 +01:00
Denis Pauk
f6ae494637 rework Draw_StretchRaw 2020-12-12 14:45:04 +01:00
Denis Pauk
912fca15d9 Fix viewsize issues 2020-12-12 14:45:04 +01:00
Denis Pauk
2e5c5974d6 gamma calculation in shaders 2020-12-12 14:45:04 +01:00
Denis Pauk
a69c97f046 Add vk_particle_square support 2020-12-12 14:45:04 +01:00
Denis Pauk
3ec8e65d34 Staging buffers resize. 2020-12-12 14:45:04 +01:00
Denis Pauk
896346cf1a Fix MINGW64 windows build 2020-12-12 14:45:04 +01:00
Denis Pauk
a701226a19 cppcheck fixes
vk_common.c:1618:19: style: The if condition is the same as the previous if condition [duplicateCondition]
vk_draw.c:93:7: style: The scope of the variable 'fullname' can be reduced. [variableScope]
vk_draw.c:273:9: style: The scope of the variable 'source' can be reduced. [variableScope]
vk_draw.c:274:8: style: The scope of the variable 'frac' can be reduced. [variableScope]
vk_draw.c:274:14: style: The scope of the variable 'fracstep' can be reduced. [variableScope]
vk_draw.c:276:8: style: The scope of the variable 'row' can be reduced. [variableScope]
vk_draw.c:295:12: style: The scope of the variable 'dest' can be reduced. [variableScope]
vk_draw.c:111:45: style:inconclusive: Function 'Draw_GetPicSize' argument 3 names different: declaration 'name' definition 'pic'. [funcArgNamesDifferent]
vk_draw.c:131:57: style:inconclusive: Function 'Draw_StretchPic' argument 5 names different: declaration 'name' definition 'pic'. [funcArgNamesDifferent]
vk_draw.c:159:53: style:inconclusive: Function 'Draw_PicScaled' argument 4 names different: declaration 'factor' definition 'scale'. [funcArgNamesDifferent]
vk_draw.c:185:56: style:inconclusive: Function 'Draw_TileClear' argument 5 names different: declaration 'name' definition 'pic'. [funcArgNamesDifferent]
vk_image.c:586:7: style: The scope of the variable 'best' can be reduced. [variableScope]
vk_image.c:1170:8: style: The scope of the variable 'p' can be reduced. [variableScope]
vk_image.c:1591:7: style: The scope of the variable 'r' can be reduced. [variableScope]
vk_image.c:1591:10: style: The scope of the variable 'g' can be reduced. [variableScope]
vk_image.c:1591:13: style: The scope of the variable 'b' can be reduced. [variableScope]
vk_image.c:1592:11: style: The scope of the variable 'v' can be reduced. [variableScope]
vk_image.c:1628:9: style: The scope of the variable 'j' can be reduced. [variableScope]
vk_image.c:1261:8: style: Local variable 'i' shadows outer variable [shadowVariable]
vk_light.c:231:18: warning: Identical condition '(back<0)==side', second condition is always false [identicalConditionAfterEarlyExit]
vk_light.c:40:8: style: The scope of the variable 'a' can be reduced. [variableScope]
vk_light.c:306:9: style: The scope of the variable 'add' can be reduced. [variableScope]
vk_mesh.c:107:7: style: The scope of the variable 'count' can be reduced. [variableScope]
vk_mesh.c:316:7: style: The scope of the variable 'count' can be reduced. [variableScope]
vk_mesh.c:317:7: style: The scope of the variable 'i' can be reduced. [variableScope]
vk_mesh.c:647:9: style: The scope of the variable 'min' can be reduced. [variableScope]
vk_mesh.c:766:9: style: Local variable 'model' shadows outer variable [shadowVariable]
vk_mesh.c:267:52: style: Clarify calculation precedence for '&' and '?'. [clarifyCalculation]
vk_mesh.c:750:128: style: Clarify calculation precedence for '&' and '?'. [clarifyCalculation]
vk_model.c:53:9: style: The scope of the variable 'd' can be reduced. [variableScope]
vk_model.c:54:12: style: The scope of the variable 'plane' can be reduced. [variableScope]
vk_model.c:407:7: style: The scope of the variable 'next' can be reduced. [variableScope]
vk_model.c:462:12: style: The scope of the variable 'e' can be reduced. [variableScope]
vk_model.c:519:8: style: The scope of the variable 'planenum' can be reduced. [variableScope]
vk_model.c:519:18: style: The scope of the variable 'side' can be reduced. [variableScope]
vk_model.c:520:8: style: The scope of the variable 'ti' can be reduced. [variableScope]
vk_model.c:613:21: style: The scope of the variable 'p' can be reduced. [variableScope]
vk_model.c:663:21: style: The scope of the variable 'p' can be reduced. [variableScope]
vk_model.c:722:10: style: The scope of the variable 'j' can be reduced. [variableScope]
vk_model.c:783:8: style: The scope of the variable 'bits' can be reduced. [variableScope]
vk_model.c:901:18: style: The scope of the variable 'pinframe' can be reduced. [variableScope]
vk_model.c:901:29: style: The scope of the variable 'poutframe' can be reduced. [variableScope]
vk_model.c:1102:7: style: The scope of the variable 'i' can be reduced. [variableScope]
vk_model.c:1103:13: style: The scope of the variable 'sprout' can be reduced. [variableScope]
vk_model.c:1072:28: style:inconclusive: Function 'R_BeginRegistration' argument 1 names different: declaration 'map' definition 'model'. [funcArgNamesDifferent]
vk_pipeline.c:51:87: style:inconclusive: Function 'QVk_CreatePipeline' argument 2 names different: declaration 'desLayoutCount' definition 'descLayoutCount'. [funcArgNamesDifferent]
vk_rmain.c:405:10: style: The scope of the variable 'scale' can be reduced. [variableScope]
vk_rmain.c:400:28: style:inconclusive: Function 'Vk_DrawParticles' argument 1 names different: declaration 'n' definition 'num_particles'. [funcArgNamesDifferent]
vk_rmain.c:956:62: style: Clarify calculation precedence for '&' and '?'. [clarifyCalculation]
vk_rmain.c:1196:12: style: Variable 'err' is assigned a value that is never used. [unreadVariable]
vk_rmisc.c:97:10: style: The scope of the variable 'temp' can be reduced. [variableScope]
vk_rmisc.c:140:23: style: Variable 'isPreferred' is assigned a value that is never used. [unreadVariable]
vk_rsurf.c:678:11: style: The scope of the variable 'k' can be reduced. [variableScope]
vk_rsurf.c:679:12: style: The scope of the variable 'pplane' can be reduced. [variableScope]
vk_rsurf.c:680:9: style: The scope of the variable 'dot' can be reduced. [variableScope]
vk_rsurf.c:682:12: style: The scope of the variable 'lt' can be reduced. [variableScope]
vk_rsurf.c:741:8: style: The scope of the variable 'i' can be reduced. [variableScope]
vk_rsurf.c:811:22: style: The scope of the variable 'mark' can be reduced. [variableScope]
vk_rsurf.c:980:10: style: The scope of the variable 'c' can be reduced. [variableScope]
vk_rsurf.c:982:7: style: The scope of the variable 'cluster' can be reduced. [variableScope]
vk_rsurf.c:1055:6: style: The scope of the variable 'height' can be reduced. [variableScope]
vk_rsurf.c:1104:13: style: The scope of the variable 'best2' can be reduced. [variableScope]
vk_rsurf.c:1142:11: style: The scope of the variable 'lindex' can be reduced. [variableScope]
vk_rsurf.c:1145:9: style: The scope of the variable 's' can be reduced. [variableScope]
vk_rsurf.c:1145:12: style: The scope of the variable 't' can be reduced. [variableScope]
vk_rsurf.c:1257:12: style: The scope of the variable 'dummy' can be reduced. [variableScope]
vk_swapchain.c:68:7: warning: Possible null pointer dereference: presentModes [nullPointer]
vk_swapchain.c:182:91: style: Clarify calculation precedence for '&' and '?'. [clarifyCalculation]
vk_warp.c:57:8: style: The scope of the variable 'm' can be reduced. [variableScope]
vk_warp.c:64:8: style: The scope of the variable 's' can be reduced. [variableScope]
vk_warp.c:64:11: style: The scope of the variable 't' can be reduced. [variableScope]
vk_warp.c:168:8: style: The scope of the variable 'lindex' can be reduced. [variableScope]
vk_warp.c:325:9: style: The scope of the variable 'j' can be reduced. [variableScope]
vk_warp.c:530:11: style: The scope of the variable 'k' can be reduced. [variableScope]
2020-12-12 14:45:04 +01:00
Denis Pauk
9e71e69d1c fix sequence of destroing buffers 2020-12-12 14:45:04 +01:00
Denis Pauk
ca29093f64 Always compilein validation code 2020-12-12 14:45:04 +01:00
Denis Pauk
dc77a19d9f Allocate buffer for list of physicalDevices in Vk_Strings_f 2020-12-12 14:45:04 +01:00
Denis Pauk
706b9a0721 Codestyle cleanup 2020-12-12 14:45:04 +01:00
Denis Pauk
b1bd71ec7e Fix headers names 2020-12-12 14:45:04 +01:00
Denis Pauk
c9fae86cbe Fix build with -D_DEBUG=1 2020-12-12 14:45:04 +01:00
Denis Pauk
b94afbc6c1 remove unused vk_mem_alloc 2020-12-12 14:45:04 +01:00
Denis Pauk
5b5432b9dd rework code to use vkImage/vkBuffer C allocator 2020-12-12 14:45:04 +01:00
Denis Pauk
bda19f3421 Remove usage stagingBuffer in QVk_CreateIndexBuffer and QVk_CreateVertexBuffer 2020-12-12 14:45:04 +01:00
Denis Pauk
8d39a6a0e6 fix vk_validation flag 2020-12-12 14:45:04 +01:00
Denis Pauk
ffd3c65a82 remove nonrequired image scale 2020-12-12 14:45:04 +01:00
Denis Pauk
8bfb422ab2 Reuse FloodFillSkin from gl3 in vk 2020-12-12 14:45:04 +01:00
Denis Pauk
b249362d0f fix screenshot 2020-12-12 14:45:04 +01:00
Denis Pauk
4047285029 Implement vk image and memory flush code 2020-12-12 14:45:04 +01:00
Denis Pauk
518f46953b Build vk_util as part of ref_vk 2020-12-12 14:45:04 +01:00
Christoph Schied
aaf7f4e76c vk_utils from https://github.com/cschied/q2vkpt.git 2020-12-12 14:45:04 +01:00
Denis Pauk
c4a1147718 little bit revert 2020-12-12 14:45:04 +01:00
Denis Pauk
d3d433bd7f Add EndWorldRenderpass callback 2020-12-12 14:45:04 +01:00
Denis Pauk
31afc11133 make more code static 2020-12-12 14:45:04 +01:00
Denis Pauk
5707a70294 Change gamma only for 3d rendered 2020-12-12 14:45:04 +01:00
Denis Pauk
9bf3be03a7 Replace Vk_ResampleTexture to ResizeSTB 2020-12-12 14:45:04 +01:00
Denis Pauk
bf4a7f9ee6 Fix issue with menu M_Popup
Menu popup can be called without initial run FrameBegin.

 #0  0x0000007ff406bea8 in R_EndWorldRenderpass () at src/client/refresh/vk/vk_rmain.c:937
 #1  0x0000007ff4060b5c in Draw_CharScaled (x=12, y=66, num=num@entry=1, scale=1) at src/client/refresh/vk/vk_draw.c:61
 #2  0x0000005555581900 in M_DrawCharacter (cx=cx@entry=12, cy=cy@entry=66, num=num@entry=1) at src/client/menu/menu.c:410
 #3  0x0000005555581964 in M_DrawTextBox (x=x@entry=12, y=y@entry=66, width=35, lines=3) at src/client/menu/menu.c:487
 #4  0x0000005555581fa0 in M_Popup () at src/client/menu/menu.c:580
 #5  0x0000005555583ad0 in SearchLocalGames () at src/client/menu/menu.c:2771
 #6  0x0000005555583c94 in JoinServer_MenuInit () at src/client/menu/menu.c:2838
 #7  0x0000005555585d2c in M_Menu_JoinServer_f () at src/client/menu/menu.c:2863
 #8  JoinNetworkServerFunc (unused=<optimized out>) at src/client/menu/menu.c:737
 #9  0x0000005555588724 in Action_DoEnter (a=<optimized out>) at src/client/menu/qmenu.c:55
 #10 Menu_SelectItem (s=s@entry=0x5555611148 <s_multiplayer_menu>) at src/client/menu/qmenu.c:566
 #11 0x0000005555586338 in Default_MenuKey (m=0x5555611148 <s_multiplayer_menu>, key=13) at src/client/menu/menu.c:393
 #12 0x00000055555873fc in M_Keydown (key=key@entry=13) at src/client/menu/menu.c:4682
 #13 0x000000555556f194 in Key_Event (key=<optimized out>, down=true, special=special@entry=true) at src/client/cl_keyboard.c:1331
 #14 0x000000555557f078 in IN_Update () at src/client/input/sdl.c:641
 #15 0x0000005555570e64 in CL_Frame (packetdelta=96239, renderdelta=<optimized out>, timedelta=<optimized out>,
    packetframe=packetframe@entry=true, renderframe=renderframe@entry=true) at src/client/cl_main.c:802
 #16 0x00000055555a8a78 in Qcommon_Frame (usec=96239) at src/common/frame.c:626
 #17 0x00000055555a8c98 in Qcommon_Mainloop () at src/common/frame.c:163
 #18 0x00000055555a92f0 in Qcommon_Init (argc=1, argv=0x7ffffff358) at src/common/frame.c:377
 #19 0x0000005555561e44 in main (argc=1, argv=0x7ffffff358) at src/backends/unix/main.c:123
2020-12-12 14:45:04 +01:00
Denis Pauk
400562cd2e Rearrange code little bit 2020-12-12 14:45:04 +01:00
Denis Pauk
e48a7f61c6 Use simular logic in ref_sw:setMode as in ref_gl 2020-12-12 14:45:04 +01:00
Denis Pauk
f508584067 small code cleanup 2020-12-12 14:45:04 +01:00
Denis Pauk
2add32b5a8 Add documentation 2020-12-12 14:45:04 +01:00
Denis Pauk
bfab2d3042 Rebuild shaders with glslang-tools 7.12.3352-10 2020-12-12 14:45:04 +01:00
Denis Pauk
eb935da156 vk: fix vid_gamma 2020-12-12 14:45:04 +01:00
Denis Pauk
8b70b55e17 vk: use os independent SDL_Vulkan_GetInstanceExtensions 2020-12-12 14:45:03 +01:00
Denis Pauk
eefcec35e9 ref_vk: Fix shutdown code 2020-12-12 14:45:03 +01:00
Denis Pauk
a71eae8b88 Cleanup create surface 2020-12-12 14:45:03 +01:00
Denis Pauk
a26d91ffc0 vk: Fix for light without current entity(5e7082e7) 2020-12-12 14:45:03 +01:00
Denis Pauk
63f6cdf698 ref_vk: Add support for 32k+ marksurfaces in map(659d8e15) 2020-12-12 14:45:03 +01:00
Denis Pauk
b558407423 use __func__ in R_Printf if required 2020-12-12 14:45:03 +01:00
Denis Pauk
65c76776ec fix world disconnect 2020-12-12 14:45:03 +01:00
Denis Pauk
5270cce1a1 use separate vk_intensity 2020-12-12 14:45:03 +01:00
Denis Pauk
8ae3ce9097 fix warning: missing braces around initializer [-Wmissing-braces] 2020-12-12 14:45:03 +01:00
Denis Pauk
53ddce9400 Add retexturing 2020-12-12 14:45:03 +01:00
Denis Pauk
d895e84f46 use global r_* variables 2020-12-12 14:45:03 +01:00
Denis Pauk
ca60275694 move headers to right place 2020-12-12 14:45:03 +01:00
Denis Pauk
823e0eb915 Add experemental vulkan render 2020-12-12 14:45:03 +01:00
Krzysztof Kondrak
4c3853ca56 vkQuake2 1.4.3
Vulkan render from https://github.com/kondrak/vkQuake2.git@9c85ad15a73320be6641c840697644d27e851fd4
2020-12-12 14:45:03 +01:00
Yamagi
bd4f7bed65
Merge pull request #634 from lazd/altloadfix
Flush keys when server data is parsed
2020-12-12 14:12:50 +01:00
Larry Davis
e22b4ec945 Don't print debug information all the time 2020-12-11 11:02:53 -08:00
Larry Davis
dc1353c67e Flush keys when server data is parsed, fixes #633 2020-12-11 10:50:40 -08:00
Larry Davis
b30d37d2cb nit: whitespace 2020-12-10 23:38:16 +00:00
Larry Davis
0d2e6f79f9 Move haptic to joy submenu, add up sensitivity 2020-12-10 23:25:35 +00:00
Larry Davis
693803c764 Support setting mouse sensitivity to 0 in UI
On RetroPie, it seems that the joystick input is mixed up with mouse
input, causing both joystick and mouse code to run in response to stick
input. this makes the game impossible to play with a gamepad.

Setting sensitivity to 0 solves this problem, this change just makes it
possible in the UI
2020-12-10 17:24:32 +00:00
Larry Davis
5e78fd5ef4 Add UI for gamepad sensitivity and expo
This adds a "customize joystick" sub-menu that provides sliders for
changing the sensitivity and expo applied to joystick inputs.
2020-12-10 17:24:31 +00:00
Larry Davis
aafc2eb4f9 Apply expo to gamepad axes with joy_expo cvar
Expo makes gamepad stick input non-linear such that small
movements on the stick are less pronounced. This enables
both precise and fast movements, even at higher sensitivity levels.

Expo is applied to all axes equally.
2020-12-10 17:24:20 +00:00
nia
92e62e49d3 Cast arguments to ctype functions to unsigned char
According to the C standard, arguments to the ctype functions
must fit into unsigned char (presumably so they can be implemented
with simple array access). This causes a build time warning on
NetBSD, and may function incorrectly if any UTF-8 strings are used.
2020-11-24 14:12:38 +01:00
Yamagi
d5dcf3a772 Fix several inconsistencies and typos in console output. 2020-10-08 12:38:29 +02:00
Yamagi
0a159eefb2 Limit the work around against wrong resolutions to fullscreen.
When Q2 runs in windowed mode, SDL can never switch to the wrong the
resolution. The resolution isn't switched, of course. The work around
prevented Q2 from creating Windows larger than the resolution of the
primary display. For example a primary display of 1280x1024 prevented
a window size of 1680x1050 on the much bigger secondary display.
2020-10-06 17:52:14 +02:00
Yamagi
41931d7a06
Merge pull request #599 from earth-metal/master
Create "mods" submenu to allow changing "game" cvar via UI
2020-09-12 16:11:26 +02:00
Yamagi
213a338d03
Merge pull request #598 from JoBergeron/map-autocomplete
map name autocompletion
2020-09-12 16:02:44 +02:00
earth-metal
a4de026eb3 Create "mods" submenu to allow changing "game" cvar via UI
Combs all Raw search paths to find game dirs containing PAK/PK2/PK3
files.  If multiple uniquely-named directories exist, then show a "mods"
option on the "Game" menu and allow selection of desired mod on new
eponymous submenu.  Includes fix for memory leak of mapnames (read from
"maps.lst") when changing games.
2020-09-06 16:43:36 -04:00
JBerg
a843ef416f map name autocompletion 2020-09-05 22:32:13 -04:00
earth-metal
c31926ec90 Reset map list in "start network server" menu when "game" cvar changes
When the "game" directory is changed, clear the current list of maps in
the "start network server" menu so that it will be re-initialized the
next time the menu is accessed.
2020-08-23 14:06:01 -04:00
Yamagi
1f3f796322 Add cl_anglekick, when set to 0 angle kicks are ignored.
Angle kicks are used for weapon recoil, damage kicks and the like.
Setting the `cl_anglekicks` to `0` ignored them, they're read from
the network but not displayed. The cvar is cheat protected, it's
reset to `1` on server connect.

Rquested by Martin via mail.
2020-08-17 14:18:51 +02:00
Yamagi
2ab4e5553a Prevent music from playing even if ogg_enabled is 0.
ogg_enabled doesn't prevent music from playing, it just toggles if the
ogg backend should be enabled or not. If the user does something like
`ogg_enable=0; snd_restart` everything is okay. If they just set
`ogg_enable=0` strange things happen because the backend stays
initialized and will play tracks as requested. Work around the by
shutting the backend down if `ogg_enable == 0 && ogg_started == true`.

Closes #583.
2020-06-30 14:46:48 +02:00
Yamagi
57f7ce86e8 Make ffe8f89 somewhat more readable and add a comment. 2020-06-02 08:31:02 +02:00
Yamagi
ffe8f893ed Abort downloads if a server hasn't a file over UDP.
This is a special case, the bug was already present in Vanilla Q2: If a
server is offering assets for download but is missing some files the
USP download code runs in an endless loop. CL_ParseDownload() detects
that something is wrong and calls CL_RequestNextDownload() which tries
to download the same file again... Work around this by skippig over that
file.

This closes #552.
2020-06-02 08:03:06 +02:00
Yamagi
3c681210ba
Merge pull request #574 from 0lvin/for_review
fix tearing with fix palette change(explosion near without move)
2020-05-11 12:30:47 +02:00
Denis Pauk
ef841ce98c fix tearing with fix palette change(explosion near without move) 2020-05-09 14:11:12 +03:00
Boris I. Bendovsky
0ae9f55089
Move liquid transformations into fragment shader 2020-05-04 22:42:08 +03:00
Yamagi
3492dff774
Merge pull request #564 from bibendovsky/fix/558_silenced_muzzle_flash
Don't play silenced muzzle flash sounds
2020-05-04 18:19:28 +02:00
Yamagi
33591ceb6e Update stb_vorbis to 37b9b20fdec06c75a0493e0bb59e2d0f288bfb51.
This fixes the crash reported in #568 for me.
2020-05-04 18:17:41 +02:00
Boris I. Bendovsky
93a0473244
Add cvar to control sorting of play sounds 2020-05-04 18:44:58 +03:00
Boris I. Bendovsky
1887072cc9
Merge remote-tracking branch 'upstream/master' into fix/558_silenced_muzzle_flash 2020-05-04 17:41:36 +03:00
Yamagi
8f2542e05f Limit the new order of the pending sound lists to baseq2 and the addons.
The new ordering was introduced in 16ee007, fixing some problems with
the wrong sound getting played when an entity triggers several sound at
the same timestamp. This broke the behavior of the mods, in #558 dday
was mentioned, muzzle flashe sound prevent the firing sound from getting
played.

Since we don't control the source of all mods, add a simple band aid
fix: Use the new ordering for baseq2, xatrix and rouge. Use the old
ordering for everything else.

An alternative approach is being discussed in #564.
2020-05-04 09:51:53 +02:00
Boris I. Bendovsky
4646859535
Don't play silenced muzzle flash sounds 2020-04-22 17:53:41 +03:00
Yamagi
5455ffa96f s_doppler should default to 0.
The doppler effect is a game play change. And it's rather badly
implemented. Discussed in yquake2/xatrix#51.

Closes yquake2/xatrix#51.
2020-04-21 13:58:58 +02:00
Yamagi
19214d6049 Implement adaptive vsync.
Adaptive vsync is a often requested feauture and easy to implement. Set
`r_vsync` to `2` to enable. This is untested because my system doesn't
support it.
2020-04-20 12:31:25 +02:00
Yamagi
fc99e5456f Make the gun fov optional.
Set r_gunfov to force the gun fov to be the same as the global fov.
While here finally commit somes missed parts of 50d442c.
2020-04-20 11:57:27 +02:00
Yamagi
d1a53bdeec
Merge pull request #551 from DanielGibson/scancode-input
Scancodes for Input and other keyboard input improvements
2020-04-20 08:59:55 +02:00
Daniel Gibson
d675254e4e (More) special cases for key names in configs
There already was one (that I only recently fixed) for semicolon, but
the same problem can happen with quotes or $ (which is used in macros)
(single-quote ' is probably not affected, added it just to be sure)
2020-04-12 00:40:30 +02:00
Daniel Gibson
d6cdcc3e52 Make sure K_CONSOLE up events are ignored
otherwise we might get an error about an unbound key for up (!down)
events.
2020-04-11 03:04:54 +02:00
Daniel Gibson
a44225c625 Introduce K_CONSOLE, generated by the keyboard's "console key"
regardless of keyboard layout, with a special exemption for layouts
where that key generates a quote character (like the Brazilian one)
because you may wanna type a quote into the console.
(It's SDL_SCANCODE_GRAVE, that key between Esc, 1 and Tab)

The old hack of matching for ^, ~ and ` in Char_Event() didn't work very
well for layouts we didn't anticipate, which is especially relevant with
the recent Scancode fallback, which for example allows binding the ^ key
on Belgian keyboards (which is on SDL_SCANCODE_LEFTBRACKET, far away
from the "console key"), but in that case would *also* open the console.

This is mostly straight-forward, except for a small hack to prevent the
key from generating text input (on German layouts you otherwise get
"^" in the console when closing+opening it), which requires the
"console key" to be pressed without any modifiers like Shift or AltGr.
Yes, it's ugly, but it works and all the uglyness is contained in
IN_Update() and on the other hand Char_Event() becomes less ugly :)
2020-04-10 06:21:10 +02:00
Daniel Gibson
bbde4e2a81 Support scancodes as fallback for unknown keyboard keys
If we can't map a SDL_KEYDOWN/KEYUP events SDL_Keycode to a known
Quake2 K_* keycode, we try to map the SDL_Scancode to one of the new
K_SC_* YQ2 scancodes instead.
The scancode name corresponds to the key at that position on US-QWERTY
keyboards *not* the one in the local layout, for example the German 'Ö'
key is K_SC_SEMICOLON.

This way (hopefully!) all keys on common keyboards can be bound,
regardless of their layout. The key name won't be immediately obvious
to the user, but it's only a fallback and better than nothing.

fixes #543
2020-04-08 04:43:25 +02:00
Daniel Gibson
3015995d04 Reorder (and complete) K_* related listings to match the enum
this way it's easier to tell if a key constant is not handled.

Also, there was a half-finished workaround to allow binding a ';' key
(which apparently in configs would otherwise be interpreted as
 command separator), now that should actually work (=> special case
 it in Key_KeynumToString())
2020-04-08 04:43:25 +02:00
Daniel Gibson
e86ea9f86e Remove unused K_AUX*
no idea what this was exactly, but we never generate those so they
can't be used anyway
2020-04-08 04:43:25 +02:00
Daniel Gibson
c67d82dd53 Use K_LAST instead of 256 in some loops
It's not 256 anymore, hasn't been in a long time..
2020-04-08 04:43:25 +02:00
Denis Pauk
841076f2a9 Fix game shutting down on error 2020-04-06 23:11:07 +03:00
Denis Pauk
9e5ba15eac MacOS softrender fixes #541.
On MacOS texture is cleaned up after render and code have to copy a whole
screen to texture, other platforms save previous texture content and can
be copied only changed parts.
2020-04-02 23:26:55 +03:00
Simon McVittie
6f6e27644e Add a separate noreturn macro for function pointers
C11 _Noreturn is only accepted on function declarations, not on function
pointers, so we can't use it on callbacks like game_import_t.error and
refimport_t.Sys_Error. Use a separate macro for those.

The problematic situation doesn't currently happen because the Makefile
hard-codes -std=gnu99, which disables C11 features; but removing
-std=gnu99 (resulting in the compiler's default, currently gnu11) causes
compilation failures with at least gcc 9.x.

Signed-off-by: Simon McVittie <smcv@debian.org>
2020-03-21 18:32:15 +00:00
Yamagi
fd1874ff0f Mark all remaining m_* cvar as CVAR_ARCHIVE.
This is another fix for 60a4bd3. Closes #529.
2020-03-16 15:49:04 +01:00
Yamagi
373ecdf429
Merge pull request #521 from 0lvin/for_review
Small cleanup
2020-02-27 18:50:36 +01:00
Yamagi
6d93077f43 Include limits.h in cl_cin.c; it's apparently needed.
I wonder ehy neither me nor @DanielGubson run into this; on Arch Linux
on some kind of Ubuntu, on FreeBSD or Windows... Closes #522.
2020-02-26 17:47:51 +01:00
Yamagi
0a08d8bfb1 Add back CVAR_ARCHIVE, lost in 60a4bd3.
I hate this code. 60a4bd3 removed unnecessary Cvar_Get() calls,
unfortunately they were the ones defining CVAR_ARCHIVE. The
remaining ones did not...
2020-02-23 18:46:35 +01:00
Denis Pauk
b3c23dee5b make cppcheck happy and use same version messages as other renders 2020-02-23 08:19:02 +02:00
Denis Pauk
aaade648b9 Replace *_ResampleTexture to ResizeSTB 2020-02-23 08:15:06 +02:00
Daniel Gibson
ff9f9accd3 client/refresh/files/stb.c: don't include header from gl1/
instead use ref_shared.h, like the other source files in that directory
2020-02-22 20:27:32 +01:00
Yamagi
bb0fc01e38 Another try to fix the problem of spurious aborts of cinematics.
Until this commit a cinematic was aborted as soon as any key were
marked down when finishing the user command and sending it to the
server. The whole logic to detect if a key is down is broken, for
example `vid_restart` may leave keys marked down that are in fact
up. And there's the possibility to inject fake key events from
nearly everywhere. I'm not really sure but I suspect that even the
server may be able to inject key events.

Therefore untangle the cinematic abort code from the user command
processing, it should depend only on real key strokes:

1. Introduce a new global variable `abort_cinamatic` and set it to
   `cls.realtime` as soon as a key down event is detected. The only
   exceptions are Escape and Shift, because opening the menu and
   toggeling the console should never abort a cinematic.
2. When starting a cinematic `abort_cinamatic` is set to INT_MAX,
   because it needs to be higher than the current `cls.realtime`.
3. When a cinematic is running, `cls.key_dest` is set to `key_game`
   (`key_menu` and `key_console` are ignored, keys send to the menu
   or the console should never abort a cinematic; `key_message`
   can / should never happen while a cinematic is running) and
   `abort_cinamatic` is less than `cls.realtime` the cinematic is
   aborted.

`abort_cinamatic` less than `cls.realtime` is necessary because the
client needs one frame to pop up the menu or toggle the console and set
the `cls.key_dest` accordingly. `abort_cinamatic == cls.realtime - 1`
is not possible because not every frame finishes a user command.

This closes #502.
2020-02-22 18:48:47 +01:00
Yamagi
50d442c1e8 Add sw_gunzposition to alter the guns Z offset.
An option like this was often requested since I fixed the gun field of
view in e466554. Since the software renderer is missing the ability to
alter the persepective matrix (e.g. something like glFrustrum()) this
fix fakes the offset by manipulating the guns transformation marix.
That's not perfect, the gun distorts if `sw_gunzposition` is set to
anything but `0`. Values up to `8` are more or less okay. Defaults
to `8` which matches the GL renderer default.
2020-02-22 15:43:46 +01:00
Yamagi
e0067e90a8 Missing PVS Studio fixes for soft renderer.
Mod of the problems were already done by @0lvin in 129da805.
2020-02-10 18:21:29 +01:00
Daniel Gibson
b3f61f20d4 PVS Studio fixes for GL3 renderer 2020-02-10 17:55:41 +01:00
Daniel Gibson
00127cc912 PVS Studio fixes for GL1 renderer 2020-02-10 17:55:41 +01:00
Daniel Gibson
9f22f3d298 PVS Studio: Misc. fixes and FIXMEs 2020-02-10 17:55:41 +01:00
Daniel Gibson
ae3723c900 YQ2_ATTR_NORETURN for functions that don't return (Sys_Error() etc)
must be used in front of functions, not behind (the GCC __attribute__
allows both, but MSVC and C11 don't!)
2020-02-10 17:55:41 +01:00
Alexander Tsoy
60a4bd3306
Fix build with -fno-common
GCC 10 defaults to -fno-common.

Closes #516
2020-02-10 17:05:48 +03:00
Denis Pauk
6e80924050 Fix segfault on device without available sound cards
In such case sound system left uninitialized and without cvars.
----
Thread 1 "quake2" received signal SIGSEGV, Segmentation fault.
0x00005555555956a1 in OGG_PlayTrack (trackNo=7) at src/client/sound/ogg.c:351
351 if((trackNo == 0) || ogg_shuffle->value)
(gdb) bt
#0  0x00005555555956a1 in OGG_PlayTrack (trackNo=7) at
src/client/sound/ogg.c:351
#1  0x000055555557bded in CL_PrepRefresh () at src/client/cl_view.c:367
#2  0x000055555556e1a0 in CL_Precache_f () at src/client/cl_main.c:472
#3  0x00005555555a40dc in Cbuf_Execute () at src/common/cmdparser.c:229
#4  0x000055555556f0f9 in CL_Frame (packetdelta=<optimized out>,
renderdelta=<optimized out>, timedelta=<optimized out>,
packetframe=packetframe@entry=true,
    renderframe=renderframe@entry=false) at src/client/cl_main.c:803
#5  0x00005555555aa0c5 in Qcommon_Frame (usec=5) at src/common/frame.c:626
#6  0x00005555555aa48e in Qcommon_Mainloop () at src/common/frame.c:163
#7  0x00005555555aaae6 in Qcommon_Init (argc=1, argv=0x7fffffffdfa8)
at src/common/frame.c:377
#8  0x000055555555e564 in main (argc=1, argv=0x7fffffffdfa8) at
src/backends/unix/main.c:123
----
2020-01-30 22:45:01 +02:00
Denis Pauk
dec8125e07 update stb_* codes
wget https://raw.githubusercontent.com/nothings/stb/master/stb_image_resize.h -O src/client/refresh/files/stb_image_resize.h
wget https://raw.githubusercontent.com/nothings/stb/master/stb_image.h -O src/client/refresh/files/stb_image.h
wget https://raw.githubusercontent.com/nothings/stb/master/stb_image_write.h -O src/client/vid/header/stb_image_write.h
wget https://raw.githubusercontent.com/nothings/stb/master/stb_vorbis.c -O src/client/sound/header/stb_vorbis.h
2020-01-30 22:29:05 +02:00
Denis Pauk
fae078745f Use simular logic in ref_sw:setMode as in ref_gl 2020-01-30 22:28:36 +02:00
Denis Pauk
b1d3ddebbc use vsnprint in Com_Printf functions 2020-01-30 22:28:13 +02:00
Yamagi
8383aea813 Fix small typo in GOG.com track mappings.
This closes #504.
2020-01-21 17:08:12 +01:00
Yamagi
29d607c550 Add work around for lost OpenAL output devices.
The Intel display driver for Windows 10 destroys the DisplayPort audio
device when the resolution changes. It's recreated at an unspecified
later time. This is a work around to recover from that:

* Check every frame if OpenAL is still connected.
* If not, wait for 2.5 seconds, after that inject a 'snd_restart'
  into the command buffer.

Samples send to the OpenAL backend while disconnected are skipped.
This fixes #483.
2020-01-15 14:16:44 +01:00
Yamagi
578256e53b Removed dead code missed in 43fa3a1. 2020-01-08 18:27:58 +01:00
Yamagi
43fa3a1be7 Fix cea7095, so that particles aren't renderes as some kind of dust.
This also simplifies the code a little bit by removing unnecessary (and
broken) pointer magic.
2020-01-02 15:17:31 +01:00
Mason UnixBeard
1c28f34cee Moved the point parameter enabling/disabling logic 2020-01-02 15:17:31 +01:00
Mason UnixBeard
6a9f0c46d7 Add case for when gl point parameters are not supported 2020-01-02 15:17:31 +01:00
DenisBelmondo
af45aa56f1 Added gl1 square particles CVar 2020-01-02 15:17:31 +01:00
Daniel Gibson
9f5ee77c77 Use gl_texturemode for videos, fixes #491
.. and whatever else uses Draw_StretchRaw()
2019-12-21 05:11:15 +01:00
Daniel Gibson
1077b7525f Use gl_texturemode for UI and skies as well, fixes #489 and #491
and make sure that after vid_restart (or starting the game) it's used
correctly in GL3.

While at it, made sure that it's *not* applied to textures from
gl_nolerp_list, because they're supposed to always use GL_NEAREST
independent of this setting (used so console font and crosshairs don't
look blurry)
2019-12-08 22:09:28 +01:00
Daniel Gibson
6ecc083c83 Fix window position after switching from fullscreen
On Windows last_position_x/y (from SDL_GetWindowPosition()) was 0, 0 when
coming from fullscreen, and creating a window at position (0, 0) cuts off
the window decorations (SDL-Bug?) so the window can't even be moved
around anymore.
So now we only use the last_position_* if last_position_y was > 24, so we
have enough of the title bar to move the window around with the mouse.

This is part of #484
2019-11-16 18:38:21 +01:00
Yamagi
a4f56a9650 Improve readability of last commit, avoid opaque bit tinkering. 2019-11-13 20:53:49 +01:00
Yamagi
fed2e142f5 SDL_WINDOW_FULLSCREEN_DESKTOP implies SDL_WINDOW_FULLSCREEN.
The docs "forget" to mention that. So it's not enough to check for
SDL_WINDOW_FULLSCREEN alone, we would trigger the code intented for the
real fullscreen if we're switching to / running in fullscreen desktop
mode. Add and addition check that SDL_WINDOW_FULLSCREEN_DESKTOP isn't
set.

This may fix issue #484.
2019-11-13 20:29:13 +01:00
Daniel Gibson
f3899b1348 Merge branch 'pvs-studio-fixes-1' 2019-11-10 17:39:45 +01:00
Denis Pauk
9f5387ab29 Add force redraw on change gamma 2019-11-05 22:37:07 +02:00
Yamagi
9cc466b2c2 Fix stupid oversight: Query the correct variable for the quicksave name. 2019-10-25 18:09:08 +02:00
BjossiAlfreds
c7b412e768 Added some text to cycleweap doc and added name to credits 2019-10-12 23:51:56 +00:00
Yamagi Burmeister
bf1d8a6cb6 Hack the quicksave slot into the menu.
With this quicksaves can be loaded from the menu. They cannot be saved.
That's an artificial limitation to match the behavior of autosaves. I
think both should behave the same because their comment string are
formatted the same...

This is somewhat hacky. Until now the menu assumed that all savegames
are named from save0 to saveX, where save0 is the autosave slot. There
were 16 slots per page * 2 pages = 32 savegame slot, so the highest slot
was save31. I've reduced the slot per page to 14 to make room for one
quicksave slot and one empty line between it and the first regular slot.
That alone would reduce the number of slots to 28, making the four
highest slots unreachable. So I've increased the number of pages to 4,
there're now 14 slots per page * 4 pages = 56 slots.

The quicksave slot is shown on every page, because it was the easiest
way to integrate it into the existing code. Everything else would
require the paging logic to be rewritten in a way that different pages
can have a different number of slots and a different layout.

This is part of #473.
2019-10-12 16:56:14 +02:00
Denis Pauk
de2457bb2a Copy drawn lines if picture scalled 2019-10-02 22:07:57 +03:00
Yamagi Burmeister
70a94f759f Fix demo playback if cl_loadpaused is 1.
Demos are special. To the client they're more or less the same as normal
maps, the only difference is that the client never joines the server. So
we're never getting the first valid frame txpaht indicates the end of
the connection process. We're using that one to drop out of pause
mode... As a result the client stays in pause mode forever and "hangs".

Work around this by entering pause mode only if the local server is in
state ss_game. Demos are ss_demo. There're some more states for
cinematics, pictures, etc. Since the player can't save in those states
it should be save not check them.
2019-10-01 22:26:37 +02:00
Yamagi Burmeister
52b5698014 Make the new 'cycleweap' command autocompleteable. 2019-10-01 20:55:27 +02:00
Daniel Gibson
378f01f7b5 SV_FatPVS(): use int32_t instead of long, as the code assumes it's 32bit 2019-09-25 21:39:02 -01:00
Daniel Gibson
77493e6e5b Don't call SDL_GetWindowDisplayIndex() with window == NULL
I got an SDL assertion because of this.
The problem was that PrintDisplayModes() was called at startup before a
window was created.
2019-09-22 19:09:10 +02:00
Yamagi
990e4f6989
Merge pull request #450 from bibendovsky/fix/448_pendingplays
Fix the pending sound list sorting
2019-09-15 09:41:01 +02:00
Boris I. Bendovsky
16ee0073d4
Fix the pending sound list sorting 2019-09-13 19:48:44 +03:00
Denis Pauk
129da805a1 Make static C code analysis tool little more happy(#426)
sw_image.c:
	203: The potential null pointer is passed into 'memcpy' function. Inspect the first argument. Check lines: 203, 192.
	368: The null pointer is passed into 'free' function. Inspect the first argument.
	401: Expression '!pic' is always false.
	401: There are two 'if' statements with identical conditional expressions. The first 'if' statement contains function return. This means that the second 'if' statement is senseless. Check lines: 394, 401.
	565: The potential null pointer is passed into 'memcpy' function. Inspect the first argument. Check lines: 565, 564.

sw_model.c:
	215: The 'model' pointer was used unsafely after it was verified against nullptr. Check lines: 210, 215.
	985: The 'header->lumps[12].filelen / sizeof (int)' expression was implicitly cast from 'size_t' type to 'float' type. Consider utilizing an explicit type cast to avoid the loss of a fractional part. An example: double A = (double)(X) / Y;.
	1277: Function 'RE_BeginRegistration' argument 1 names different: declaration 'map' definition 'model'.

sw_surf.c:
	239: There might be dereferencing of a potential null pointer 'sc_base'. Check lines: 239, 236.

sw_main.c:
	1345: The if condition is the same as the previous if condition
	1466: Function 'R_GammaCorrectAndSetPalette' argument 1 names different: declaration 'pal' definition 'palette'
	2063: The 'swap_buffers' pointer in the expression could be nullptr. In such case, resulting value of arithmetic operations on this pointer will be senseless and it should not be used. Check lines: 2063, 2061.

sw_aclip.c:
	180: Variable 'j' is reassigned a value before the old one has been used.

sw_alias.c:
	209: Function 'R_AliasTransformVector' argument 3 names different: declaration 'm' definition 'xf'.

sw_draw.c:
	78: Function 'RE_Draw_CharScaled' argument 3 names different: declaration 'c' definition 'num'.
	149: Function 'RE_Draw_GetPicSize' argument 3 names different: declaration 'name' definition 'pic'.
	173: The scope of the variable 'u' can be reduced.
	267: Function 'RE_Draw_PicScaled' argument 4 names different: declaration 'factor' definition 'scale'.

sw_scan.c
	593: Function 'D_DrawSpansPow2' argument 1 names different: declaration 'pspans' definition 'pspan'.
	745: Function 'D_DrawZSpans' argument 1 names different: declaration 'pspans' definition 'pspan'.
2019-09-12 22:36:13 +03:00
Yamagi
5d97bbff8a
Merge pull request #442 from 0lvin/for_review
Add zBuffer damage logic
2019-09-12 10:05:32 +02:00
Yamagi Burmeister
7d28dbbc54 Add telepport and listentities commands as forward to server cmds.
This makes them available for autocompletion. Closes issue #430.
2019-09-12 09:35:38 +02:00
Denis Pauk
0bace327f8 Add zbuffer damage checks
Save current player position and compare with a position in the previous
frame, if position is same refresh only changed rectangle in zbuffer.
zBuffer can be damaged by models, particles and static transparent spans.

zBuffer damage is not useful for the screen refresh minimize for now,
as result of explosion can change texture light value.
2019-09-10 08:20:48 +03:00
Denis Pauk
aba398c1b9 dump current possition in world 2019-09-10 08:20:48 +03:00
Denis Pauk
7435283213 Skip flush screen after palette change
Fixes issue with black screen on new game after show the introduction video
2019-09-10 08:20:48 +03:00
David Carlier
28e22f15d5 Little code changes proposal. 2019-09-04 21:56:22 +01:00
Yamagi Burmeister
5ae4a73acd Fix stupid endless loop in HTTP->UDP Fallback handling.
The fallback logic is: r1q2 style URLs -> q2pro style URLs -> UDP. In
case that an r1q2 or q2pro server is missing files, we may fall through
to UDP and download files over abysmal slow UDP that are available over
HTTP. To work around this problem we reset the precacher iterations back
to 0 and start over with r1q2 style URLs. This works as long as we're
able to download all files. But if one or more files are unavailable
over all three download options we'll run into an endless loop. Mitigate
this by starting over only once. This comes with the drawback that on
servers that miss more than one file downloads might done over UDP were
HTTP is available. In that case the server should be fixed.

This closes #429.
2019-09-04 18:02:06 +02:00
Yamagi Burmeister
b7bb9f2550 Reset paused_at_load after loading has finished. 2019-09-03 08:45:59 +02:00
Yamagi Burmeister
fc5c2788a1 Put the client into pause mode when loading save games.
This prevenits the worlds from advancing during client connect. The
player won't get attacked by monsters or hurt by the environment. Note
that in baseq2 there're still 4 world frames processed by the game and
100 world frames if the player enters a level that he or she already
visited. Both aren't a big problem, 4 world frames are hardly enough
for monsters starting to attack and in most levels the starting area
can't be reached by monsters and is free from environmental effects.

Pause mode is only entered for local servers and only in single player
mode. This should prevent problems with coop and deathmatch games.

The behaviour can be controlled by `cl_loadpaused`:
* `0`: Do not enter pause mode, Vanilla Quake I behaviour.
* `1`: Enter pause mode at load and leave it at first regular server
       frame.
* `2`: Enter pause mode at load, never leave it. The player must leave
       it by hand.

This was requested in issue #417.
2019-09-03 08:42:05 +02:00
Daniel Gibson
f9c77b98af YQ2_ALIGNAS_*() in common.h 2019-08-24 20:38:42 -01:00
Daniel Gibson
bebd9e73b3 YQ2_COM_CHECK_OOM() macro to check if malloc() etc was successful 2019-08-21 21:07:31 -01:00
David Carlier
97e66dfd9b Silence deprecation warning with OpenGL.
on Darwin, Mojabe has deprecated it in favor of Metal,
here we silent the lengthy build warning.
2019-08-01 20:01:43 +01:00
Daniel Gibson
95983f08cf Fixes for PVS Studio warnings: Sound stuff 2019-07-21 05:29:05 +02:00
Daniel Gibson
90d0fe07e2 Fixes for PVS Studio warnings: (q)menu.c, glimp_sdl.c 2019-07-21 03:08:52 +02:00
Daniel Gibson
4c265d448f Fixes for PVS Studio warnings: client/cl_*.c and curl/download.c
except for cl_cin.c that'll need some actual refactorings

see #426
2019-07-21 03:02:22 +02:00
Yamagi Burmeister
eaa4aa46ce Don't screw up if 'sensitivity' is set to non-integral values.
Like most other cvars 'sensitivity' allowes for float values. But until
now mouse events were handled as integers which led to some confusing
problems. This was especially noticeable at values lower than 1, small
mouse movements were cut to 0 and discarded. Since the clients movement
code is written in floats and we're already using floats for joystick
movement switch the mouse event handling over to them, too.

This should have any impact on configs were 'sensitivity' is ste to
integral values. If it was set to decimal values the behaviour is now
correct.

This fixes #419.
2019-07-20 16:19:35 +02:00
Yamagi Burmeister
e3d4038233 Remove S_RegisterSexedModel().
I new that it was unused, I left it in the code because I thought it
might be usefull one day. It wasn't, so finally remove it. Closes #425.
2019-07-20 16:19:15 +02:00
David Carlier
78a5a819c6 curl buffer resizing lost fix proposal. 2019-07-14 13:08:40 +01:00
Yamagi Burmeister
158fbbe559 Enable the numpad * key.
All other keys were already enabled. Reported by @m-x-d, closes #420.
2019-07-11 14:12:14 +02:00
Yamagi Burmeister
3b641e481d Trigger the SDL bug #4700 only if we're in fullscreen. 2019-07-11 14:04:14 +02:00
Yamagi Burmeister
2681276fa1 Remove unused variable and statement.
Reported by @m-x-d. Closes #420.
2019-07-11 14:02:05 +02:00
Yamagi
c1ccb95026
Merge pull request #416 from 0lvin/for_review
Fix overrun in RE_BufferDifferenceStart
2019-07-11 07:45:03 +02:00
Daniel Gibson
b9d8ceba0b Reset vid_rate when using fallback display mode 2019-07-06 19:44:27 +02:00
Denis Pauk
af27d68483 Remove unused sw_partialflush flag 2019-07-06 13:25:29 +03:00
Denis Pauk
5b98640dd2 use pixel position for skip unchanged 2019-07-06 11:43:01 +03:00
Denis Pauk
c6b31d1b46 change 2d buffer damage before frame flush 2019-07-06 10:33:15 +03:00
Denis Pauk
a7199f95db Always flush whole texture to render 2019-07-05 22:28:48 +03:00
Denis Pauk
ceb7fd03b1 fix issue with back_max in RE_BufferDifferenceStart 2019-07-05 22:28:48 +03:00
Yamagi Burmeister
6db1203f22 Evil hack to work around SDL bug 4700.
Check if we're in the requested mode after the fullscreen window was
created. If not: Try to switch again in the requested mode by calling
SDL_SetWindowDisplayMode(). If that's successfull set the new window
size with SDL_SetWindowSize(). That shouldn't be necessary, at least to
SDLs crappy doku, but without the subsequent SDL_GetWindowDisplayMode()
call fails with 'Invalid Window'. Use that call to check if we're now
in the requested mode. If yes, process. If not abort and trigger the
fallback magic. It'll set `r_mode 4` and `vid_fullscreen 0`.

Caveat: In the worst case this will switch the display mode 3 times.
To create the window, to work around the bug and to set a refresh rate.
No problem for flat panels, but my unforgotten Trinitron CRT would
have cried in pain.
2019-07-05 14:12:27 +02:00
Yamagi Burmeister
890d708085 Add a new cvar vid_rate and make sure that we're at the requested mode.
* Normaly SDL chooses a sane refresh rate for fullscreen windows. Users
  may want to override that, so provide a new cvar `vid_rate`. If it's
  set to a value greater than 0, we're trying to get a mode close to the
  requested resolution and refresh rate and switch to that.
* A bug in SDL may leave us in the wrong mode, detect that condition and
  abort. See https://bugzilla.libsdl.org/show_bug.cgi?id=4700 for details.

This is part of issue #302.
2019-07-02 19:04:13 +02:00
Yamagi Burmeister
aeca570a96 Fix code style after latest changes.
Since it's apperently too hard to stay within the style and I'm sick of
discussing it, I fix it by myself.
2019-07-02 17:52:17 +02:00
Yamagi Burmeister
b5f3a79f5d Print SDL display modes.
Print a list of all available modes as soon as SDLs video backend
initializes and the real display mode after the window was created
or altered.

This hopefully helps debbuging problem with display mode selection, see
issue #302 for an example.
2019-06-29 21:11:44 +02:00
Yamagi
40b5fbe87a
Merge pull request #412 from Spirrwell/master
Multi-Monitor Management
2019-06-29 21:06:37 +02:00
Spirrwell
4f5de01d8e (Code Formatting)Fix Indentation 2019-06-29 13:54:59 -04:00
Denis Pauk
f8c73ca731 Flush only frame difference. 2019-06-24 21:47:42 +03:00
Denis Pauk
60f9af27f5 Dynamicly allocate lights 2019-06-24 21:47:42 +03:00
Denis Pauk
9783e7955f correctly check limits in RE_Draw 2019-06-24 21:47:42 +03:00
Denis Pauk
65888e6b9b fix distance selection for mip level 2019-06-24 21:47:42 +03:00
Denis Pauk
a2af07c9fc make d_ziorigin, d_zistepu, d_zistepv local 2019-06-24 21:47:42 +03:00
Denis Pauk
25a2aff688 render code cleanup and allocate spans at once 2019-06-24 21:47:41 +03:00
Denis Pauk
5f2293bf0d limit surfaces amount to unsigned short 2019-06-24 21:47:41 +03:00
Spirrwell
39728eb5d4 (Multi-Monitor)Hide "display index" Option If Single Display
-The "display index" option will now no longer show up in the "VIDEO" menu if user only has a single display
2019-06-16 17:35:55 -04:00
Spirrwell
fc78aefee3 (Multi-Monitor)Better Handling
-Add back use of last_position_x and last_position_y
-last_position_x and last_position_y will be set to undefined when the window is shutdown IF the current display used is not the desired display
-last_display will be set to desired display at window shutdown if not the same
-vid_displayindex clamped using ClampDisplayIndexCvar() at startup and window shutdown
2019-06-16 17:34:00 -04:00
Spirrwell
0da8099de8 (Multi-Monitor)Code Cleanup
-We only need to init the display indices once in GLimp_Init
-We only need to clear the display indices once in GLimp_Shutdown
-Remove extra 'displayindex' variable
2019-06-16 01:11:20 -04:00
Spirrwell
03e3c6bf71 Move 'num_displays' Initialization
-SDL_GetNumVideoDisplays() will always remain the same after the call to SDL_Init(SDL_INIT_VIDEO), so it makes sense to set in GLimp_Init where we do this.
2019-06-16 01:02:53 -04:00
Spirrwell
f6a9690a36 (Multi-Monitor)Can Choose Which Monitor to Use
-Adds option in the "VIDEO" menu for "display index" that lets you specify which monitor you would like to use.
2019-06-16 00:50:15 -04:00
Max Crofts
bc565030a5 Allow scrolling with mouse in console
Mouse keycodes have been added to consolekeys. Unbound key warnings now only print when in-game.
2019-06-04 19:36:37 +10:00
Yamagi Burmeister
9b80745d5d Fix cursor position in the 'name' field in the player setup menu.
This closes #396.
2019-05-09 18:01:36 +02:00
Daniel Gibson
f5d9c49f20 Allow second layer of keybindings for controllers, refs #387
There's an "enable alt joy keys" command now. If a key is bound to that
command, all joystick buttons (incl. hat and triggers) are turned from
K_JOYx into K_JOYx_ALT, which allows two keybindings on the same key,
one with the altselector pressed and one without.
If there's no keybinding for K_JOYx_ALT, it will use the binding for
just K_JOYx as a fallback (if it exists).

This is especially handy to create direct bindings for all the weapons
on the (limited amount of) Joystick buttons.
2019-05-05 18:10:10 -01:00
Daniel Gibson
107d044da2 Make AMD performance workaround conditional per driver version 2019-05-04 17:37:16 +02:00
Daniel Gibson
cdf533f995 Fix overbright models in GL3, refs #393
also some dumb bug with using i in two nested loops
2019-05-04 17:37:16 +02:00
Daniel Gibson
26a461575b Try to make GL3_BufferAndDraw3D() faster on AMD/Windows
Seems like AMDs Windows driver doesn't like it when we call
glBufferData() *a lot* (other drivers, incl. Intels, don't seem to
care as much).
Even on an i7-4771 with a Radeon RX 580 I couldn't get stable 60fps
on Windows without this workaround (the open source Linux driver is ok).

This workaround can be enabled/disabled with the gl3_usebigvbo cvar;
by default it's -1 which means "enable if AMD driver is detected".

Enabling it when using a nvidia GPU with their proprietary drivers
reduces the performance to 1/3 of the fps we get without it, so it
indeed needs to be conditional...
2019-05-04 17:37:16 +02:00
Daniel Gibson
7b4dc000ad Unify buffering data and drawing with gl3state.v[ab]ao3D
use GL3_BufferAndDraw3D() instead of glBufferData() and glDrawArrays()
in each place it's needed.
This by itself doesn't make anything faster, but it will make trying out
different ways to upload data easier.
2019-05-04 17:37:16 +02:00
Yamagi Burmeister
401ec04691 Make the SURF_DRAWSKY fix committed in 325e893 optional.
The developers tested their maps without the fix and decided that it
looked good. Add a new cvar gl_fixsurfsky defaulting to 0 that enables
the fix if someone really want it.
2019-05-04 17:23:20 +02:00
Yamagi Burmeister
325e893376 Don't create lightmaps and set SURF_DRAWSKY for SURF_SKY surfaces.
The software renderer already did this, but not the GL renderers. Maybe
the logic was lost somewhere on the long way... Without this change a
fullbright lightmap is generated for SURF_SKY surfaces and without the
SURF_DRAWSKY flags the surfaces aren't skipped in RecursiveLightPoint()
and GL3_LM_CreateSurfaceLightmap(). This isn't a problem under real
skyboxes, but in cases were SURF_SKY is abused fpr interior lightning.
rmine2.bsp in rogue is a good place to see the problem

Reported by @m-x-d, fixes #393.
2019-05-01 19:32:30 +02:00
Daniel Gibson
98b24654b6 Make square particles gamma-correct, work around Intel Windows bug
I guess it makes sense to apply gamma to the color, we do the same
for the standard round particles.
Also, this way the fragment shader for square particles references the
uniCommon UBO (gamma is part of it) - apparently the Intel HD4000
(from Ivy Bridge) GPU driver for Windows has a bug that uniform blocks
that exist in the shader source but aren't actually used can't be found
(with glGetUniformBlockIndex(prog, name)), which we treat as an error
in  gl3_shaders.c initShader3D().

fixes #391
2019-04-25 18:38:16 +02:00
Daniel Gibson
0ef064b21d Fix GL1 and GL3 stencil buffer setup
This broke during refactoring (in b8a062e36), reported in #391

(SDL_GL_[SG]etAttribute() return 0 on success and -1 on failure)
2019-04-22 04:05:04 +02:00
Yamagi Burmeister
f9108db668 Fix stupid c&p braino, initialize vid_gamma.
This closes #385.
2019-04-08 14:05:54 +02:00
Yamagi
06c4735fbb
Merge pull request #382 from 0lvin/for_review
Add auto detect resolution
2019-04-08 14:00:52 +02:00
Yamagi Burmeister
5bb5e52879 Fix vid_displayrefreshrate reset.
Until now it wasn't possible to reset vid_displayrefreshrate to -1 once
it was changed to something else. Fix that.
2019-04-08 13:56:56 +02:00
Daniel Gibson
178fcff36e GL3: Fix missing dynamic lights on floor for grenades/rockets
Apparently the lightsource for exploding rockets/grenades is very close
to the surface, so the dot-Product between surface-normal and the
vector between the light and the pixel returns 0, basically disabling
the dynamic light for that surface.
As a workaround, move the lightposition (only for that dot product)
a bit above the surface, 32*surfaceNormal looks good.

fixes #386
2019-04-03 19:38:39 +02:00
Denis Pauk
eea1cd30e8 Fix segfault in about menu 2019-03-23 23:23:54 +02:00
Denis Pauk
e568e3ff0e Save original window position before recreate 2019-03-22 23:29:17 +02:00
Denis Pauk
f0dc7bd6f9 Move GetDesktopMode to client/vid/vid.c 2019-03-21 21:32:34 +02:00
Denis Pauk
f105047540 make cppcheck little more happy 2019-03-20 22:01:14 +02:00
Denis Pauk
025764db79 make cppcheck little more happy 2019-03-20 21:56:28 +02:00
Denis Pauk
0f9e3cc69a Move patches authors to about menu
With whole respect to original authors
2019-03-20 21:28:42 +02:00
Denis Pauk
fbe42511c1 Add resolution autodetect 2019-03-20 20:59:34 +02:00
Denis Pauk
0ab41ee0df Use boolean for r_outof* 2019-03-20 20:45:15 +02:00
Denis Pauk
5e7082e72d Fix for light without current entity 2019-03-20 20:43:54 +02:00
Daniel Gibson
3b296c43a0 GL1, SW: Calculate needed hunk size in Mod_LoadBrushModel()
same as last commit but for the other renderers
2019-03-17 20:24:40 +01:00