Commit graph

1691 commits

Author SHA1 Message Date
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
Daniel Gibson
ec6d743d46 GL3: Calculate needed hunk size in Mod_LoadBrushModel()
The real needed size can't be derived from the .bsp file size, because
* many generated structs contain pointers
* there's lots of data generated per face..
* _especially_ for warped faces that are subdivided
2019-03-17 18:10:07 +01:00
Daniel Gibson
d2d87025fa Fix case of map savegames name (save/bla/MAPNAME.sav/sv2)
introduced FS_GetFilenameForHandle(fileHandle_t) for this

this helps if a map has been started with "wrong" case, which doesn't
immediately fail if it has been loaded from a pack, but will result
in invalid savegame names that (with case-sensitive FSs) will fail to
load (when going back to a formerly played level)
2019-02-17 18:46:57 +01:00
Yamagi Burmeister
3296b7a1a2 Add back pak prioritization to HTTP download code.
The r1q2 code prioritized pak files over all other files, e.g. as soon
as a pak file was requested no more file were added to the download
queue until it finished downloading. That way one could be sure that
assets included in the pak file weren't downloaded in parallel as single
files.

This is a better, bugfixed and more robust implementation of the same
logic. With this back in place we can switch back to parallel downloads
which gives a nice speedup on Windows. Maybe, just maybe some day
Microsoft will fix Windows crappy I/O...
2019-02-17 10:03:17 +01:00
Yamagi Burmeister
f96a82010e Combine all HTTP download quirks into a strict dlquirks_t.
Working with getter and setters was a good idea as long as we had one or
two quirks. Now we're at three with maybe more to come so it's easier to
use a struct to communicate quirks between the precacher and the HTTP
download code.
2019-02-17 09:38:11 +01:00
Yamagi Burmeister
b1629fb768 Prevent buffer overflows console if vertical resolution > 2048.
The stores it's text in the key_lines array which is NUM_KEY_LINES *
MAXCMDLINE chars long. The code never checked for overflows, it just
assumed that a line will never be longer then 256 chars * 8 = 2048
pixel. With modern displays we can have higher vertical resolutions,
so the array will overflow sooner or later.

Fix it by clamping the maximum line width to MAXCMDLINE - 2 chars (1
for the prompt and 1 for the terminating \0). While at it increase
MAXCMDLINE to 1024 chars * 8 = 8192 pixel, which is more then 8k
resolution and should be enough for the years to come.

This is belived tot fix at least a part of issue #368.
2019-02-16 08:57:44 +01:00
Yamagi Burmeister
8c60939bd5 Use correct path to filelists when downloading for a mod.
I'm not 100% sure if this is okay for q2pro, but at least in my simple
tests r1q2, q2pro and now yq2 generate the same URL. Nevertheless it's
somewhat inconssistent to search generic files at /moddir/... and the
filelist at /moddir.filelist

This closes issue #370.
2019-02-11 19:27:34 +01:00
Yamagi Burmeister
32d9119cff CL_HTTP_EnableGenericFilelist() needs curl/download.c linked in.
Reported by @LoneFox78 in issue #369.
2019-02-11 19:20:55 +01:00
Yamagi Burmeister
e4665547a8 Try to fix gun fov calculations in the softrenderer.
Until now the softrenderer calculated the fov relative to a hard coded
aspect of 4/3. That's wrong, because we're supporting arbitrary aspects
and we aren't calculating a fov but just a scaling factor to the global
fov which takes the aspect into the account.

Fix this by not taking any aspect calculations into account. BUT: While
this renders the gun with a correct perspective it's positioned much
nearer to the camera / player then in the GL renderers. The GL renderers
work around that problem by enforcing a minimal Z distance of 4 units,
which can't do because we're just calculating a scaling factor...
2019-02-04 13:43:34 +01:00
Denis Pauk
2a19bfe6cd make variables local 2019-01-31 22:40:16 +02:00
Denis Pauk
3a85943118 Show func in .Sys_Error and .R_Printf 2019-01-31 22:09:33 +02:00
Denis Pauk
b7cac7f8aa Use INT_MIN instead -999999 2019-01-30 23:27:59 +02:00
Denis Pauk
c80820500b Fast lights clean 2019-01-30 23:22:00 +02:00
Denis Pauk
e43859de4a Fast lights clean 2019-01-30 23:19:10 +02:00
Denis Pauk
dcc2892de0 Use resize stb image 2019-01-30 23:06:25 +02:00
Denis Pauk
1dfb54bf38 Add code for retore mips 2019-01-30 23:03:38 +02:00
Denis Pauk
203bc4b202 Update stb_image and add stb_image_resize code 2019-01-30 22:43:54 +02:00
Denis Pauk
07c472cfd2 Remove adivtab 2019-01-30 22:42:21 +02:00
Yamagi Burmeister
900d35ef27 Hack in support for q2pro filelists.
r1q2 places the global filelist at /.filelist, q2pro at
/gamedir/.filelist...

Now I'm feeling even more dirty.
2019-01-30 17:14:13 +01:00
Yamagi Burmeister
67b1a8fd95 Implement q2pro URL scheme.
The r1q2 URL generator was, like everything in this game, buggy. It took
cl.gamedir into account when generating the URLs, but overlooked that it
is only set when 'gamedir != BASEDIR'. So baseq2 assets ended up with
/maps/foo.bsp and mod assets with /mod/maps/foo.bsp. q2pro fixed that
to always include the gamedir...

Work around this by refactoring the HTTP -> UDP fallback logic to be
more generic: Count the number of iterations and depending on the
iteration set the gamedir to be used by the URL generator or force
UDP downloads.
2019-01-30 17:14:13 +01:00
Yamagi Burmeister
c06af7de57 Reset error state when getting a new download server. 2019-01-30 17:14:13 +01:00
Yamagi Burmeister
1d9acffe0b Ensure that internal pathes are always starting with a /.
Otherwise the URL generator might generate invalid URLs...
2019-01-30 17:14:13 +01:00
Yamagi Burmeister
d38929170b Download the generic filelist only once.
Cleaning the download queue as soon as a file finished downloading leads
in combination with only one parallel download and multiple precacher
runs to an ugly problem: The generic filelist is requested several time
which can lead to cycles. Hack around this by rembering if we already
requested it and reset set reminder as soon as the precacher finished.

Yes, I'm feeling dirty.
2019-01-30 17:14:13 +01:00
Yamagi Burmeister
5e67596d56 Strip trailing slashes from download server URL.
If the server sends us an URL with trailing slash we're generating URIs
like http://example.com//maps/foo.bsp. While double // are perfectly
valid they might me rejected by some servers. So let's play save.
2019-01-30 17:14:13 +01:00
Yamagi Burmeister
e05f95e3fb Don't free() the download queues last element twice.
While at it replace the crappy Z_TagMalloc() with the standard malloc().
Z_TagMalloc() ist just a wrapper arround malloc(), there's no functional
change.
2019-01-30 17:14:13 +01:00
Yamagi Burmeister
eb048e8611 Implement fallback logic from HTTP downloading to UDP.
This looks easy, but is rather hacky... Downloading is implemented
through the precacher. The server sends an asset list, while loading
the map another one is generated. CL_RequestNextDownload() goes
through this list, in the order models / maps -> sounds -> images,
calls CL_CheckOrDownloadFile() for each file. CL_CheckOrDownloadFile()
checks if the file is already there, return true if it is and false
if not. If the return code is false CL_RequestNextDownload() itself
returns, it's called again by CL_ParseDownload() as soon as the just
queued file finished downloading. This way all missing files are
downloaded one after the other, when CL_RequestNextDownload() finally
reaches it's end (all files are there) it send 'begin' to the server,
thus putting the client into the game.

HTTP downloads are parallel, so CL_RequestNextDownload() cannot track
which files are there and which are missing. The work around for that is
to queue the file but have CL_CheckOrDownloadFile() return true. So
CL_RequestNextDownload() thinks the file is already there, continues
with the next one, until all missing files are queued. After that it
polls CL_PendingHTTPDownloads() and sends the 'begin' as soon as all
HTTP downloads are finished.

If a HTTP download fails we cannot just queue it as UDP download,
because the precacher things that the file is already there. And we
can't tell the precacher that it's not because the precacher tracks
files only by the number of downloaded files per asste type and not
their name. Just decreasing the number of downloaded files isn't
possible since the precacher may have progressed to the next asset
type.

So: On the HTTP side it's tracked if there was an error or not.  After
CL_RequestNextDownload() has queued all files and waited for all HTTP
downloads to finish it checks the HTTP error status. If there was an
error the precacher state is reset and CL_RequestNextDownload() recurses
into itself to take another run. All files that couldn't be downloaded
are queued again, this time as UDP downloads.
2019-01-30 17:14:13 +01:00
Yamagi
78366472f9
Merge pull request #351 from CanntAim/master
Fixed menu code to correctly parse maps.lst file.
2019-01-19 16:53:52 +01:00
Denis Pauk
a1773b91d7 Use separator instead action in menu header 2019-01-16 23:23:48 +02:00
JBerg
867046bb8b requested fixes my last commit: proper null checks + undid my removal of a slash + fixed my previous use of va() 2019-01-13 20:32:39 +01:00
JBerg
be8bab6603 added feature to delete savegames 2019-01-13 20:32:39 +01:00
Yamagi Burmeister
7d9016510e Fix snd_restart. it should restore the OGG playback state.
My solution to this problem is somewhat hacky. A newly added function
OGG_SaveState() can be called to save the state and OGG_RecoverState()
at a later time to restore it. There's only one state and it works
only iff OGG is state playing.

This closes #347.
2019-01-05 19:26:50 +01:00
Yamagi Burmeister
ec6e0ee392 Provide a write callback to cURL.
If we're passing file handles to libcurl to write the data into, the
game may crash under Windows due to incompatible C runtimes between cURL
and quake2. This is even mentioned in the official cURL doku.
2019-01-03 17:42:22 +01:00
Yamagi Burmeister
2199b67a39 Limit the number of parallel downloads to just 1.
Since the moment I took a very first look at the download code I wasn't
a friend of parallel downloads. There're several reasons for that:

- Parallel downloading needs some ugly hacks. For example downloading a
  pak file has a high chance to make asset downloads running in parallel
  unnecessary.
- Parallel downloads are hard to debug.
- There's just no need for them. I've tested several connection, 1
  GBit/s LAN, 50 MBit/s DSL, 6 MBit/s DSL, and there wasn't a
  significant difference between 1, 4 or even 16 parallel downloads.

I'm leaving the parallel download code in place. I someone really wants
parallel downloads he can bump the MAX_HTTP_HANDLES define.
2019-01-03 17:40:06 +01:00
Ivan Pozdnyakov
d43a77029c
Fixed menu code to correctly parse maps.lst file. 2018-12-22 01:14:47 -05:00
Yamagi Burmeister
95c1bb9972 Some alterations to the libcurl search pathes.
- On Linux try libcurl.so last, because that one is for linking only.
- Support libcurl.dll on Windows.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
537e6d8de3 Port the server side of HTTP downloading from q2dos. 2018-12-20 18:01:38 +01:00
Yamagi Burmeister
5b44c9f3b4 Make the (new and old) download code UTF-8 compatible.
- Replace all remove() with Sys_Remove().
- Implement Sys_Rename() and replace all rename() with it.

This is believed to close #348.
2018-12-20 18:01:38 +01:00
Daniel Gibson
49bb6bf9f0 Don't leak download queue entries, remove them as soon ans file is done.
Until now download queues entries were created for each file, but only
removed in the unlikely event of changed download server. This leaked
about 4200 byte per file. Fix this by:

- Create a new function CL_RemoveFromQueue() that removes a queue entry
  and call it everytime when a download either finished, failed or
  aborted.
- Retire the 'download done' state, just the queue entries associated
  with a download handle to NULL to communicate that the handle is
  unused.
- Cleanup the full queue at shutdown.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
da8bb7f7ee Add header guards and all necessary includes to download.h. 2018-12-20 18:01:38 +01:00
Yamagi Burmeister
f0d244e7b4 Rename cl_http.c to curl/download.c and http.h to download.h.
This is more in line with our file structure and other changes that
added functionality to the client.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
c0a6e4270f Load libcurl.so at runtime.
Loading libcurl at runtime instead of linking it at compile time makes
things a lot easier and more reliable on Windows. On other platform
libcurl can be installed as optional dependency instead as an hard one.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
cd1b67e489 Whitespace and indention cleanups to the HTTP download code. 2018-12-20 18:01:38 +01:00
Yamagi Burmeister
0ad406a95f Rework HTTP download console output.
We're printing only the two relevant informations: A download was queued
and a download finished or failed. That's enough to see what's going on
and not too noisy.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
29f9f48a06 Remove canceling of all downloads if the bsp failed to download...
...and fix the bugs, that were worked around with that crap, instead.
This removes some corner cases like cancelation of all HTTP downloads
and fallback to UDP if too many 404 errors were generated. If this is
still a problem in reality - for example HTTP servers blocking the
client after too many 404 or even crashing HTTP server - fix the server
and don't force the clients to work around that.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
7f085db431 Remove prioritization of pak file download.
We aren't in 1997 anymore, todays broadband connections are fast enough
to handle multiple large files. This may download some assets twice if
the server provides both a pak file with all assets and the assets as
plain files.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
df82598984 Rewrite memory buffer used by CURL.
There's no need to parse the HTTP header on our side of things, CURL can
do that. And the old buffer code was overcomplicated, simplify it. While
at it switch to normal malloc().
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
9ba97177ea General cleanup of the ported download code.
- A lot of style fixes.
- Remove unused code.
- Simplify things.
- Fix some obvious bugs.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
3a24b9d6cf Remove the download speed calculation.
While the download speed calculations may be useful their implementation
is crappy and the integration into the console is rather fragile. If we
really want to support the progress bar with HTTP downloads this needs
to be reimplemented.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
f51661133d Fix URL generation.
The URL generation logic was buggy, it took the local fs_gamedir into
account when determining the files path on the server. That could have
worked in r1q2 or q2dos since they assume that the executable dir is
also the config dir. But it breaks in YQ2 were the executable dir and
the config dir differ.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
5d9aefd4ef Implement missing client interfaces.
These are:
- CL_ResetPrecacheCheck(): Resets the precacher, forces it to reevaluate
  which assets are available and what needs to be downloaded.
- FS_FileInGamedir(): Checks if a file (and only a real file, not
  somthing in a pak) is available in fs_gamedir.
- FS_AddPAKFromGamedir(): Adds a pak in fs_gamedir to the search path.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
0a94a8ee92 Port the HTTP / CURL download stuff from q2dos.
This is a very first cut:
* It compiles
* It doesn't crash

What's missing:
* cmake integration
* CURL should be loaded dynamically
* Integration between download code and filesystem
* Likely UTF-8 stuff
* cl_http.c needs cleanup
* Windows support
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
aa57ec9f7b Fix oversight in last commit, the '/ 2' is evil. 2018-11-22 21:15:09 +01:00
Yamagi Burmeister
e137ff1168 Fix stupid bug in brush model indix block size calculations.
We're taking indices and converting them to pointer relative to the
hunks base. Yes, that's dirty. Since the indices are stored as 32 bit
values and hunks are generally small using 32 bit pointers is enough,
even on 64 bit platforms. So the code took the size of void* / 2...
See the problem? Yes, that's not a good idea on 32 bit platforms. Bite
the bullet and just take the size of void*. Shouldn't be a problem,
because the indices are the first thing that's loaded and the hunk is
trimmed right after it anyways. If, and just if, we really need each and
every byte in the early stages of map loading we need two cases. One for
64 bit and one for 32 bit.

This fixes issue #346. Kudos to @ricardosdl for the analysis.
2018-11-22 17:41:55 +01:00
Denis Pauk
25498be7ca Support retextured images.
Code based on www.quakewiki.net/quakesrc/39.html
Code ignores skin images, and is disabled by default.
2018-11-12 23:02:23 +02:00
Denis Pauk
0307361101 Remove unused cvars 2018-11-12 23:01:08 +02:00
Denis Pauk
1b2708c06e cppcheck fixes.
In src/backends/unix/network.c:
* line 181: Assignment of function parameter has no effect outside the function. Did you forget dereferencing it?
* line 276: The scope of the variable 'tmp' can be reduced.
* line 665: The scope of the variable 'mcast_addr' can be reduced.
* line 665: The scope of the variable 'mcast_port' can be reduced.
* line 666: The scope of the variable 'error' can be reduced.
* line 775: The scope of the variable 'i' can be reduced.

In src/backends/windows/network.c:
* line 186: Assignment of function parameter has no effect outside the function. Did you forget dereferencing it?
* line 287: The scope of the variable 'tmp' can be reduced.
* line 707: The scope of the variable 'mcast_addr' can be reduced.
* line 707: The scope of the variable 'mcast_port' can be reduced.
* line 1049: The scope of the variable 'err' can be reduced.
* line 1163: The scope of the variable 'i' can be reduced.

In src/client/menu/menu.c

arrayIndexOutOfBounds:
* line 1921: Array 'creditsIndex[256]' accessed at index 256, which is out of bounds.

variableScope:
* line 332: The scope of the variable 'item' can be reduced.
* line 533: The scope of the variable 'x' can be reduced.
* line 533: The scope of the variable 'y' can be reduced.
* line 838: The scope of the variable 'b' can be reduced.
* line 864: The scope of the variable 'b' can be reduced.
* line 1910: The scope of the variable 'n' can be reduced.
* line 2199: The scope of the variable 'str' can be reduced.
* line 2812: The scope of the variable 'length' can be reduced.
* line 2813: The scope of the variable 'i' can be reduced.
* line 3838: The scope of the variable 'c' can be reduced.
* line 4112: The scope of the variable 'scratch' can be reduced.
* line 4181: The scope of the variable 'i' can be reduced.
* line 4345: The scope of the variable 's' can be reduced.

In src/game/player/hud.c

arrayIndexOutOfBounds:
* line 132: Array itemlist[43] accessed at index 255 which is out of bounds.
Itemlist assigned only once, and has only 43 items, better ignore unexisted items.

variableScope:
* line 82: The scope of the variable 'n' can be reduced.
* line 217: The scope of the variable 'x' can be reduced.
* line 217: The scope of the variable 'y' can be reduced.
* line 218: The scope of the variable 'cl' can be reduced.
* line 583: The scope of the variable 'cl' can be reduced.
2018-11-12 22:59:10 +02:00
Yamagi
bbdd3f1d60
Merge pull request #342 from earth-metal/master
Add support for CTF options to "start network server" menu.
2018-11-07 18:04:22 +01:00
Yamagi Burmeister
3c21575a01 Describe the limitiations of GLimp_GetRefreshRate(). 2018-11-06 12:26:56 +01:00
earth-metal
77dbf36b40 Add support for CTF options to "start network server" menu.
Allow numeric input of "capturelimit" cvar and toggling of CTF dmflags
via menu system.
2018-11-01 21:50:31 -04:00
earth-metal
feeba61721 Fix typo preventing display of Rogue "dmflag" options. 2018-11-01 08:58:18 -04:00
Yamagi Burmeister
861cf25ddf Fix ogg_shuffle display in menu.
In issue #296 it was pointed out that the menu shows ogg_shuffle
always as disabled, even if it's set to 1. This was an oversight,
the menu code was still checking the ogg_squence cvar removed in
the big OGG/Vorbis refactoring. Update it to match reality.
2018-10-22 20:25:16 +02:00
Denis Pauk
64babe9422 Allocate hunk equal to filesize 2018-10-08 22:29:45 +03:00
Denis Pauk
659d8e15c5 Add support for 32k+ marksurfaces in map 2018-10-08 22:29:45 +03:00
Denis Pauk
316918c29b cleanup code in sw_surf 2018-10-08 22:29:45 +03:00
Denis Pauk
26e9c6e5c4 cleanup code in sw_polyse 2018-10-08 22:29:45 +03:00
Denis Pauk
c30cffd1ed Use local currentmodel 2018-10-08 22:29:45 +03:00
Denis Pauk
0ff5dc804d Use local currententity 2018-10-08 22:29:45 +03:00
Yamagi Burmeister
2909710b8c Don't stop processing dlights if one of them had a radius of 0.
I don't know if this has any visible effects. This was reported in
issue #333.
2018-09-30 19:59:07 +02:00
Yamagi Burmeister
69b6e5ad48 Redo 95bbb99 in a more correct manner.
1) Do not increment the frame rate returned by SDL by 1. Incrementing
   is unnessecary, more or less up to date versions on Nvidias, AMDs
   and Intels GPU driver on relevant platform return an value that's
   either correct or rounded up to next integer. And SDL itself also
   rounds up to the next integer. At least in current versions. In fact,
   incrementing the value by one is harmfull, it messes our internal
   timing up and leads to subtile miss predictions. Working around that
   in frame.c would add another bunch of fragile magic... So just do
   it correctly. If someone still has broken GPU drivers or SDL versions
   that are rounding down the could set vid_displayrefreshrate.
2) The calculation of the 5% security margin to pfps in frame.c was
   wrong. It didn't take into account that rfps can be slightly wrong
   in the first place, e.g. 60 on an 59.95hz display. Correct it by
   comparing against rfps including the margin and not the plain value.
2018-09-30 19:47:48 +02:00
Yamagi Burmeister
70ee5bcc4a Revert "Rework GLimp_GetRefreshRate(), fix a stupid bug."
After some pondering I realised that the changes was stupid. It
introduces some new subtile bugs, for example in some cases SDL
still rounds 59.95hz down to 59hz...
2018-09-30 18:42:21 +02:00
Yamagi Burmeister
95bbb9900b Rework GLimp_GetRefreshRate(), fix a stupid bug.
In the old world GLimp_GetRefreshRate() was called once at renderer
startup. Now in the new world with SDL 2.0 only it's called every frame
and thus the target framerate git increased by one every frame... That
lead to subtile timin problem in case that the vsync is enabled.

While here remove the hack added for some Windows GPU drivers by AMD.
Older versions returned 59 on 59.95hz displays, leading to small timing
problems. This is fixed in newer version so we don't need to work around
it. Removing the hack gives us somewhat more overall timing precision.

If someone really needs the hack vid_displayrefresh can be set to 60 to
get the old behaviour.
2018-09-08 19:05:10 +02:00
Yamagi Burmeister
a896e17efa Fix a compiler warning, do not assign a variable to itself. 2018-09-05 17:07:42 +02:00
Yamagi
7b0bcec11e
Merge pull request #317 from 0lvin/render_speedup_review
Cleanup code in soft render
2018-09-05 14:39:24 +02:00
Denis Pauk
c45e1e7f8c correct check for zstep 2018-09-04 22:51:20 +03:00
Yamagi Burmeister
0caefdecf2 Always print the full help for the 'ogg' command. 2018-09-04 14:17:49 +02:00
Denis Pauk
6adc4cc81c Revert "rename gl_anisotropic to r_anisotropic"
This reverts commit 49af62477a.
2018-09-03 21:22:01 +03:00
Denis Pauk
e265252170 Remove unused function parameter 2018-09-03 21:16:36 +03:00
Denis Pauk
a52db8bc85 support for lower version of SDL 2018-09-03 21:16:05 +03:00
Denis Pauk
1a0c6fe05c add check for overwrite triangle_spans 2018-09-03 21:15:58 +03:00
Denis Pauk
3b4c6c41c1 get rid separate surface usage 2018-09-03 21:15:51 +03:00
Denis Pauk
136d6890ff small cleanups 2018-09-03 21:15:40 +03:00
Denis Pauk
aa3a688495 remove all aliases for vid.width 2018-09-03 21:15:33 +03:00
Yamagi Burmeister
f15d4181eb Do not throw last 12 seconds of a Vorbis file away when looping.
Until now we just called OGG_Stop() as soon as we read the last samples
from a Vorbis files. OGG_Stop() flushed all unplayed samples (about 12
seconds of playback) from the OpenAL playback queue... Instead just set
our internal state of STOPPED, open the next file and be done.
2018-09-02 09:39:57 +02:00
Denis Pauk
01ca7db6f4 remove unused functions 2018-08-28 23:22:40 +03:00
Denis Pauk
2812ef30dd Reuse GLimp_InitGraphics for create window 2018-08-28 23:22:40 +03:00
Denis Pauk
8fc5bafb64 move render prepere staff to separate function 2018-08-28 23:22:40 +03:00
Denis Pauk
f1bf4d2b44 Directly use of currentpalette
* remove conversion currentpalette to SDL pixel format
* create textures with RGBA format with same struct as currentpalette
2018-08-28 23:22:40 +03:00
Yamagi Burmeister
25a1f08656 Merge branch 'buildcleanup' 2018-08-15 17:48:30 +02:00
Yamagi
135b243b74
Merge pull request #314 from 0lvin/render_speedup_review
Render speedup
2018-08-15 17:41:23 +02:00
Yamagi Burmeister
93aa8270ad No need to print that the renderer as retexturing support.
Retexturing support has been non-optional for years.
2018-08-14 11:53:35 +02:00
Yamagi Burmeister
cf09fb2a99 Remove support for static linked OpenAL.
We haven't used that for years and it just complicates things.
2018-08-14 11:51:55 +02:00
Yamagi Burmeister
daf3dc6f41 Remove ZIP compile time option.
Having ZIP optional only complicates things and is unnecessary now that
the dependency to zlib is gone.
2018-08-14 11:12:38 +02:00
Yamagi Burmeister
0264c6d946 Remove DOGG compile time option.
Having OGG optional only complicates things and is unnecessary now that
the dependencies to libvorbis and libogg are gone.
2018-08-14 10:40:50 +02:00
Denis Pauk
49af62477a rename gl_anisotropic to r_anisotropic 2018-08-10 23:33:46 +03:00
Denis Pauk
ba38bf4f88 Small cleanups
* Use window width as maximum value for spancount
* Reuse GLimp_Shutdown
2018-08-10 23:04:19 +03:00
Denis Pauk
6e8170e187 Check possible span scan step by zindex 2018-08-10 22:59:29 +03:00
Denis Pauk
59133c77aa use zvalue_t for z values 2018-08-10 22:59:29 +03:00
Denis Pauk
48f67501fc Fix pitch compare vid.width 2018-08-10 22:59:29 +03:00
Denis Pauk
6affc10ceb use only one increment in loop 2018-08-10 22:59:29 +03:00
Denis Pauk
0d69454b54 revert nack a little 2018-08-10 22:59:29 +03:00
Denis Pauk
a3406b38a3 use memset for copy pixel to pixel range 2018-08-10 22:59:29 +03:00
Denis Pauk
51e09331e2 get rid extern aliastriangleparms 2018-08-10 22:59:28 +03:00
Denis Pauk
61d7b187c0 make more varibles local 2018-08-10 22:59:28 +03:00
Denis Pauk
3c89fec026 fix comments 2018-08-10 22:59:28 +03:00
Denis Pauk
861e47c26e use short names for D_DrawTurbulentSpan 2018-08-10 22:59:28 +03:00
Denis Pauk
3ed798ae70 use func params instead static variables 2018-08-10 22:59:28 +03:00
Denis Pauk
f1b8571369 Use common step for span scanning 2018-08-10 22:59:28 +03:00
Denis Pauk
8905763c01 show * mark for used models/images in modellist/imagelist 2018-08-10 22:59:28 +03:00
Denis Pauk
1e3e853bc7 Optimize D_DrawSpans16 for horisontal/vertical spans 2018-08-10 22:59:28 +03:00
Denis Pauk
b46a615eb8 use more simple loop for vertical/horisontal spans 2018-08-10 22:59:28 +03:00
Denis Pauk
4093a49f0f use const for ro parameters 2018-08-10 22:59:28 +03:00
Denis Pauk
e748ed1af8 move code for instert new span to list top to separate function 2018-08-10 22:59:28 +03:00
Denis Pauk
d9eb925b33 move Mod_RadiusFromBounds to shared code 2018-08-10 22:59:28 +03:00
Denis Pauk
78383add97 move varibales to scope 2018-08-10 22:59:28 +03:00
Yamagi Burmeister
be9942d516 Fix window handling when switch from gl to soft renderer.
Make sure that the window is destroyed at gl renderer shutdown and
recreated by the soft renderer. Don't deinitialize SDL in the
softrenderer, that's done by vid.c. And make sure that we start the soft
renderer with a clean GL state.
2018-08-10 12:19:15 +02:00
Yamagi Burmeister
e7fa5518a9 Replace zlib dependency by miniz single header library.
I've chosen the minimal invasive way for this:

  * Import miniz and remove -lz linker flags.
  * Create a short header minizconf.h roviding everything we need
    originally defined by zconf.h and not provided by miniz.
  * Replace zlib.h with miniz.h and minizconf.h.
2018-08-10 10:24:25 +02:00
Yamagi Burmeister
b802c4bc2e Some cleanup now that ogg is the only music backend.
* Rename all cd* functions to ogg*.
* Rename the cd_shuffle cvar to ogg_shuffle.
* Remove some unnessecary #ifdef.
2018-08-08 15:17:21 +02:00
Yamagi Burmeister
79e8c1377b Replace libvorbisfile with stb_vorbis single header lib.
This is (or at least should) work exactly the same a before but
saves us the dependencies to libogg, libvorbis and libvorbisfile.
2018-08-08 15:05:23 +02:00
Yamagi Burmeister
10bdaaec06 Move stb_image_write.h into vid. It's used there, only. 2018-08-07 11:45:26 +02:00
Yamagi Burmeister
1fcd0324e0 Move the icon into the vid interface.
It's only used there.
2018-08-07 10:30:11 +02:00
Yamagi Burmeister
d328aa9a9e Move rev.h into the client. 2018-08-07 10:20:02 +02:00
Yamagi Burmeister
5bff7e1568 Move refresh.c into the client and rename to glimp_sdl.c.
The GL backends have been an integral part of the vid interface for
years.
2018-08-07 10:08:20 +02:00
Yamagi Burmeister
b805b4e044 Move vid.c and dependencies into the client.
The vid interface has been exclusive to the client for years, trace
that in the file hierarchy.
2018-08-07 10:00:21 +02:00
Yamagi Burmeister
61400d1ae8 Move input.c and input.h into the client and rename to sdl.c.
The input system backend was once used in the client and the renderers,
but for some years now it has been an integral part of the client only.
Move it there.
2018-08-07 09:43:34 +02:00
Yamagi Burmeister
956902538f Move sound.c into the sound system source and rename to sdl.c.
The OpenAL backend was already part of the sound system source. And
there's no need for the SDL backend to be part of the generic backends.
2018-08-07 09:31:08 +02:00
Yamagi Burmeister
5501c38736 Move qal.c and qal.h to the other sound system sources.
The OpenAL backends used only by the sound system, there no need to
have them in the generic part of the sources.
2018-08-07 09:23:07 +02:00
Yamagi Burmeister
63350c418e Clearify some FIXMEs and bump the renderer API.
The last commits did some bigger changes to the interaction between the
GL renderers and the client. The code is now SDL 2.0 conformant, window
and context creation are strictly distinct operations. SDL is only
initialized when necessary. Since this broke the client <-> renderer
API, bump it's version.

There a lot of things left to do for dark and cold winter evenings:

* The software renderer implements it's own window handling and
  reinitialized SDL whenever vid_restart is called. This is highly
  problematic.
* vid_fullscreen is abused to communicate changes to renderer config
  throughout the code. That's a very ugly, messy and potential very
  problematic hack. But not easy to remove.
* Some funtion calls between the client and the renderer are
  unnecessary.

The changes to the client <-> renderer interaction fixed issue #302.
2018-07-31 18:57:13 +02:00
Yamagi Burmeister
bef21c101e General cleanup of vid.c
* Reformat code and reorder functions.
* Remove unnecessary stuff.
* Move everything possible into headers.
* Implement a clean fallback logic, gl3 -> gl1 -> soft.
2018-07-31 14:32:13 +02:00
Yamagi Burmeister
9a53a681bb Apply the same cleanup to gl1_sdl.c as to gl3_sdl.c
* Sync both files as much as possible.
* Another round of general cleanup.
* Fix stencil tests.
* Simplify gamma handling, hardware gamma is now default.
* Support new client <-> renderer API.
2018-07-31 14:32:13 +02:00
Yamagi Burmeister
b8a062e36b Cleanup and refactor gl3_sdl.c.
* Another round of general cleanup.
* Introduce gl3_libgl cvar to force a libGL.
* Fix stencil buffer tests.
* Further untangle window <-> context stuff.

The window is now fully at client side, the context at renderer side.
This is another break of the renderer API. And at least GL1 needs to
track this, it's broken for now.
2018-07-31 14:32:13 +02:00
Yamagi Burmeister
5db73a795b General cleanup of refresh.c.
* Even more syntax and code style fixes.
* Rename functions to match their actual purpose.
* Fix comments.
* SDL initialization and shutdown is now client side only. With
  SDL 1.2 finally gone there's no need to involve the renderers
  in it.

This breaks the client <-> renderer API. I haven't bumped the API
version with this commit because there're likely more changes when
I'm going through the renderer side of things. The VID backend also
needs a lot of love...

It might be a good idea to move this SDL backend files into the client
and rename them. We'll decide that at a later time.
2018-07-31 14:32:13 +02:00
Yamagi Burmeister
3d9674f3b8 Remove last remnants of SDL 1.2 support troughout the code. 2018-07-31 14:32:13 +02:00
Yamagi Burmeister
ba4706c608 Remove SDL 1.2 from the software renderer. 2018-07-31 14:31:17 +02:00
Yamagi Burmeister
b9c8a8533e Remove SDL 1.2 support from the menu. 2018-07-31 14:24:28 +02:00
Yamagi Burmeister
f03e95901f Remove SDL 1.2 support from the GL3 SDL backend.
Do some minor cleanup, while here.
2018-07-31 14:24:28 +02:00
Yamagi Burmeister
0e512a8f5d Some cleanup to the GL1 SDL backend now that's SDL 1.2 is gone. 2018-07-31 14:24:28 +02:00
Yamagi Burmeister
5ec3bcdb49 Let SDL calculate the gamma ramp now that X11GAMMA and SDL 1.2 are gone. 2018-07-31 14:24:28 +02:00
Yamagi Burmeister
1b68da9a0f Remove SDL 1.2 from the GL1 SDL backend. 2018-07-31 14:24:28 +02:00
Yamagi Burmeister
15898a2330 Remove CDA support from code. 2018-07-31 14:24:28 +02:00
Yamagi Burmeister
759bc1be18 Remove X11GAMMA support from code.
This just deletes the X11GAMMA code. It doesn't make use of some
refactoring opportunities that're now possible. That will be done
at a later time.
2018-07-31 14:24:28 +02:00
Yamagi
38a499c335
Merge pull request #313 from 0lvin/edges_limits
Scale edge/surfaces/verts on outof....
2018-07-30 18:46:54 +02:00
Denis Pauk
cf4887c4ba fix issue introduced in e5ef665e:Use more short code in *EdgeSearch 2018-07-30 15:47:00 +03:00
Denis Pauk
27cbd0d4e7 reorder copy vid_buffer to texture. 2018-07-29 15:29:00 +03:00
Denis Pauk
ea27c460f2 move trenslate palette based image to full color texture to separate function 2018-07-29 00:04:10 +03:00
Denis Pauk
a4b011c5fd palette check 2018-07-28 13:57:08 +03:00
Denis Pauk
bec4c4accc change code style 2018-07-25 21:33:10 +03:00
Denis Pauk
2b9b039139 make r_drawsurf local 2018-07-25 17:49:00 +03:00
Denis Pauk
aec8f3fc8b make r_dlightframecount and surfrowbytes local 2018-07-25 17:06:23 +03:00
Denis Pauk
fcae2fcbcd change messages 2018-07-25 15:16:32 +03:00
Denis Pauk
125d6db8b6 code clean up 2018-07-24 23:38:31 +03:00
Denis Pauk
e1a9e7e4e2 add auto reallocate 2018-07-24 17:49:14 +03:00
Denis Pauk
25cb7acda8 Restore allocate buffers on render init 2018-07-24 16:56:42 +03:00
Denis Pauk
a37d6cb07a clean up code 2018-07-24 16:54:43 +03:00
Denis Pauk
6136900fac little speedup 2018-07-24 00:16:31 +03:00
Denis Pauk
f9a77d2d66 Share same Mod_DecompressVis 2018-07-23 17:40:06 +03:00
Denis Pauk
ad771fdd99 more warnings 2018-07-23 17:06:39 +03:00
Denis Pauk
789cd0128a use only allocated finalverts 2018-07-23 16:51:16 +03:00
Denis Pauk
1a5a0922c8 Set bigger limits 2018-07-23 00:34:34 +03:00
Denis Pauk
d36f19fda5 use only allocated surfaces 2018-07-22 17:20:33 +03:00
Denis Pauk
a57b1f9be0 use only allocated edges 2018-07-22 16:50:44 +03:00
Simon McVittie
b9aac1ad9b Fix spelling of "information", and re-word a comment with multiple typos 2018-07-21 12:03:23 +01:00
Ricardo Garcia
d425f40eb6 Fix segfault in OGG_PlayTrack when ogg_enable is set to zero 2018-07-15 09:33:58 +02:00
Yamagi Burmeister
d96a46dc1f Fix stupid bug when scaling the chat input.
The vertical offset must be multiplied with the scale. And not the
scale added onto it... This fixes issue #306.
2018-06-25 09:41:57 +02:00
Yamagi Burmeister
1f4e90e0d3 Don't restart music if track 0 is requested and ogg_ignoretrack0 set. 2018-06-12 19:28:13 +02:00
Yamagi Burmeister
9cf029182a Fix playback when cd_shuffle is 1
Until now, likely since we first introduced OGG/Vorbis playback 9 years
ago, in about 50% of all cases OGG_PlayTrack() was never called if
cd_shuffle was set 1, resulting in missing background music. Add the
missing call. :)
2018-06-12 18:52:36 +02:00
Yamagi Burmeister
653d2bad80 Fix build.
I wonder why I didn't catch this in sunday. For some reason a "make
clean ; make" cycle was necessary. Maybe a corner case that the header
dependencies didn't catch?
2018-06-12 18:42:21 +02:00
Yamagi Burmeister
4a602227d1 Fix shuffle playback and it's menu integration. 2018-06-12 18:22:35 +02:00
Yamagi Burmeister
2406597356 Mark everythings that's local to ogg.c as static. 2018-06-12 18:22:35 +02:00
Yamagi Burmeister
b586f84a3a Combine the various ogg_* commands into a single "ogg" cmd.
While here remove unecessary ogg_init and ogg_shutdown commands. And
some more cleanup.
2018-06-12 18:22:35 +02:00
Yamagi Burmeister
750b37f288 Some general cleanup to the vorbis backend.
* Remove unneccessary global variables.
* Simplify initialization.
* Reorder functions.
2018-06-12 18:22:35 +02:00
Daniel Gibson
c3af040f0c More ogg/vorbis refactoring, supports GOG-style tracks now
also removed lots of code.

Windows support still missing, needs Sys_IsDir() and Sys_IsFile().
2018-06-12 18:22:35 +02:00
Daniel Gibson
781e7c7e12 1. step in OGG refactoring: add OGG_PlayTrack(int track), remove others 2018-06-12 18:22:35 +02:00
Denis Pauk
e5ef665e09 Use more short code in *EdgeSearch 2018-05-20 13:55:04 +03:00
Denis Pauk
466364589d Use constants for x/y/z shifts 2018-05-20 13:55:04 +03:00
Denis Pauk
2412363001 Add some comments from Fabien Sanglard article 2018-05-20 13:55:04 +03:00
Denis Pauk
1ea3fdc1a2 We have enough memory, skip Com_PageInMemory 2018-05-20 13:55:04 +03:00
Denis Pauk
b0b0265e4b Move Surf Search to separate functions 2018-05-20 13:55:04 +03:00
Denis Pauk
4fd37b73ca Define NUM_MIPS=4 instead hardcoded value 2018-05-20 13:55:04 +03:00
fabiensanglard
184ff91453 Added Unreal kernel filtering. 2018-05-20 13:55:04 +03:00
Denis Pauk
96a81f64f9 little speed up 2018-05-20 13:55:04 +03:00
Denis Pauk
f48e3e5b4d Use real height/width instead warp dimensions 2018-05-20 13:55:04 +03:00
Daniel Gibson
1e3135d4fc r_gunfov shouldn't be CVAR_USERINFO, only CVAR_ARCHIVE
this happens when you just copypaste and adapt r_lefthand

also did some minor changes to R_AliasDrawModel in the soft renderer
to make sure alias[xy]scale is reset properly in the early out cases
2018-04-27 23:42:27 +02:00
Daniel Gibson
12a8da7180 r_gunfov for the software renderer 2018-04-21 21:35:13 +02:00
Daniel Gibson
c59c1bfda1 Fix Rogue heatbeam rendering at high FOVs 2018-04-21 20:19:42 +02:00
Daniel Gibson
a5e97682a3 Weapon field of view independent of 'fov': r_gunfov cvar
At high 'fov' values the weapon looked quite distorted.
Now it's rendered with an independent FOV, which looks better.
Note that the 'fov' cvar sets fov_x, while this is based on fov_y
(which is calculated from fov_x), so it's indeed different values:
r_gunfov seems to correspond to fov 90.
We use r_gunfov 80 as default, because it looks better.
2018-04-21 18:23:32 +02:00
Denis Pauk
189a34e707 Add custom particle shape by sw_custom_particles.
0 - use rectangle (default shape)
 1 - use hexagon
2018-04-13 23:29:56 +03:00
Denis Pauk
23d25db601 Little different shape of particle 2018-04-10 23:24:53 +03:00
Denis Pauk
14c934762d use one function for any mip levels 2018-04-10 23:13:38 +03:00
Denis Pauk
cd6c686980 Use multiple for particle sizes 2018-04-10 23:09:36 +03:00
Denis Pauk
758ab07a38 look to height instead width 2018-04-10 23:06:54 +03:00
Denis Pauk
14af679b7e Add size checks for WAL load 2018-04-10 22:59:13 +03:00
Denis Pauk
511b73baf9 Particle fixes from q2dos and kmquake
Authors: maraakate <emoaddict15@gmail.com>
         Knightmare <knightmare66@yahoo.com>
2018-04-10 22:59:13 +03:00
Daniel Gibson
3a641c8beb "/currentmap" command that prints the currently loaded map 2018-03-10 16:38:37 +01:00
Yamagi Burmeister
808a208de4 Disconnect when we're connected before starting an new game.
The old code was working only when the client was connected to a local
server. The 'newgame' executed by the menu expands to a 'map', loading
a map ends in SV_InitGame() which calls CL_Drop() on the local client.
That calls CL_Disconnect() and everything is okay.
When the client is already connected to a remote server and no local
server is running the 'map' command spawns a new local server. This
new server thinks "Hey, I'm a new local server and no one is connected
to me. Let's pull the client in!". So it pull the already connected
client onto a new server without disconnecting, smashing it's state.
And everything goes down in flames.

The correct way would be to execute a 'disconnect' right before the
'newgame'. But the 'disconnect' cmd calls CL_Disconnect_f that throws
an ERR_DROP. ERR_DROP is implememted through a longjump(), jumping
around puts the process internal state in ashes... So bite the bullet
and add another hack: Call CL_Disconnect() before executing 'newgame'.
2018-03-07 21:49:58 +01:00
Yamagi Burmeister
ed54fe2364 Fix '/connect $server' while connected to a server. 2018-02-27 19:17:45 +01:00
Yamagi Burmeister
8ff7109b9d Rename forgotten gl_modulate and gl_farsee cvars in the GL3 renderer. 2018-02-25 10:38:04 +01:00
Yamagi Burmeister
2db01319a1 Fix changing the game / mod through the 'game' console command.
The 'game' command was more or less functional after the last commit.
We just need to reset the initialGame (renamed to userGivenGame) so we
don't revert back to the old game at server disconnect.
2018-02-25 10:24:35 +01:00
Daniel Gibson
f0e21e2ab4 Fix writing/loading configs when changing game/mod
When connecting to a multiplayer game that runs a different mod
("game" cvar) than you are, it didn't load the corresponging configs
from the mod, but saved your changes to the config to the mod's config.
Which is doubly useless.
Now when the "game" cvar is changed, the configs are reloaded (from
the right directories for the mod), and when disconnecting the configs
are written, so the changes you did for a mod while playing MP are saved
before game is reset to the game you started with.
2018-02-24 21:00:35 +01:00
Denis Pauk
80616a418e Reuse SWimp_Init from refresh.c 2018-02-14 23:07:20 +02:00
Denis Pauk
b376c7e0d2 correctly exit if have not found console fonts 2018-02-14 23:07:20 +02:00
Denis Pauk
24b7cb3529 Remove unused K_WORLD_* from Q_KEYS 2018-02-14 23:07:20 +02:00
Denis Pauk
c68fd0be5b Add 3d haptic/SDL_HAPTIC_CARTESIAN with distance and orientation 2018-02-14 23:07:20 +02:00
Yamagi Burmeister
ec1733fb97 Rename 'intensity' to 'gl1_intensity', 2018-02-14 09:35:54 +01:00
Yamagi
f0240af308
Merge pull request #278 from DanielGibson/remember-addressbook
Don't forget entries of Multiplayer "Address Book"
2018-02-13 17:35:59 +01:00
Daniel Gibson
c2061e8c83 Use const char* instead of char* in NET_StringToAdr() 2018-02-12 13:37:58 +01:00
Daniel Gibson
1c7b02cc85 Make sure Q2 doesn't "forget" contents of server "address book"
The problem was that the cvars were only initialized (with CVar_Get())
if you opened the address book menu.
So if you start (and possibly run) and quit the game /without/ opening
that menu (or at least the "join network server" menu), the game will
not save those cvars to the config when it next writes it.

To prevent this, *always* initialize the cvars in M_Init().
2018-02-12 01:03:06 +01:00
Yamagi Burmeister
a1aac4e56d Fix stupid bug in e30f824. :(
It's VectorCopy(src, dest) and not the other way round. Clion noticed
that, but neither clang nor gcc complained that tmp was used
unitialized.
2018-02-07 19:02:13 +01:00
Yamagi Burmeister
582c1062cb Fix an "Unused variable" warning. 2018-02-05 18:29:29 +01:00
Yamagi Burmeister
ba4f91f619 Fix a compiler warning on 32 bit.
Hopefully we'll never allocate more than 2^32 bytes of memory for
surfaces. :)
2018-02-05 18:27:34 +01:00
Yamagi Burmeister
37ea3e1d58 Introduce a wrapper Q_fopen() and replace fopen() with it.
On Unix platforms unicode is implemented through UTF-8 which is
transparent for applications. But on Windows a UTF-16 dialect is
used which needs alteration at application side. This wrapper is
another step to unicode support on Windows, now we can replace
fopen() by a function that converts our internal UTF-8 pathes to
Windows UTF-16 dialect.

This is a noop for Unix platforms. The Windows build is broken,
the compiler errors out in shared.h. This will be fixed in a
later commit.

Caveats:
* fopen() calls in 3rd party code (std_* and unzip) are not replaced.
  This may become a problem. We need to check that.
* In the Unix specific code fopen() isn't replaced since it's not
  necessayry.
2018-02-05 07:43:26 +01:00
Yamagi Burmeister
b3562015b0 Remove Sys_SendKeyEvents().
That function did nothing, we can just call IN_Update() directly...
2018-02-04 16:45:32 +01:00
Yamagi Burmeister
e9615608a8 Remove CompareAtributes().
There's no need to exclude directories from search by flags. In fact
the Unix backend has worked nicely for years without it... Sadly we
can't remove the now superfluous 'canhave' and 'musthave' attributes
from Sys_FindFirst() and Sys_FindNext() since they're defined in
shared.h and may be used from custom game DLLs.
2018-02-04 11:49:03 +01:00
Yamagi Burmeister
a496ad8d62 Update HandmadeMath.h to it's latest version. 2018-02-03 08:41:46 +01:00
Yamagi Burmeister
5763784c20 Update stb_image.h to it's latest version. 2018-02-03 08:38:32 +01:00
Yamagi Burmeister
20f49f515b Don't compare a qboolean against an integer.
That only works by accident.
2018-02-03 08:36:07 +01:00
Yamagi Burmeister
21fcb48565 Fullscreen has been an integer for some time now.
At least since we introduced support for mod changing and for scaling
fullscreen.
2018-02-03 08:33:16 +01:00
Denis Pauk
d3f93e6786 Clean up unused code 2018-01-21 22:39:02 +02:00
Denis Pauk
9d9dd6b02a Fix typo 7ace8c9116 2018-01-21 22:39:02 +02:00
Denis Pauk
bf19c8b50c fix -O3 warning. Fix indexes in vtx.
Loop 'for ( i = 0; i < 3; i++ )' sets values to vtx[0..2]. So next index must be 3(instead 4) and
loop 'for ( i = 16; i >= 0; i-- )' will set vtx[3..(18*3-1)].

=====
src/client/refresh/gl/r_light.c: In function ‘R_RenderDlight’:
src/client/refresh/gl/r_light.c:76:21: warning: iteration 16 invokes undefined behavior [-Waggressive-loop-optimizations]
    vtx[index_vtx++] = light->origin [ j ] + vright [ j ] * cos( a ) * rad
    ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + vup [ j ] * sin( a ) * rad;
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/client/refresh/gl/r_light.c:65:2: note: within this loop
  for ( i = 16; i >= 0; i-- )
  ^~~
=====
2018-01-21 22:39:02 +02:00
Yamagi Burmeister
472f55c5bf Move the softrenderer constants into out constants/ dir. 2018-01-11 11:15:11 +01:00
Yamagi Burmeister
5592da9206 Rename all soft renderer files from r_* to sw_*. 2018-01-11 11:09:00 +01:00
Yamagi Burmeister
0e8b58952a Rename the gl/ directory to gl1/.
This is not strictly necessary but since we're calling it GL1 let's
stay consistent between the name and the directory structure.
2018-01-11 10:58:32 +01:00
Yamagi Burmeister
d21fbeb932 Rename all GL1 files from r_* to gl1_*. 2018-01-11 10:49:08 +01:00
Yamagi Burmeister
17f289c761 There's no need for the softrenderer to be build conditionally.
We want to build the softrenderer each time and on all platforms.
Building it only at user request will lead to code rot.
2018-01-10 10:33:24 +01:00
Yamagi Burmeister
1ed7762edd Implement custom modes in the software renderer.
This is mostly the same approach as in GL1. I'm not quite sure if the
software rasterizer can work with all aspects and the like but I wasn't
able to crash it by trying several random resultions.
2018-01-09 19:38:00 +01:00
Yamagi Burmeister
cf03e755d3 Implement r_vsync for the softrenderer.
Whenever the r_vsync cvar is changed recreated the SDL renderer with the
appropriate flags.
2018-01-09 18:44:55 +01:00
Yamagi Burmeister
3df860983f Implement r_modulate in the software renderer.
This is the same implementation as in GL1. In fact the code was
basically there, only the cvar itself was missing. Maybe for performance
reasons?
2018-01-09 18:23:29 +01:00
Yamagi Burmeister
e01e9a0b94 Rename gl_ztrick to gl1_ztrick. 2018-01-09 15:58:05 +01:00
Yamagi Burmeister
24b014715f Rename gl_texture*mode to gl1_texture*mode. 2018-01-09 15:54:27 +01:00
Yamagi Burmeister
b87465886e Rename gl_swapinterval to r_vsync. 2018-01-09 15:01:06 +01:00
Yamagi Burmeister
74ac58eb5a Rename gl_stereo* to gl1_stereo*. 2018-01-09 14:51:59 +01:00
Yamagi Burmeister
70ca5b2ade Rename gl_saturatelightning to gl1_saturatelightning. 2018-01-09 14:39:42 +01:00
Yamagi Burmeister
aa6c1826db Rename gl_round_down to gl1_round_down. 2018-01-09 14:36:51 +01:00
Yamagi Burmeister
6c880bcf1f Rename gl_polyblend to gl1_polyblend. 2018-01-09 14:34:27 +01:00
Yamagi Burmeister
bbe4fe0b68 Rename gl_pointparameters to gl1_pointparameters. 2018-01-09 14:31:45 +01:00
Yamagi Burmeister
be94b5612f Rename gl_picmip to gl1_picmip. 2018-01-09 14:29:02 +01:00
Yamagi Burmeister
171e592693 Rename gl_particle* to gl1_particle*. 2018-01-09 14:26:11 +01:00
Yamagi Burmeister
4061e85cd7 Rename gl_palettedtexture to gl1_palettedtexture. 2018-01-09 14:19:00 +01:00
Yamagi Burmeister
f0c4b4fd14 Rename gl_overbrightbits to gl1_overbrightbits. 2018-01-09 14:16:13 +01:00
Yamagi Burmeister
526904ca03 Rename gl_modulate to r_modulate. 2018-01-09 14:09:34 +01:00
Yamagi Burmeister
11ad28b711 Unify gl_mode and sw_mode in r_mode. 2018-01-09 14:03:45 +01:00
Yamagi Burmeister
78ff99dd86 Rename gl_polyblend to gl1_polyblend and unite *_lockpvs to r_lockpvs. 2018-01-09 09:44:06 +01:00
Yamagi Burmeister
3a4496c239 Rename gl_farsee to r_farsee. 2018-01-09 09:32:07 +01:00
Yamagi Burmeister
d2b3030cfe Rename gl_dynamic to gl1_dynamic and remove it from GL3. 2018-01-09 09:29:33 +01:00
Yamagi Burmeister
03098715ee Rename gl_custom* to r_custom*. 2018-01-09 09:25:29 +01:00
Yamagi Burmeister
ae9d7e397f Rename gl_*scale to r_*scale. 2018-01-09 09:19:39 +01:00
Yamagi Burmeister
49fae3c25c Rename gl_clear to r_clear. 2018-01-09 09:09:52 +01:00
Yamagi Burmeister
679e556b4f Rename gl_speeds to r_speeds. 2018-01-06 18:40:50 +01:00
Yamagi Burmeister
214c473de0 Rename gl_novis no r_novis. 2018-01-06 18:38:30 +01:00
Yamagi Burmeister
b453ec5372 Rename gl_norefresh to r_norefresh. 2018-01-06 18:35:03 +01:00
Yamagi Burmeister
f8c71af0cf Rename gl_lightlevel to r_lightlevel. 2018-01-06 18:31:06 +01:00
Yamagi Burmeister
8a83c92044 Rename gl_lerpmodels to r_lerpmodels. 2018-01-06 18:25:53 +01:00
Yamagi Burmeister
55889e4abb Rename gl_fullbright to r_fullbright. 2018-01-06 17:03:59 +01:00
Yamagi Burmeister
773147524b Rename gl_drawworld to r_drawworld. 2018-01-06 16:59:47 +01:00
Yamagi Burmeister
aa4d92e8dd Rename gl_drawentities to r_drawentities. 2018-01-06 16:53:45 +01:00
Yamagi Burmeister
226e5922b9 Rename cl_drawfps to cl_showfps, to be consistent with other cvar.
And ensure that a nice message is printed to the console if anyone
enters the old cvar.
2018-01-06 16:26:28 +01:00
Yamagi Burmeister
7ae9b38da1 Fix video background color if the gl1 or gl3 renderer is used.
Both use truecolor and not paletted colors.
2018-01-03 21:11:08 +01:00
Yamagi Burmeister
4d1b4fa88c Move the soft renderer header files into a subdirectory header/.
This matches the rest of YQ2s source tree.
2017-12-26 09:33:10 +01:00
Denis Pauk
4f68f0e9f1 Fix link issues 2017-12-17 23:18:56 +02:00
Yamagi Burmeister
2c149eda99 Call te soft renderer just "Software" and not "SDL Soft". 2017-12-17 09:59:37 +01:00
Yamagi Burmeister
6129e902b0 Add missing SDL2.h header. 2017-12-17 08:34:42 +01:00
Denis Pauk
60b444834e Set VSYNC 2017-12-11 23:48:12 +02:00
Denis Pauk
4f9833153f Fix background under cinematic and gamma values 2017-12-11 23:33:19 +02:00
sezero
51200b3e6b replace several long casts with intptr_t and include stdint.h for it. 2017-12-11 23:33:19 +02:00
Denis Pauk
c43e944a3d Rebase soft render from https://icculus.org/quake2/
* deleted asm code
* added support 2k+ resolutions
* SDL2 support
2017-12-11 23:33:19 +02:00
Yamagi Burmeister
e429356bd3 Merge branch 'openal_volume' 2017-12-02 16:41:39 +01:00
Yamagi
44da2aca3b
Merge pull request #262 from DanielGibson/fix-win-msaa-crash
Fix crash on Windows if MSAA is set to a value the driver doesn't support
2017-12-02 16:38:26 +01:00
Yamagi Burmeister
e3e5bd1bdd Fix drop in volume when shooting into a Brains power screen.
If too many of these sounds are started in one frame (for example if the
player shoots with the super shotgun into the power screen of a Brain)
things get too loud and OpenAL is forced to scale the volume of several
other sounds and the background music down. That leads to a noticable
and annoying drop in the overall volume.

Work around that by limiting the number of sounds started. 16 was
choosen by empirical testing.
2017-11-30 08:26:39 +01:00
Yamagi Burmeister
e30f824944 Don't cast the array itself but it's content.
This was so broken... Casting the type of an array to silence a
warning... It worked on x86, of course. But gave a SIGBUS on ARM.
Do it right, cast / copy the content of the array into another
array of the correct type. Yeah.

This fixes issue #231.
2017-11-14 17:24:41 +00:00
Yamagi Burmeister
1396741904 Fix possible Vorbis buffer underruns.
There're two possible problems with the calculation of the number of
sound buffers for Vorbis if OpenAL is in use:

* We assume that the (more or less) maximum number buffers is allocated
  during map load. This is not correct if in a multiplayer game a lot of
  custom models with custom sound connect at a later time.
* 64 buffers (about 3 seconds worth of music) may be too low in some
  situations.

Work around this by recalculating the number of buffers if necessary.
We're now reserving about 256 (== 12 seconds) buffers.

This may fix issue #252.
2017-11-04 18:22:53 +01:00
Yamagi
7b6340ddff Merge pull request #245 from 0lvin/back_button_as_escape
Add support for use controller back button as ESC
2017-10-22 18:19:56 +02:00
Yamagi Burmeister
185e89722a Don't unqueue OpenAL raw samples if OpenAL isn't initialized.
This fixes a crash at menu entry if a cinematic is playing when the
game is build with OpenAL support, but s_openal is set to 0.
2017-10-22 17:58:31 +02:00
Thomas Green
f46c46864a Fix a potential OGG issue when OpenAL library is not found. 2017-10-22 17:54:59 +02:00
Denis Pauk
a08374c8cd Add more strict checks for read/write spaces in pcx decode logic 2017-10-21 01:01:41 +03:00
Denis Pauk
61da3dffd1 Add support for use back button as ESC, as example first button in SDL_GAMECONTROLLERCONFIG 2017-10-14 18:58:19 +03:00
Yamagi Burmeister
4bfd1cb9d4 Calculate the correct offset for the cl_drawfps 1 framecounter.
We need to take in account that scaling the characters makes them
bigger, thus they need need to be places depending on the scale and not
at a precaclulated position. This should fix issue #247.
2017-10-11 19:15:11 +02:00
David Carlier
54f9798fc8 name field is not a pointer. 2017-10-01 17:47:06 +01:00
Denis Pauk
e7199f5c41 Add support for joystick/gamecontroller(axis/buttons/hats)/haptic.
By default joystick "in_joystick" and haptic feedback haptic ("joy_haptic_magnitude")
are disabled. And can be anabled by menu in options section. Joystick/Haptic
options are showed only if have found any.

By default axis is mapped in such way:
 * Left X(joy_axis_leftx): sidemove
 * Left Y(joy_axis_lefty): forwardmove
 * Right X(joy_axis_rightx): yaw
 * Right Y(joy_axis_righty): pitch
 * Trigger Left(joy_axis_triggerleft): triggerleft
 * Trigger Right(joy_axis_triggerright): triggerright

Joystick sensitivity varibales:
 * joy_yawsensitivity,
 * joy_pitchsensitivity,
 * joy_forwardsensitivity,
 * joy_sidesensitivity,
 * joy_upsensitivity.

For change joystick axis mapping to gamecontoller axis export SDL_GAMECONTROLLERCONFIG before run,
e.g.: SDL_GAMECONTROLLERCONFIG='<joystick guid>,<joystick name>,leftx:a0,lefty:a1,rightx:a2,righty:a3,'

Add menu navigation by dpad and thresholds:
 * Add threshold for axis (based on ioquake3), 0.15 by defaults.
 * Navigate in menus by dpad (up/down, left/right, any joystick button for enter).

Defaults:
 * in_joystick "0.0"
 * joy_haptic_magnitude "0.0"
 * joy_axis_leftx "sidemove"
 * joy_axis_leftx_threshold "0.15"
 * joy_axis_lefty "forwardmove"
 * joy_axis_lefty_threshold "0.15"
 * joy_axis_rightx "yaw"
 * joy_axis_rightx_threshold "0.15"
 * joy_axis_righty "pitch"
 * joy_axis_righty_threshold "0.15"
 * joy_axis_triggerleft "triggerleft"
 * joy_axis_triggerleft_threshold "0.15"
 * joy_axis_triggerright "triggerright"
 * joy_axis_triggerright_threshold "0.15"
 * joy_forwardsensitivity "1.0"
 * joy_pitchsensitivity "1.0"
 * joy_sidesensitivity "1.0"
 * joy_upsensitivity "1.0"
 * joy_yawsensitivity "1.0"
2017-09-16 14:23:12 +03:00
Yamagi Burmeister
e1ec177dbe Remove miscframe altogether.
Miscframes are coupled to renderframes and are just checking for
renderer changes (very cheap) and advancing CD audio if implemented.
There's no reason not to that at every frame.
2017-09-09 09:39:56 +02:00
Yamagi Burmeister
0c3c2976cf Fix timedemos. 2017-09-06 18:36:51 +02:00
Yamagi Burmeister
c32f4b0e4a Move timing from CL_Frame() to Qcommon_Frame().
This allows us to implement the global timing without an artificial
brake slowing the game unnecessary down. This is only partial working,
more changes and fixes are coming.
2017-09-06 18:36:51 +02:00
Yamagi Burmeister
79f73da62b Implement a much better / more accurate framecounter.
The old framecounter had two problems:

* It measured only the time of the current render frame, not the total
  time spend between the last and the current render frame. Therefor the
  calculated value was too high.
* It was based upon milliseconds and rather inaccurate.

This new frame counter solves both problems. The total time spend
between two render frames is measured and the measurement done in
microseconds.

There're three modes:

* cl_drawfps 1 displayes the average frame rate calculated over the last
  60 frames.
* cl_drawfps 2 displays a nice string with minimal framerate, maximum
  framerate and average framerate. All three values are calculated over
  the last 60 frames.
* cl_drawfps 3 is the same as number 2 but with a second line showing the
  raw values.

TODO:

* Discuss if cl_drawfps should be renamed to cl_showfps. All other
  status displays are named cl_show*.

While at it remove several unsused drawing functions.
2017-09-06 18:36:51 +02:00
Yamagi Burmeister
0fafaf735f Implement a Sys_Microsecond().
This is the same as the well known Sys_Milliseconds() but like the name
suggests with microsecond precision. To be used in the upcoming new
framecounter.
2017-09-06 18:36:51 +02:00
Denis Pauk
95e02d99cf update stb_image.h v2.02->v2.16 2017-09-05 21:30:37 +03:00
Daniel Gibson
0051c6b8d2 If renderer init fails and MSAA is on, disable it and try again
For some fucking reason, if you set an unsupported
SDL_GL_MULTISAMPLESAMPLES value on Windows (at least Win10 with Intel GPU
drivers, there 16 is unsupported), creating the Window and OpenGL context
will succeed, but you'll get Microsofts stupid GDI OpenGL software
implementation that only supports OpenGL 1.1.
Before these fixes, the GL3 renderer would just crash and the GL1 renderer
would fail to load, which caused the game to run in the background:
No Window, no Input, but sound was playing..

Now this problem should be handled properly and if initialization fails,
the rendering backend will be considered not working, and it will
try the gl1 backend next, and if that also fails it'll give up and exit
the game.
2017-09-04 00:21:10 +02:00
Yamagi Burmeister
503ab368a2 Decouple horplus and fov in the video menu.
Until now the video menu enforced:

* fov set to 90 and horplus set to 1
* fov set to something other than 90 and horplus to 0

If the user hat configured another configuration through the console the
menu would reset it, even if only unrelated changes are applied. With
this change horplus is ignored by the menu and only fov is altered. The
rationale behind this is that most users want horplus enabled and all
others can disable it through the console.

This is believed to fix issue #225.
2017-08-30 15:05:02 +02:00
Yamagi Burmeister
7f46d808d2 Second part of Developer_searchpath() removal.
This was forgotten in the first commit. :(
2017-08-07 18:10:32 +02:00
Daniel Gibson
11b3a0515a Merge branch 'searchpath' 2017-08-05 18:40:44 +02:00
Yamagi Burmeister
db2cde0325 Remove disgusting and broken Developer_searchpath() function.
It's mush better and safer to query the "game" cvar instead. It's always
set to the mods name and get's the baseq2 special case right.
2017-08-04 09:20:44 +02:00
Yamagi Burmeister
ff7772f11d Don't let baseq2/pak0.pak/maps.lst shadow baseq2/maps.lst.
While here reimplement the same hack for baseq2/players, lost somewhere
on the way. This is just another searchpath f*ckup. For some reasons
paks have a higher priority than plain directories. We do not want that
for the maps.lst and players/ since id Software decided to put updated
versions of them directly into baseq2/...

This closes issue #217.
2017-08-02 20:08:05 +02:00
Yamagi Burmeister
86fd714788 Allow to choose the fullscreen mode through the menu.
There're 3 possible values:
* no -> vid_fullsceen == 0
* keep resolution -> vid_fullscreen == 1
* switch_resolution -> vid_fullscreen == 2
2017-08-01 18:32:44 +02:00
Yamagi Burmeister
911d225496 Pass an integer to SetMode_impl() instead of a qboolean.
The functions signature was changed several commits ago.
2017-08-01 18:20:30 +02:00
Yamagi Burmeister
3f8be88e84 Fix fullscreen switch through alt-enter. 2017-08-01 18:16:24 +02:00
Yamagi Burmeister
908fd30148 Switch from SDL_WINDOW_FULLSCREEN to SDL_WINDOW_FULLSCREEN_DESKTOP.
SDL_WINDOW_FULLSCREEN changes the display resolution if the requested
resolution is different to the actual resultion. SDL_WINDOW_FULLSCREEN_
DESKTOP doesn't do that, it places a smaller or bigger render area
somewhere inside the fullscreen area. This is somewhat nicer with modern
high resolution flatscreens.

This commit changes vid_fullscreen 1 from SDL_WINDOW_FULLSCREEN to
SDL_WINDOW_FULLSCREEN_DESKTOP. Additional vid_fullscreen 2 is
implemented, it uses SDL_WINDOW_FULLSCREEN to create the fullscreen
area.

TL;DR: Use vid_fullscreen 1 to keep the current resolution or use
vid_fullscreen 2 to switch the resolution.

Implementation details: The whole fullscreen stuff is a horrible mess.
Like generations of hackers before me I'm not desperated enough to clean
it up. GLimp_InitGraphics() is modified to take the fullscreen mode as
an integer and not as a boolean. That's a change to the renderer API.
In GLimp_InitGraphics() the needed SDL fullscreen mode flag is
determined once at the top and just used further down below. That saves
dome SDL1 <-> SDL2 compatibility cruft. IsFullscreen() was modified to
return the actual fullscreen mode and not just if fullscreen is enabled.
2017-08-01 10:08:24 +02:00
Yamagi Burmeister
f311308713 Remove the portable cvar, use is_portable instead.
Having a command line option and a cvar is confusing, especially since
the cvar doesn't make the game really portable.
2017-07-24 18:45:42 +02:00
Yamagi Burmeister
4f803aedd2 Correct some missindentions pointed out by recent GCC versions. 2017-06-30 13:52:09 +02:00
Daniel Gibson
23ea2ea034 GL3: Square particles with cvar gl3_particle_square
if that cvar is set to 1, particles aren't rendered as nice circles, but
as squares, like in the software renderer or in Quake1.

Also documented it in cvarlist.md and fixed some typos there
2017-06-20 18:31:32 +02:00
Daniel Gibson
1da7ff5594 Fix Jennell Jaquays' name in credits and quit screen
the latter is done by identifying the baseq2 pics/quit.pcx in LoadPCX()
and changing some pixels
2017-06-12 18:32:56 +02:00
Daniel Gibson
36c880e105 GL3: Update HandMadeMath.h to include my non-SSE patch
from https://github.com/StrangeZak/Handmade-Math/pull/60

Hopefully fixes #204 (broken build on ARM)
2017-06-09 12:30:44 +02:00
Yamagi Burmeister
f6e3f1f4bc Hide OpenALs doppler effect behind s_doppler.
This allows it to disable the doppler effect by setting s_doppler to 0.
The default value 1 == enabled.
2017-05-25 09:11:47 +02:00
xorw
ff54b3ac1f use correct velocity scaling for openal audio sources 2017-05-20 07:23:24 +02:00
Daniel Gibson
865e97514d GL3: Render Model shadows last, reduce global variables in gl3_mesh.c
The model shadows are rendered after all entities are rendered.
This fixes them making entity brushes below them translucent (#194)

The model rendering code used lots of global variables, many of them
totally superfluous (esp. currententity, currentmodel).
I refactored the code to use less global variables (this was at least
partly needed to render the shadows later).
So this looks like lots of changes, but many of them are just using
"entity" instead of "currententity" or "model" instead of "currentmodel"
2017-05-15 12:34:38 +02:00
Yamagi Burmeister
6119591c6a Fix build with WITH_OPENAL disabled.
This closes issue #192.
2017-05-13 16:53:20 +02:00
xorw
29d109f8ef Finished doppler shift support (added listener's velocity update) 2017-05-10 12:21:56 +02:00
Yamagi
e6d46eb452 Merge pull request #193 from xorw/master
Add partial doppler shift support for 3D audio sources.
2017-05-09 21:38:30 +02:00
xorw
da5aea4929 Add partial doppler shift support for 3D audio sources.
In game noticeable when dodging blaster projectiles or missiles :)

See: https://en.wikipedia.org/wiki/Doppler_shift
2017-05-07 06:14:10 +02:00
Daniel Gibson
9751caac85 GL3: Optimize shadow rendering
now DrawAliasShadow() only uses one draw call per model, pretty much
like DrawAliasFrameLerp()
2017-05-02 06:25:04 +02:00
Daniel Gibson
b45a6d8ef9 GL3: Simple Stencil-Shadows
Like GL1 gl_shadows + gl_stencilshadows: no shadow volumes, but looks
ok apart from standing over edges

The gl_stencilshadows cvar isn't used in GL3, it always uses the stencil
buffer if available (and if gl_shadows != 0)

This still needs performance optimizations: Like the GL1 impl it takes
lots of draw calls per model, it could be done with one per model like
when rendering the actual model.
2017-05-02 06:25:04 +02:00
Yamagi Burmeister
a31c309f68 Scale entity alpha values by 0.666f.
This makes the black hole generator (the rotating circles) in command
looking great again. :)
2017-04-27 17:33:40 +02:00
Daniel Gibson
79e9c8c3d0 GL3: gl3_intensity_2D cvar for HUD, menu, console, video intensity
there have been complaints that those things look too bright, so let
people configure their intensity independently of the general intensity
used for levels, monsters etc.

fixes #189
2017-04-25 15:02:22 +02:00
Daniel Gibson
ff6e7ede26 GL3: Apply scroll offset to x also for transparent scroll surfs
no idea where this is used, but it should be correct this way
2017-04-24 15:22:02 +02:00
Yamagi Burmeister
dd007f340a Apply scroll offset the x coordinate and not to y.
When applied to y SURF_FLOWING textures are scrolled into the wrong
direction. I guess that in GL1 the offset is also applied to x.

This fixes issue #186.
2017-04-24 14:50:00 +02:00
Yamagi Burmeister
df85228ba4 Unqueue raw samples if Vorbis playback is paused.
Without this some samples will loop forever.
2017-04-23 21:55:27 +02:00
Yamagi Burmeister
c0b768278f Fix build with SDL 1.2 2017-04-22 10:24:12 +02:00
Yamagi Burmeister
eb2a11f0b2 Unqueue raw samples when the menu is entered during cinematic playback
When the client is paused (either explicit or by entering the menu or
console) the cinematic is paused, too. Therefor no more sound samples
are generated and added to the playback queue, the existing samples are
played over and over again. Until now these samples weren't hearable,
because OpenAL marked them as processed and AL_StreamUpdate() removed
them from OpenALs playback queues. This changed in the previous commit,
now the stay in OpenALs queue and are hearable.

Fix this by calling AL_UnqueueRawSamples() when the menu or console is
entered during cinematic playback.
2017-04-22 09:50:52 +02:00
Yamagi Burmeister
12fba237c2 Fix raw samples playback with newer openal-soft versions.
Newer openal-soft versions changed the way how the processed buffers are
counted when in AL_STOPPED state. Previously only processed buffers were
counted, now all buffers are. Change our unqueue logic to match this new
behavior.

This was debugged and fixed @xorw, I'm just committing the patch. This
closes issue #185.
2017-04-22 09:42:56 +02:00
Yamagi Burmeister
9bc980811f Remove s_openal_maxgain. It's unused since the previous commit. 2017-04-21 17:14:19 +02:00
Daniel Gibson
fafc4d385e Don't set AL_MAX_GAIN for OpenAL listener
it's only for sources
2017-04-21 15:43:16 +02:00
Yamagi Burmeister
9359d6d51d Some more debug / log output at refresher startup
- Print which library is loaded.
- Print the client version against which the library was build.
2017-04-20 19:57:42 +02:00
Yamagi
78ca79c602 Merge pull request #181 from DanielGibson/render_dll
Resurrect support for render / refresher loadable libraries and use them to implement  an experimental OpenGL 3.2 renderer. Please note that the new renderer interface is somewhat different from the original one, old render libraries will NOT work!
2017-04-18 17:12:40 +02:00
Daniel Gibson
6e7dc59622 GL3: Deactivate STUB_ONCE() messages 2017-04-18 17:08:42 +02:00
Yamagi Burmeister
0608eed7c3 Fix order of the video menu items.
The internal order of the items is determined by Menu_AddItem() and
not the y position. Without this change the cursor didn't jump from
item to item, but from the mode list box to the aspect list box,
skipping the brightness slider.
2017-04-11 14:54:22 +02:00
Yamagi Burmeister
b48108cf37 Add the renderer selection back to the video menu.
Remove the 'viewsize' slider to free one row. Use this row for the new
renderer selection. While at it reorder the items.
2017-04-10 23:15:36 +02:00
Yamagi Burmeister
df86c46e57 Several adjustments to the visual impression.
- Bump vid_gamma to 1.2 in both GL1 and GL3. A default value of 1.0 is
  too dark.
- Lower gl3_overbrightbits to 1.3, the previous value of 1.5 was too
  bright. This can be seen in later units, for example on mine1 some
  textures blended into white.
- Lower gl3_particle_size to 40. A value of 60 may be okay, but with
  gl3_particle_fade_factor 1.2 the particles take up too much screen
  estate in close range combat.

With this changes GL3 looks (at least for me) nearly the same as GL1
rendered through the removed multitexturing path.
2017-04-10 19:28:46 +02:00
Yamagi Burmeister
8316dfe3d9 Change the dynamic light cuttoff from 64 to 52.
64 was the cutoff used by GL1. Testing showed that 52 is better suited
for GL3. Good levels to test this can be found in the Mines unit.
2017-04-10 19:28:46 +02:00
Yamagi Burmeister
0314eafdaa Cap dynamic light intensity / brightness to 3.
Without capping the brightness entity models may fade into pure white
which looks ugly. This can be seen when several flyer fire blaster
bolds onto the player or when multiple barrels are exploding. This
change was suggest by @DanielGibson, I'm just the messenger.
2017-04-10 19:28:46 +02:00
Yamagi Burmeister
8c665b826c Do not enforce the Vrect to have even width and heights.
I really don't see why this constraint was ever necessary. It leads to
one line of pixels not rendered either at the bottom or the right edge
of the screen. In GL1 for whatever reasons this line is just black, in
GL3 garbage is drawn.
2017-04-10 19:22:23 +02:00
Daniel Gibson
b916d11662 GL3: gl3_particle_fade_factor cvar to configure particle softness
the higher it is, the less soft (more like in GL1) the particles look

While at it, I removed lmOffset from uni3D, as it's not used.
2017-04-10 19:04:59 +02:00
Yamagi Burmeister
e510bfc281 Fix render artifacts around health points when the HUD is scaled.
In SCR_DrawFieldScaled() the HUD scale factor wasn't taken into account
when calculating the screen area affected by the change. Therefor wrong
coordinates were passed to SCR_AddDirtyPoint() and a part of the changed
area wasn't marked dirty, leading to render artifacts.

This bug was present since HUD scaling was first introduced.
2017-04-10 15:50:48 +02:00
Yamagi Burmeister
4bd263c4d4 Some cleanup to the Makefile.
- Rename REFGL to REFGL1 for consistency with REFGL3.
- Fix some comments.
- There's no need to link flash.c and rand.c into both renderer libs.
2017-04-10 15:50:25 +02:00
Daniel Gibson
5d3f024f82 GL3: Fix GL3_Draw_Flash() for viewsize < 100 and odd resolutions
the flash should only be drawn in the part of the window where actual
3D rendering happens, not in the borders added if viewsize < 100
(and apparently also for with 1 pixel width if the resolution is odd).
2017-04-10 01:38:30 +02:00
Daniel Gibson
7fe6412d70 Fix crash if gamedata (pics/colormap.pcx) isn't found 2017-04-03 14:54:46 +02:00
Daniel Gibson
b91b244431 GL3: Cleanup (remove TODOs, STUBs and old commented out code, ...) 2017-04-03 00:23:56 +02:00
Daniel Gibson
85c8c83c4b GL3: Make sure HandmadeMath also works without SSE 2017-04-02 20:04:27 +02:00
Daniel Gibson
dbf0563565 GL3: Update HandMadeMath.h 2017-04-02 19:18:40 +02:00
Daniel Gibson
ca5dccb881 GL3: Render dynamic lights on all brush-based entities
The GL1 renderer can't do this :)
2017-04-02 18:28:19 +02:00
Daniel Gibson
35daa08c23 GL3: Split up transModelViewMat4 matrix 2017-04-02 18:21:32 +02:00
Daniel Gibson
ea6dacbc12 GL3: Rename some CVars to gl3_*, fix water brightness
* gl3_particle_size: in GL3 the particles should be a bit bigger because
  the particles fade out towards the edge, so I put it in a seperate
  CVar
* gl3_intensity: in GL3 the intensity can have any floating point value,
  in GL1 only integers, so it gets its own CVar
* gl3_overbrightbits: gl_overbrightbits had to be 1, 2 or 4, in GL3 it
  can have any floating point value.

Changed the particle scaling a bit so they look bigger.
2017-04-02 17:16:26 +02:00
Daniel Gibson
a9093fdf98 Make it work with SDL1.2 again
Some things broke when moving the renderer into a DLL, and the GL3
renderer needed some more work to work with it.
2017-04-02 05:20:24 +02:00
Daniel Gibson
bd5b8d0aea Don't crash if re.InitContext() fails before creating context
One problem was that GL3_Shutdown() called several functions that use
that gl* function pointers - not a good idea if InitContext() failed
and the function pointers are all NULL. So check for that.
Similarly in GL3/R_ShutdownWindow() calling glClear() etc.

Another problem was that R_SetMode() would, if R_SetMode_impl() failed,
try again with a "safe" resolution (640x480 unless  we had another
working resolution before) - which is bad if we're already using that
"safe" resolution because then GLimp_InitGraphics() would check mode
and fullscreen and decide it hasn't changed and do nothing and return
true, which would make SetMode() believe everything is fine and
afterwards all hell breaks loose.
2017-04-02 05:18:44 +02:00
Daniel Gibson
3503f91234 GL3: Use dlightbits/lightflags in shader
This makes the fragment shader faster by skipping lights that haven't
marked this surface in GL3_MarkLights()

This seems to improve performance at least slightly everywhere, but
it really helps *a lot* on integrated intel GPUs like the one on their
Sandy Bridge, Ivy Bride and Haswell CPUs (those are the ones we tested).
2017-04-01 16:17:22 +02:00
Daniel Gibson
5656345d1f GL3: Dyn. Lights: Factor in angle, make it work on Win/AMD and OSX
adding dot(surfaceNormal, lightToPixelOnSurfaceNormal) to the equation,
should be Phong-y now? Looks good at least.

The Windows AMD legacy driver needed its usual manual padding..

OSX was totally weird.. There were no errors or warnings from OpenGL
at all, but the dynamic lights were just not visible.
After (too long) debugging the shader I figured out that
dynLights[i].lightIntensity was always 1, and thus
'dynLights[i].lightIntensity - distLightToPos - 64' was negative and set
to 0 with max(0, ...).
I still have no idea why that happens, but removing lightIntensity from
the struct, making lightColor a vec4 and using .a for intensity works...
2017-03-27 22:43:10 +02:00
Daniel Gibson
d5cf8c2852 GL3: Support dynamic lights (mostly) + changes for that
Dynamic lights on normal world brushes work, on brush-based entities
probably not yet properly. For this I need the model matrix in the
shader to transform vertex positions and normals to worldspace
(they already are for world brushes, but not entities that might rotate
 and move etc).
Furthermore, while they dynamic lights look nice and smooth they might
need some fine tuning in the shader..

For this to work there are two bigger changes:
* the vertex data for brushes (gl3_3D_vtx_t) now also contains the
  vertex normal
  - glpoly_t contains array of gl3_3D_vtx_t instead of 7 floats
* 3D shaders now have in vec3 normal, bound to GL3_ATTRIB_NORMAL
* There's a new UBO for light data: uniLights, containing an array of
  up to 32 dynamic lights, with data copied from gl3_newrefdef.dlights
2017-03-27 01:02:54 +02:00
Daniel Gibson
6547e08c1a GL3: Upload UBOs with glBufferData(), make it build+work on Windows..
..with Radeon 6950 using AMDs legacy driver.

For uploading UBOs it turned out that glBufferData() is faster,
sometimes a lot faster, with several drivers, especially Intel/OSX.
2017-03-25 18:19:28 +01:00
Daniel Gibson
35285a0fcd GL3: Render each Model in one draw call (as GL_TRIANGLES w/ EBO)
this increases performance a lot.

Using DG_dynarr.h for dynamic arrays collecting all the vertices and
indices of a model.
2017-03-25 17:25:17 +01:00
Daniel Gibson
4bc3a68699 GL3: Bigger, fewer Lightmap textures, cleanups
if the lightmap textures are 1024x512 instead of 128x128, all original
Q2 levels will only need one lightmap texture (instead of max 26 or so)
and even maps that needed all 127 (the 128th was the dynamic lightmap)
won't need more than 4.
This should result in less glBindTexture() calls.

(Note: When I wrote "1 lightmap texture" I meant 4, because where the
 old renderer dynamically blended the up to 4 lightmaps/surface, I put
 them in 4 textures that belong together and are alle passed to and
 blended in the fragment shader)
2017-03-25 17:22:54 +01:00
Daniel Gibson
6b3195e942 GL3: Remove some unused variables 2017-03-19 05:56:08 +01:00
Daniel Gibson
2dc7b6e6eb GL3: Multiple lightmaps/surface with lightstyles works
not sure if this is the very best solution..
Every surface can have up to 4 lightmaps.
I now always create 4 lightmaps (in separate textures, so the
corresponding texture coordinates are identical), the "fillers" are
set to 0, so in the shader they won't make a visible difference.
(The shader always adds up lightmaps from 4 textures, but how much
 they're actually visible depends on lmScales which also will be set to
 0 if "unused")

If all this turns out to be (too) slow, there could be a special case
for surfaces with only one lightmap, I /think/ that's the most common
case by far.
2017-03-19 05:45:10 +01:00
Daniel Gibson
5abf60de89 GL3: Reintroduce RenderLightmappedPoly from old multitexturing Code
adjusted to new GL3 stuff, of course.
Also, more code for light style/lightmap scale support.
Should probably (maybe) work once we have really have 4 textures
per lightmap id.

(And then of course dynamic lights are still missing)
2017-03-19 05:45:01 +01:00
Daniel Gibson
d034362809 R_RenderBrushPoly: Don't overflow msurface_t::styles
maps could be 4 at that point.
2017-03-18 20:05:07 +01:00
Daniel Gibson
f3c78fb1c5 GL3: Theoretically support 4 lightmaps with styles (in shaders)
practically those lightmaps must be created and uploaded as textures
etc
2017-03-18 20:02:31 +01:00
Daniel Gibson
e6a534aef2 Extra shaders for rendering with lightmaps vs transparent surfaces 2017-03-18 15:41:11 +01:00
Yamagi Burmeister
4d299e26d7 Don't write stdout.txt and stderr.txt when portable.
To be able to test if the game is running portable all checks of the
portable cvar must be done after Cvar_Init(). Instead of redirecting
stdout and stderr as early as possible, delay the redirection right
after Cvar_Init(). After this change the printf() in WinMain() aren't
printed into stdout.txt, but I guess that it isn't a big problem. All
interessting stuff like the search pathes is still there.

Rename fs_portable to portable. It's no longer filesystem specific.
2017-03-13 16:24:26 +01:00
Yamagi Burmeister
3032698f95 Put console_history.txt in the binary dir when fs_portable is 1. 2017-03-13 15:41:41 +01:00
Daniel Gibson
9462063869 Screenshots can be tga, bmp, png, jpg now, using stb_image_write.h
the screenshot command now supports the filetype as optional argument
(just "screenshot" will use tga like before):
"screenshot png" will save the screenshot as PNG, same with jpg, png
and tga.
For jpg, you can even specify the quality, like "screenshot jpg 90"
(the Quality is between 1 and 100, like with libjpeg).

To reduce duplicated code, I addeed Vid_WriteScreenshot() to refimport_t
and implement most of it in the client (vid.c).
The renderer still fetches the raw image data from OpenGL or whatever
and then calls re.VidWriteScreenshot() which will write it to disk in
the format requested by the user.
2017-03-12 03:28:06 +01:00
Daniel Gibson
516c417d91 Render lightmaps together with corresponding faces; gl_overbrightbits
pass both normal texture and lightmap to shader instead of rendering the
level geometry again with the lightmap and GL_BLEND.

This is not done, some translucent surfaces are buggy now and it's only
static lightmaps. For this to work properly I'll need to add some more
shaders with and without lightmaps and use them accordingly.
For example, translucent surfaces (SURF_TRANS33/66) never have
lightmaps, neither to pertubed ones (SURF_DRAWTURB) like water and lava,
but scrolling surfaces (SURF_FLOWING) like elevators do use lightmaps
(as long as they're not also transulcent or perturbed)...
2017-03-12 03:11:29 +01:00
Daniel Gibson
13789554ba GL3: Dynamic Lightmaps (via blending)
well, seems to work, but once the lightmaps are rendered with the normal
textured faces, maybe the dynamic part can be done in shader?
(Might even look less blocky, because it's not limited to lightmap
 resolution then)
2017-03-05 17:34:53 +01:00
Daniel Gibson
2932d995fe GL3: Static Lightmaps (via blending)
not *that* cool, I wanna render them together with the normal texture..

and dynamic lightmaps are missing so most things look shitty anyway
2017-03-05 03:08:05 +01:00
Daniel Gibson
a3865db4bb GL3: rip out gl_flashblend 2017-03-04 16:38:08 +01:00
Daniel Gibson
18bfa35f9b Allow switching VSync on/off without vid_restart (for SDL2) 2017-03-04 16:31:34 +01:00
Daniel Gibson
6b21811af8 GL3: DrawNullModel()
this is used if a model can't be found/loaded
2017-02-26 20:47:37 +01:00
Daniel Gibson
613071078a GL3: render beams; common struct gl3_3D_vtx_t for vertex arrays
that struct can/should be used with gl3state.vao3D which expects data
as 7 floats (x,y,z, s,t, lms,lmt) - this is used for brushes, sprites,
the sky and more (not for models though).
(For rendering brushes the struct isn't used, the data already is in
 that format in float arrays)

beams are now rendered, they are used by the BFG and in some levels for
lasers etc
2017-02-26 05:22:39 +01:00
Daniel Gibson
977c81db5d GL3: Render sprites
and some cleanup/small stuff.

Damn, my productivity today scares me :-P
2017-02-26 04:37:22 +01:00
Daniel Gibson
15296ab5f8 GL3: Render Sky 2017-02-26 03:46:59 +01:00
Daniel Gibson
cf11473130 GL3: flashing screen (formerly R_Flash())
which just called R_PolyBlend().. no idea what that all was about..
and no idea why it happend in 3D mode, it's much  easier after
SetGL2D(), then it can share code with GL3_Draw_FadeScreen() and doesn't
need any additional messing with transformation matrices
2017-02-26 02:23:20 +01:00
Daniel Gibson
247a81c69b GL3: Render Particles, simplify GL3_ShutdownShaders()
* The particles look more fuzzy than in old renderer - I think it looks
  better this way ;)
* Not sure I keep the way they're rendered - instead of calculating and
  passing the distance in GL3_ShutdownShaders() I could set the player
  (camera) origin in a UBO and calculate distance (and based on that
  the size) in the vertex shader. I could also pass the basic point size
  via UBO, it's the same for all particles..
* Deleting shader programs is a lot shorter now and using a loop and
  the fact that consecutive fields of the same type in a struct have
  the same memory layout as an array of that type.
  Now I can just add a gl3ShaderInfo_t to gl3state, set it up in
  GL3_InitShaders() and don't have to add anything to
  GL3_ShutdownShaders() (this is good, I forgot that all the time and
  didn't notice, as it doesn't cause visible errors)
2017-02-26 00:47:27 +01:00
Daniel Gibson
f3e77e1123 GL3: Fix color-only rendering of models (+refactor GL3_UpdateUBO*)
* Of course the color attribute has 4 floats, not 2..
* I read that updating UBOs with glBufferData() is kinda slow.
  I didn't change that (yet), but at least all three GL3_UpdateUBO*()
  functions now call updateUBO() which can easily be changed to do
  whatever is best without touching the other three functions.
2017-02-26 00:20:32 +01:00
Daniel Gibson
b7bf822e6d GL1: Particle improvements
* When using gl_pointparameters, the particles always had the same size
  regardless of resolution, i.e. they look bigger (use bigger part of
  screen) at lower resolutions. Now I scale gl_particle_size according
  to the resolution, assuming the configured size looks good at 800x600
  (or generally 600px vertical)
* When not using gl_pointparameters, a textured triangle is rendered.
  The texture had a resolution of 8x8 pixels and looked like a cross,
  now it's 16x16 and has rounded ages, looking more like a circle.
  So particles with "gl_pointparameters 0" should look much better now.
2017-02-26 00:10:34 +01:00
Daniel Gibson
c4c21075a4 vid_listmodes command to show video modes, add 720p mode
the very unusual 1280x854 mode has been replaced with the more common
1280x720 ("720p").
2017-02-25 20:33:17 +01:00
Daniel Gibson
66e9c5f6db GL3: fix calculation of perspective matrix, some cleanups
turns out R_MYgluPerspective() was not the same as gluPerspective()
and thus not equivalent to HMM_Perspective() either. Because of this,
the weapon and corresponding arm looked different in GL3 vs GL1.
Created GL3_MYgluPerspective() to fix that.
Also tested optimized code in GL3_RotateForEntity() and
rotAroundAxisZYX(), use this code from now on and cleaned it all up by
removing commented out code.
2017-02-20 17:08:59 +01:00
Daniel Gibson
5511f44c99 GL3: Delete new shaders in GL3_ShutdownShaders()
also a small optimization in GL3_DrawAliasModel(), and adding that
function to local.h
2017-02-20 17:04:52 +01:00
Daniel Gibson
eadb607ac3 GL3: Support left-handed gun rendering (hand=1)
that was easy..
however, not related to this change or left vs right hand, the gun
seems to be drawn too far back, we should see more of the arm..
I wonder where that went wrong...
2017-02-20 02:16:34 +01:00
Daniel Gibson
de0197a8c0 GL3: Render models (weapons, items, monsters, projectiles etc)
introducing vertex color attributes GL3_ATTRIB_COLOR (it's used for
lighting models and to render models flat-colored, I think that's used
for quad damage effect and similar)
2017-02-20 02:03:31 +01:00
Daniel Gibson
098890805f GL3_BindVBO(vbo) wrapping glBindBuffer(GL_ARRAY_BUFFER, vbo)
avoids calling glBindBuffer() if the vbo is already bound, similar
to GL3_Bind(), GL3_BindVAO(), GL3_UseProgram() etc
2017-02-20 02:01:48 +01:00
Daniel Gibson
30026f2025 Make usage of anormtab.h a bit cleaner
bla =
#include "blub.h"
;

sucks, bla = {
#include "blub.h"
};
is a bit cleaner, especially regarding comments in "blub.h"

(Eclipse was very confused)
2017-02-19 06:04:47 +01:00
Daniel Gibson
f5e2fb16b4 GL3: Draw Entities (only brush-based so far) 2017-02-19 06:04:47 +01:00
Daniel Gibson
8723f73831 Show renderer name in window title 2017-02-19 06:04:47 +01:00
Daniel Gibson
7cd86106dc GL3: Use HMM types in structs for UBOs, some cleanups
.. hmm_mat4 and hmm_vec4 are much easier to set than float arrays.

removed some debug code from initShader2D()
2017-02-19 06:04:47 +01:00
Daniel Gibson
101b9b14bb GL3: Flowing (non-warping) textures 2017-02-19 06:04:47 +01:00
Daniel Gibson
d7b5c7e86e GL3: shared UBOs instead of normal uniforms; warping water 2017-02-19 06:04:47 +01:00
Daniel Gibson
6e07ff0a2d GL3: Rework 2D drawing, Rotation-Matrix stuff; common vtx attr layout
kind of messy commit with all the shit from last weekend, finished now

Most importantly the common vertex attribute layout stuff using
glBindAttribLocation()
2017-02-19 06:04:43 +01:00
Daniel Gibson
57fd192cda GL3: levels are rendered a bit
the code is still very much WIP and kinda crappy, especially the
  static GLuint vao = 0, vbo = 0;
part in GL3_DrawGLPoly()
2017-02-19 06:03:07 +01:00
Daniel Gibson
0b35ceabdc GL3: added missing source files and stubs of most functions
still no 3D rendering, but in theory it should be able to load models,
bsps etc, just not render them yet.

also moved/copied md2.c and sp2.c to gl/ and gl3/ because they use
renderer-specific types
2017-02-19 06:03:07 +01:00
Daniel Gibson
ebbb675cb8 GL3: gamma and intensity via shader
only for 2D rendering, as we don't have 3D yet; also this might need
a more flexible solution later, as some textures are not supposed to
have intensity applied.
According to the old R_Upload32*() and R_LightScaleTexture() the ones
without mipmaps didn't get intensity. Those were it_pic and it_sky (and
the ones in the "scrap", but those were it_pic too)
2017-02-19 06:03:07 +01:00
Daniel Gibson
43e108fb9b GL3_Draw_* is done, menu, console, videos work 2017-02-19 06:03:07 +01:00
Daniel Gibson
678410bfb4 Added super simple shaders, does render videos now 2017-02-19 06:03:07 +01:00
Daniel Gibson
56661fd43f GL3: Add remaining stubs, add HandMadeMath, update Copyrights 2017-02-19 06:03:07 +01:00
Daniel Gibson
26904949c2 Implemented GL3_LoadPic() and related functions
so loading texture and uploading them to the GPU should work.
a pity there's no code to use them yet :P
2017-02-19 06:03:07 +01:00
Daniel Gibson
0787b75792 Cache gl_nolerp_list Cvar in ref libs, fix possible bug in R_FindImage()
I see no reason to Cvar_Get() gl_nolerp_list again and again, just save
it like all the other gl_ Cvars.
2017-02-19 06:03:07 +01:00
Daniel Gibson
64a456b867 Moved LoadWal() to r_image.c/gl3_image.c
It returns the renderer-specific image_t*; wal.c is now
renderer-agnostic and only contains GetWalInfo().
2017-02-19 06:03:07 +01:00
Daniel Gibson
c098ee2ce3 LoadPCX() supports palette=NULL to avoid malloc()
when called from R_FindImage() the palette wasn't used anyway.
R_FindImage() now passes NULL.
(LoadPCX() is still called with non-NULL palette from Draw_GetPalette())
2017-02-19 06:03:07 +01:00
Daniel Gibson
9970dc43ad some further steps; ref_shared.h shared between ref libs
still nothing useful..
2017-02-19 06:03:07 +01:00
Daniel Gibson
324eaa8048 begin implementing ref_gl3
so far it can't even be loaded completely and has no code for
rendering yet
2017-02-19 06:03:07 +01:00
Daniel Gibson
aaa73236ec refexport_t::Init() now returns bool and has no args; minor things
the arguments were not used anyway, and returning true/false is clearer
than returning -1 (for error) or sth else (which has no deeper meaning
anyway).

Also:
* PrepareForWindow() can now return -1 if there's an error
* suppress some warnings in Makefile
* fix error for building ref_gl.dylib on OSX
2017-02-19 06:03:07 +01:00
Daniel Gibson
5938a665e8 pass Com_VPrintf() to reflib used by R_Printf(), remove VID_Printf()
So in all code in the reflib (ref_gl.dll/.so/.dylib) calls to
ri.Con_Printf(print_level, fmt, ...) have been replaced by calls to
R_Printf(print_level, fmt, ...) which uses ri.Com_VPrintf().
2017-02-19 06:03:07 +01:00
Daniel Gibson
a0c1c74a2e (Mostly) get rid of VID_Printf() and VID_Error()
they're only wrapping Com_Printf() and Com_Error() anyway
2017-02-19 06:03:07 +01:00
Daniel Gibson
54ae3be0c6 Com_VPrintf(level, fmt, argptr) (Com_D?Printf() wraps that)
somehow all the printf()-like things in Q2 wrap each other and each
one prints into a buffer and then calls the next one with ("%s", buf).
That's not very clever and kinda annoying.
As in the end everyone calls Com_Printf() I created Com_VPrintf()
that can be called instead with the va_list.

I also added printf-format annotation to Com_Printf() and Com_DPrintf()
and fixed places where Com_Printf() was called with the wrong type.
2017-02-19 06:03:07 +01:00
Daniel Gibson
c743aaa8fe Copyright-header in r_sdl.c
forgot that when I created the file..
2017-02-19 06:03:07 +01:00
Daniel Gibson
181d4fa0ea Move client/refresh/header/* and qgl.h to client/refresh/gl/header/*
and the changes in the including files for this.

(also removed gl.h includes from local.h, as it's already included in
 qgl.h which is included by local.h)
2017-02-19 06:03:07 +01:00
Daniel Gibson
73cf610cdb Only use client/refresh/header/local.h in refresh lib
that's why it's called "local.h". duh.
(next I'll move it to refresh/gl/)
2017-02-19 06:03:07 +01:00
Daniel Gibson
7f27c549a8 It works again, ref_gl doesn't use any client symbols anymore
So in theory this should even work on Windows now.
2017-02-19 06:03:07 +01:00