Commit graph

170 commits

Author SHA1 Message Date
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
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
Daniel Gibson
264df420e3 Rename vid_ref cvar to vid_renderer 2017-04-09 00:00:36 +02:00
Daniel Gibson
182948fecc Rename ref_gl.* to ref_gl1.* 2017-04-02 16:23:00 +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
9044eb1370 Load ref_* lib with absolute path, fall back to ref_gl
.. if initializing the other renderer failed.
2017-04-02 05:19:01 +02: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
45cc75d2d9 Add an undocumented option for forcing busy waits.
Some people complained about the usage of non busy waits:

  * I was told that there's an input lag with nanosleep(). I still doubt
    that, but since the problem is easy to solve...
  * Some Intel CPUs throttle the GPU if the selected CPU pstate is too
    low. This is especially a problem on Haswell mobile CPUs. Keeping
    a core busy works around that.
2017-03-13 13:39:03 +01:00
Daniel Gibson
b6f68cd532 Allow setting png compression level in screenshot command
The level is between 0 and 10, use like
screenshot png 6
2017-03-13 00:50:57 +01:00
Daniel Gibson
bbf36746c8 stb_image_write.h: allow using custom zlib compress function
the one from zlib compresses better than the builtin one and might even
be faster.
2017-03-13 00:50:57 +01:00
Daniel Gibson
a1a634b95a stb_image_write.h: configurable png compress level 2017-03-12 22:33:59 +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
18bfa35f9b Allow switching VSync on/off without vid_restart (for SDL2) 2017-03-04 16:31: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
8723f73831 Show renderer name in window title 2017-02-19 06:04:47 +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
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
9252eba643 use vid_ref cvar to select render dll 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
Daniel Gibson
2062b319e9 move qgl.[ch] to src/client/refresh/gl/ 2017-02-19 05:53:56 +01:00
Daniel Gibson
f13e15e561 ref_gl.so builds and works (on Linux, with Makefile)
still dirty, seems to use some symbols from client directly, which will
not work on Windows.
2017-02-19 05:53:56 +01:00
Yamagi Burmeister
8fe8f832f8 Remove last remnant of multitexturing.
Pointed out by DanielGibson.
2016-12-18 09:48:06 +01:00
Yamagi Burmeister
f6f8394b74 Ensure that all keys are marked up when playing cinematics
Otherwise at least one key may be still marked as down causing an
immediate abort of playback. While here be a little bit paranoid
and clean up key states when focus is gained. In theory that's a
no-op.
2016-11-08 17:37:24 +01:00
Yamagi Burmeister
aa897e3965 Make OSTYPE and ARCH user defineable.
The old implementation had two problems:

  * OSTYPE and ARCH are systemwide defines, overriding them may break
    the global libc headers. This is a theoretical problem, I've never
    seen it in praxis.

  * Not all system set ARCH correctly when building in a chroot env.
    For example on Linux ARCH is set to x86_64 when building in an
    i386 chroot. Now the user can do something like "make YQ2ARCH=i386"
    to get things right.
2016-10-24 18:02:17 +02:00
Yamagi Burmeister
31c564a030 Setting the window position was unsupported for years. 2016-08-18 18:58:18 +02:00
Yamagi Burmeister
88244bd4a4 Unbreak SDL 1.2 build. 2016-08-14 16:46:07 +02:00
Yamagi Burmeister
4d9d555d8e When vsync is enabled, cap the desired rfps.
With vsync enabled the render times of consecutive frames can diverge.
The first frame arrives right at the next display frame and is rendered
without waiting time. The next frame has to wait 20ms. The leads to some
problems with the move prediction if the client is asynchronous. Fix
this by capping the desired frame rate at the display refresh rate. Also
make sure that the network framerate is never higher then the renderer
framerate.

With the commit the timing is always correct:
* With no limit as much frames as possible are rendered. In this case
  rfps > nfps and everything's good.
* With vsync enabled rfps > nfps or rfps == nfps is given. Also rfps
  will never exceed the display refresh rate.
* On slow hardware either rfps > nfps or an implicit rfpc == nfps is
  given.
2016-08-14 16:35:48 +02:00
Yamagi Burmeister
0ba7614739 Use nanosleep() instead of a busy wait loop.
This cuts the cpu time requirements in half. Windows has no equivalent
for nanosleep(), so keep the busy loop.
2016-08-14 12:50:27 +02:00
Yamagi Burmeister
5840bd570b Use vertex arrays in R_RenderLightmappedPoly.
This is done for normal surfaces only. To change SURF_FLOWING surfes I
need to find such a surface somewhere in the game...
2016-08-06 15:25:54 +02:00
Yamagi Burmeister
9f0b5d067b Use GL_ARB_point_parameters instead of GL_EXT_point_parameters.
While here switch GL_ARB_point_parameters to a new probing logic and
rename the Cvar to gl_pointparameters.
2016-08-06 09:50:16 +02:00
Yamagi Burmeister
4057376993 GL_EXT_compiled_vertex_array is unused. Remove it.
At can be added back, if it's ever needed.
2016-08-06 09:35:08 +02:00
Yamagi Burmeister
e4751e8c44 Use OpenGL multitexturing extensions to implement multitexturing...
This is a slighty revised version of id Software original code. Icculus
code may have some advantages on broken drivers or underpowered GPUs.
Today it's just a performance hook. This is a first step in fixing #147.
2016-08-05 18:38:48 +02:00
Yamagi Burmeister
2baf97bdf6 Throttle the client to 1000 FPS.
This is more than enough for everyone and prevents wasting CPU time.
Without this change as many client frames as possible are rendered,
Quake II uses a complete core.
2016-08-05 07:49:47 +02:00
Yamagi Burmeister
f291693c59 Quit the game if a SDL_QUIT event is received. 2016-07-18 10:11:54 +02:00
Yamagi
5323873476 Merge pull request #143 from smcv/link-libopenal
Optionally link libopenal at compile time
2016-07-05 19:13:57 +02:00
Simon McVittie
5887a9e79e Optionally link libopenal at compile time
In Linux distributions, having the executable depend on the right
libraries and arrange for them to be installed is straightforward,
and there's a lot of infrastructure for tracking which library
version a particular executable needs, including making sure we have
a version that contains all of the symbols that were used. Loading
libopenal at runtime defeats that infrastructure.

The ability to substitute a different-but-compatible libopenal,
or operate with reduced functionality without libopenal, might
still be desirable for generic/portable binary releases.

The CMake build system already linked the executable to
${OPENAL_LIBRARY} anyway, so it is already a hard dependency in that
build system.
2016-07-01 09:44:00 +01:00
Simon McVittie
92668ca6b1 Fix spelling errors detected by lintian
Based on a patch by Fabian Greffrath against an earlier version of
yquake2.
2016-07-01 09:38:54 +01:00
Yamagi Burmeister
5a384c79b1 Switch from an arch whitelist to an "all archs are supported" approach.
The old whitelist was a leftover from the early days of YQ2. It should
run on most / all architectures, as long SDL supports them. As suggested
by smcv in issue #138 generate the OSTYPE and ARCH defines by the build
system instead of hardcoding it.

Savegame compatibility is provided by bumping the savegame version. Old
savegames are compared against the old OSTYPE and ARCH defined, new ones
against the new defines. This compatibility code should be removed
somewhere in the distant future.
2016-06-11 09:23:10 +02:00
Daniel Gibson
da6ad6953d Use software gamma for OSX, fix #134
Hardware gamma is broken, especially in fullscreen, and a Mac user told me
that setting HW/screen gamma on OSX is a bad idea anyway, because it resets
the monitor calibration.
The game /should/ look ok with vid_gamma 1 (if your display is configured
properly), but if you think it's too dark set it a bit higher and do
vid_restart.
2016-05-28 16:04:07 +02:00
Daniel Gibson
0fb8d80507 Small improvements to input code 2016-01-30 17:46:34 +01:00
Daniel Gibson
dc155cca9c Workaround for better AZERTY-Keyboard support
The first row of AZERTY-Keyboards (used in France and Belgium) doesn't
have numbers as keys but ², &, é, ", ', (, -, è, _, ç, à, ), =
(with small differences between France and Belgium).
For some of those keys we don't have keycodes - and neither does SDL2.
See also https://bugzilla.libsdl.org/show_bug.cgi?id=3188

As a workaround, just map those keys to 1, 2, ..., 9, 0 anyway, as those
are keys Quake2 already knows (and those chars are printed on the keys
too, for typing they're reachable via shift).
This workaround only works for SDL2, as SDL1.2 doesn't have scancodes
which we need scancodes to identify the keys.

While at it I unified handling of SDL_KEYDOWN and SDL_KEYUP, the code
is almost identical anyway, apart from one bool argument to Key_Event().

We track this problem in #81
2016-01-30 17:46:34 +01:00
svdijk
9964b2f3df q2icon.xbm: Make this a bit more like the new icon 2015-11-18 20:52:19 +01:00
svdijk
4194ff24dd q2icon64.h: Recreated to have the same margins as the source SVG 2015-11-18 19:58:08 +01:00
svdijk
97f9494400 Windows: Use a relative path for the icon. 2015-11-04 21:08:25 +01:00
svdijk
ec9657134f Windows: icon.rc is a source file, so move it to the source directory. 2015-11-04 21:05:30 +01:00
Daniel Gibson
12604bebe9 Change version to 5.33pre, changes for arbitrary length version strings
Con_DrawConsole() assumed that the version string was always 21chars
long, we changed it to allow longer strings with other lenghts.
In Unix main() we changed the code for underlining
"Yamagi Quake II $version" with === so the underlining is as long
as the underlined string.
2015-11-01 17:15:10 +01:00
Daniel Gibson
951fc2ffb7 Prettier Windowicon when using SDL2
for some reason this doesn't work properly with SDL1.2, so we keep
the old code for that.
2015-10-25 17:55:41 +01:00
Yamagi Burmeister
72a22b8915 Remove unreachable code 2015-09-09 08:23:23 +02:00