Commit graph

120 commits

Author SHA1 Message Date
Yamagi Burmeister
565f7f6e67 Let the Makefile generate a game.dynlib on OS X
This should have been done years ago, .dynlib is the canocial extension
for libraries on OS X. In a broader sense this simplifies the CMake
build system a little bit, since CMake enforces .dynlib for OS X
libraries.
2015-08-12 18:55:35 +02:00
Bradley Clemetson
2d20c5c801 Compiles on Linux with OpenAL support, SDL1/2 support.
Added build options for Zip/Ogg/OpenAL (On if available)
2015-08-10 22:55:01 -07:00
Bradley Clemetson
e55f7e7aeb
Now builds fully on OS X 2015-08-08 20:19:03 -07:00
Daniel Gibson
0b9ac6cb99 Fix "mark keys up when focus is lost" code, fixes #68
It didn't build on SDL1.2 (I though we tested that?!) and didn't work
with SDL2 either.

Now it builds and actually works with both SDL1.2 and 2.0
2015-04-14 00:51:38 +02:00
Daniel Gibson
544a464eea Implement gamedata loading from binary path
even if $PWD is not the same path as the executable is in, the game
will look for game data in directories next to the executable.
2015-04-11 20:11:42 +02:00
Yamagi Burmeister
d2f7d27ad0 In case of focus loss, mark all keys up
Daniel is more or less sure that a stuck Alt key can occure if the user
switches through several windows by Alt-Tab. That sounds resonable,
because the keyup event for Alt may happen when the focus is not on
Quake II. In that case SDL2 misses it and for Quake II the key stays
down. Solve this by capturing the focus loss event and mark all keys
as up.
2015-03-31 21:23:04 +02:00
Yamagi Burmeister
aff37eda16 Make sure that no key is being marked down
It's apparently not enough to clear key repeats, we'll need to clear
the down states too. Without this Alt stays pressed after toggeling
fullscreen trhough Alt-Enter.
2015-03-30 21:22:55 +02:00
Yamagi Burmeister
02156e03ec Fix fullscreen switch on Alt-Enter
Switching to fullscreen through a SDL2 call is nice, but the renderer
needs to be reinitialized. Without it some things will break, for
example the gamma setting.
2015-03-30 20:57:32 +02:00
Yamagi
06834d1fb5 Merge pull request #65 from Jarvik7/OSX
OSX
2015-03-29 19:14:56 +02:00
jarvik7
150fb8b132 Remove old OS X cruft
This isn’t actually being used.
2015-03-29 12:22:40 +09:00
Daniel Gibson
a96218eb0a Simplify the mouse grabbing/relative mouse mode magic
basically, tell SDL each frame if you want stuff grabbed or not
+ make sure to ungrab when destroying window (e.g. on vid_restart)
2015-03-27 18:56:16 +01:00
Yamagi Burmeister
c1f5f62382 Remove the SDL.h even in !DEDICTED_SERVER builds
It was used for SDL on APPLE only. I just missread the code. :(
2015-03-20 17:45:57 +01:00
Yamagi Burmeister
177b424ba1 Remove Mac OS X support
No, this is not a rage quit but the result of a long discussion. There
are several reasons for us to drop OS X support:

- OS X support was always more or less hacky. For example is was never
  really integrated into the build system and some features like the
  OpenAL sound backend never worked well.
- The OS X support never grew into the new world based upon SDL2.
- It was broken since at least Lion which was released 4 years ago.
- None of the developers has a Mac or plans to buy one. Supporting
  a software for a platform not used by the developers is more or
  less impossible.
- And despite several appeals no one from the OS X community ever
  stept up and send patches.

Removed are:
- Makefile support
- The OpenAL quirks
- The Cocoa bindings
- The framworks

Not removed is:
- Savegame support
- Memory management support
- Platform detection
- OpenGL and SDL includes

So, if someone steps up and does a modern, fully integrated port based
upon SDL2 we're happy to merge it back. The requirements are:
- It must be a clean port, without any hacks
- Full build system integration must be provided
- The port must be maintained even after it was merged. At every release
  binaries must be build, API / ABI changes with new OS X versions must
  be tracked.
2015-03-20 17:33:46 +01:00
Yamagi Burmeister
9bda84299c Mark all keys as "up" when the refresher is restarted
This is a less intrusive variant of the old Key_ClearState() function.
When the refresher is restarted or the menu is left, this function is
called to mark all keys as "up". That works around some corner cases
where a key is still marked "down" and thus the first stroke is detected
as a repetition.
2015-01-28 20:55:28 +01:00
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
Yamagi Burmeister
c0b27a8bb4 Revert "OpenGL-ES converstion"
This reverts commit 70eef55ab5.

It was premature to merge this commit into HEAD. Maybe we'll try again
one day, but only if a complete and fully working patch with build
system integartion is provided.
2014-08-03 09:34:32 +02: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
bibendovsky
a53f321bed Use proper API to get pointers to OpenAL EFX extensions 2014-06-10 10:23:43 +03:00
Yamagi Burmeister
6c3fb38721 Merge remote-tracking branch 'opengles/master'
This integrates the backends for the pandora, gcw and gph written by
Scott "Pickle" Smith. Only the code itself is supplied, but no build
system integration.
2014-06-09 14:37:09 +02: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
219882dafa Make default video mode consistent, some comment/whitespace changes. 2014-03-28 21:12:15 +01: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
Yamagi Burmeister
be14aea08d Add an signal handler for SIGINT and SIGTERM
This allows the user to shut the client down by pressing ctrl-c in it's
terminal or by sendig SIGTERM.
2014-01-01 11:17:28 +01:00
Yamagi Burmeister
fd1e55d18d Do not set the FPU to single precision on Windows
We had dual precision since ever on 64 bit unixoid systems and it "just
worked". So there should be no reason to still force Windows down to
single precision.  The performance impact should be negligible.
2013-12-31 13:18:05 +01:00
Yamagi
78b974d3ca Merge pull request #28 from alericoveri/qgl_cleanup
QGL renundancy cleanup
2013-12-31 03:14:55 -08: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
Alejandro Ricoveri
1cfb5c67d5 QGL renundancy cleanup
Despite QGL is only handling GL extensions, there was a little code renundancy.
QGL_EXT_Reset sets all extension pointers to NULL.
2013-11-22 08:17:34 -04:30
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