Commit graph

71 commits

Author SHA1 Message Date
Yamagi Burmeister
08f78ec3b5 Set SDL_EnableUNICODE() right after the window is created
This works around a bug in SDL 1.2 were the SDL_EnableUNICODE() state is
reset to false after the window is reacreated. Setting it in the render
backend ensures that no keystrokes are lost. This fixes #56.
2015-01-28 20:42:42 +01:00
Yamagi Burmeister
403d26d520 Process only keys between ASCII 32 and 126 as char events
This fixes bug #55 which ensued from special keys processed as char
and key events if SDL 1.2 was used.
2015-01-21 17:38:21 +01:00
Yamagi Burmeister
59ac327aba Solve some layer violations
- Handling of key combinations like Alt + Return or Shift + Escape
  clearly belong into the frontend. Now that the client won't clear
  the keystates any more it's save to handle them there.

- The 'force_centerview' command belongs into the client move stuff.
  I guess it was part of the backend sinces it messes with mouse
  handling. Since the renderer is now part of the client that's not
  necessary anymore.

- One can argue that +mlook and -mlook belong into client move stuff,
  too. But since we need there calculations in the backend anyway,
  leave things like they are.
2015-01-18 09:31:37 +01:00
Yamagi Burmeister
30fa1c5407 Use character events for some input subsystems
Until now Quake 2 used keysyms aka key events for everything, including
the console and the chat window. Since key events don't reflect if the
shift key is pressed, Quake 2 needed to convert the lower case chars to
upper case char through a hardcoded table. That lead to the problem that
the keyboard layout was utilised for lower case characters only.

Solve this long standing problem by refactoring both the input backend
and the frontends Key_Event() funktion to use character events for most
input subsystem. Character events are generated by SDL and send the
real character.

An example:
- On german keyboards shift and . is : but Quake 2 generated <.
- Now a character event with : is generated and used.

There are at least 3 disadvantes by this approach:
- The backend needs to tell the frontend if a normal character (ASCII
  32 to 126) or a special character is send. Only normal characters can
  be treated as character events.
- There may be some differences between the binding of a key seen
  through the console and seen by the game. If you have a german
  keyboard and bind :, the game may not react to :. This can be worked
  around by editing the config file.
- Users may need to rebind some keys.

Please note that Quake 2 can handle ASCII characters only!
2015-01-18 09:30:53 +01:00
Yamagi Burmeister
db10e0db87 Untangle the input system from the refresher
In the old times the refresher was a stand alone DLL. For performance
reasons and to avoid laggy input parts of the input system were
implemented in this DLL. Now that the renfresher is part of the main
binary and initialized at client startup we can remove most of the
abstractions between input system, refresher and client. Also the
input system can be treated as a normal subsystem.

Changes:
- Untangle the VID_* stuff and the IN_* stuff. The functions
  called by function pointers in in_state are now called directly
  and 'struct in_state' was removed.

- Remove input.h and rename the appropriate backend functions.
  There's no longer a need for an abstraction layer between the
  input backend and the input frontend.

- Move input initialization and shutdown into CL_Init(), like it's
  already done for all other subsystems.

- Remove Key_ClearStates(). I'm pretty sure that's a left over from
  the old Win 9x backends and unnecessary.

- General cleanup.
2015-01-16 18:23:39 +01:00
bibendovsky
c1a3526a67 Add underwater sfx for SDL backend 2014-06-16 08:45:39 +03:00
bibendovsky
1dc71dbd97 Remove static keyword on some variables (these actually not static)
Caused by 1e52d35e84
2014-06-13 15:43:34 +03:00
bibendovsky
1e52d35e84 Do not update mouse cursor position when paused, in menu, etc 2014-06-10 10:43:53 +03:00
svdijk
3bb9f49f19 videomenu: readd 16x MSAA option, check what we got after setting mode. 2014-05-01 20:52:25 +02:00
svdijk
5b6f351e67 refresh.c: some minor tuning/cleaning. 2014-04-17 20:14:42 +02:00
svdijk
d089159ab9 VID: Implement a fallback when MSAA is not supported. 2014-04-16 21:51:36 +02:00
svdijk
503eefc301 Simplify the mouse grabbing/relative mode setting code. 2014-03-26 21:13:07 +01:00
svdijk
5338566852 Fix broken mouse release while in menu/console. 2014-03-26 20:51:02 +01:00
svdijk
69661e7cbd Implement a different workaround for when SDL_SetRelativeMouseMode() doesn't work.
This fixes the "stuttering mouse" reported in issue #38.
2014-03-26 20:34:19 +01:00
Yamagi Burmeister
eb879bb9b6 Rename VERSION to YQ2VERSION to prevent collisions
Newer jpeg versions (I guess starting with 9) define an macro
"VERSION", colliding with ours. While wie could #undef it, take
the less hacky route and rename it.
2014-01-27 18:14:36 +01:00
Yamagi Burmeister
26bbfead45 Add support for MSAA.
MSAA was a long wanted and often requested feature. Just set set the
desired number of samples with gl_msaa_samples and do a vid_restart.
This code is based upon work done in Hecatomb.
2014-01-26 09:53:10 +01:00
Yamagi Burmeister
825a53009a Provide a workaround if SDL_GetRelativeMouseState() is disfunctional
On some systems SDL_SetRelativeMouseMode() can fail under several
circumstances. For example:
 - Security software is blocking acces to raw input.
 - XInput 2 is unavailable.
 - SDL2s configure script has messed up.
Detect those situations and reposition the mouse manually to the
window center after having read it's current state. This fixes
issue #34 an #35.
2014-01-25 15:46:55 +01:00
Yamagi Burmeister
68d3da29e8 Destroy the window after the GL context.
The GL context is bound to a window, so destroy it before the window and
not after it. While here update the header comment.
2014-01-23 17:23:16 +01:00
svdijk
98a83e2322 Minor input grabbing cleanup. 2014-01-11 19:01:04 +01:00
svdijk
b33c895d56 Whitespace 2014-01-05 20:32:18 +01:00
svdijk
50e1bf16fe Fix key-repeats in the console (for instance the backspace key) 2014-01-05 20:22:34 +01:00
Yamagi Burmeister
84a1766702 Merge input backend init and keyboard init
Now that the refresher is part of the client, there's no need to init
the backend before the refresher and the keyboard after it.
2014-01-05 18:58:52 +01:00
Yamagi Burmeister
e8239291a7 Remove unnecessary IN_Close()
Having a special function to close the input devices is unnecessary. The
backend should close them at shutdown, when IN_BackendShutdown() is
called.
2014-01-05 18:53:03 +01:00
Yamagi Burmeister
18733b68ce Do not allow input devices to write to command buffer
Input devices should send key events and nothing more. The ability to
add commands into the input buffer was used by the joystick code
(removed long time ago) and as a dirty hack to work around limitations
of DirectInput.
2014-01-05 18:51:27 +01:00
Yamagi Burmeister
f80e02ffd9 Refactor the SDL input backend once again.
- Remove the keyq. This linked list was used to work around limitations
  of the good, old DirectInput API. It's not necessary with SDL.
- Inline some functions to others where apropriate and remove unused
  or unnecessary functions.
- Reorder functions into groups.
- Update comments.

This commits still misses necessary changes to the frontend. They'll be
done in subsequential commits.
2014-01-05 18:40:24 +01:00
svdijk
7111f735f7 Fix a (harmless) off-by-one in a SDL_VideoDriverName() call 2014-01-05 17:44:29 +01:00
Daniel Gibson
3afe57b8f2 Fix #29 by simplifying mouse button handling
Pressing two mouse buttons at the same time didn't work properly, only
one had effect, e.g. when pressing LMB to walk forward and RMB to shoot
(when bound like that...)

Not sure why that was, but the old mouse button handling (inherited from
the super-old win32 backend where it was supposed to work around bugs in
WinAPI or whatever, where sometimes there were two mouse button presses
in one event or something) was unnecessarily complicated anyway so I
replaced it with something simpler.
2013-11-26 19:22:29 +01:00
Yamagi Burmeister
0f9dcba9ed Apply some cleanup to the input backend
Make non global functions static, give some better names to variables,
remove unneccessary special cases and remove some superflous functions.
Form most - if not all - users this changes should be a no-op.
2013-11-10 10:10:43 +01:00
Yamagi Burmeister
82f3fa84a9 Use "directsound" as sounddriver when using SDL2 on Windows 2013-10-12 12:13:33 +02:00
Yamagi Burmeister
5c5a9beba5 Rename CreateWindow() to CreateSDLWindow()
CreateWindow() is a symbol internal to Windows. We can't use it in out
code or it will collide.
2013-10-12 11:07:05 +02:00
Daniel Gibson
d1ca122955 Add -DSDL2 for Win32/OSX support (untested), print SDL2 usage on startup
The quake2 binary now gets -DSDL2 in the CFLAGS, so Win32/OSX can
use different #include paths accordingly.
This is also (ab)used to print which SDL version is used on startup.
Don't use this for anything else, use
#if SDL_VERSION_ATLEAST(2, 0, 0)
instead.

I haven't tested building on/for Win32 or OSX, there may be more
work to do.

Furthermore I added Copyright-Info about CalculateGammaRamp()
in refresh.c (it's from SDL2)
2013-09-01 14:19:33 +02:00
Daniel Gibson
628dff77a8 Clean up + improve setting gamma via xRandR
* save gamma on start and restore on exit
* handle errors
* Restore SDL1.2 compatibility
2013-09-01 03:18:21 +02:00
Daniel Gibson
9af707c7a0 use xrandr for x11gamma (still hacky) 2013-08-27 21:54:48 +02:00
Daniel Gibson
d6dbd6497e Set gamma with SDL2 2013-08-27 19:57:14 +02:00
Daniel Gibson
a83f1c8ff0 SDL2: Fix Icon 2013-08-27 01:16:05 +02:00
Daniel Gibson
997be0dcd1 Fixes for SDL2
* Fix input issues (mouse-wheel and mouse input)
* SDL2 is not default anymore in the Makefile (use WITH_SDL2=yes)
* If SDL2 is enabled, CD audio is disabled (SDL2 doesn't support
  that - use OGG/Vorbis instead)
* Small fix to make it compile with SDL1.2 again
2013-08-26 23:55:34 +02:00
Daniel Gibson
51b7607548 SDL2 support (mostly)
Makefile is adjusted, it compiles and works mostly, but
* For some reason (bug in SDL_GetRelativeMouseState() ?)
  mouse input doesn't work properly.. it seems to be bound
  to window borders, even if input is grabbed
* some keys can't be used anymore because there's no SDLK_*
  for them anymore (gotta find out if this is important)
* Maybe some of the changes need cleanup
2013-08-26 00:55:31 +02:00
svdijk
ee03e7f03a simplify the input grabbing code 2013-07-30 20:13:49 +02:00
Yamagi Burmeister
ad52c5c888 Rename all qgl* functions top their OpenGL counterparts
This removes the need to define the old qgl function names to the
official OpenGL names. The OpenGL functions are now called directly
without any abstraction.
2013-07-27 08:47:21 +02:00
Yamagi Burmeister
ecc4302f94 Alter Makefile and header pathes following the refresh move
With this change the "refresh" make target doesn't any longer exists.
It was merged into the "client" target. One will need a "make clean"
before building yQ2 after this change.
2013-06-15 10:37:11 +02:00
Yamagi Burmeister
85571cfc56 Only cleanup the GL context if OpenGL was initialized 2013-06-15 10:37:11 +02:00
Yamagi Burmeister
9af9f54f36 Remove QGL pointers
This is a manual merge of Hecatomb Q2 ref b8952d5. Manual since git
couldn't do an automerge for some reasons... Notable changes are:
- QGL function pointers are removed, libGL is linked directly
- The OpenGL log framework is removed. It was disfunctional
- The gl_driver cvar is finaly gone
This change is currently untested on Windows and OS. There should
be no problems but a better Makefile integration of libGL is needed.
2013-06-15 10:37:11 +02:00
Alejandro Ricoveri
2b0974822c Client refactoring
Some stuff being reordered
2013-06-15 10:37:11 +02:00
Alejandro Ricoveri
35e1792c91 Input backend refactoring
Get rid of input backend function pointers + some code cleanup that is no longer necessary
2013-06-15 10:27:30 +02:00
svdijk
55d6a601c9 Fix default video mode.
Revert "The default video mode is 5 (640x480). Spotted by svdijk."
This reverts commit a76d7d5cfb.
2013-05-28 20:42:57 +02:00
svdijk
c469a97b36 fix typo 2013-05-11 15:29:02 +02:00
svdijk
3c62c2be5a ogg/cda: move defaults from yq2.cfg to engine 2013-05-08 20:06:53 +02:00
svdijk
27b3d27584 sdl: fix key repeat (SDL_EnableKeyRepeat was called too early) 2013-04-28 12:38:53 +02:00
Yamagi Burmeister
720db15de9 Cleanup local.h of the sound system 2013-04-20 14:20:58 +02:00
Yamagi Burmeister
d9cd053461 Whitespace cleanup 2013-04-20 13:48:21 +02:00