Commit Graph
25 Commits
Author SHA1 Message Date
bearstonemandClaude Opus 5 a8a1314c2d fix(vr): ask for an ES context for the fixed function renderer, and check it is current
Two problems the first device run found, one hiding the other.

GLimp_SetMode's fixedFunction branch offers exactly one context: desktop OpenGL
1.1. There is no such thing on Android, so window creation failed three times
over and R_Init gave up with "Couldn't get a visual". renderergl2 never met this
because it takes the other branch, which already knows how to ask for ES.

gl4es is what makes the request answerable, and it wants the opposite of what
the renderer believes it is getting: desktop GL 1.x presented upwards, OpenGL ES
underneath. So the fixed function branch now asks for ES 3.0 and then ES 2.0,
and the renderer is never told - it reads its version through gl4es, which
reports desktop GL, and takes the desktop fixed function path on the strength of
it.

That got the renderer up, and revealed the second problem: the OpenXR session
found no current EGL context. Which is where gl4es having its own opinion about
glGetString stops being convenient. The engine's proof that a context is live is
GL_VERSION coming back non-NULL, and gl4es answers VERSION, VENDOR and RENDERER
out of constants without asking the driver - so a context that was created but
never bound passes that test and is only noticed much later, somewhere else
entirely. GLimp_SetMode now asks SDL directly whether the context it just made
is current, restoring the check gl4es defeated.

The session no longer assumes one is bound either. Being current is per thread,
and a window that has not been shown yet has no surface to be current against,
so VR_CreateSession asks for the binding through GLimp_MakeCurrent rather than
requiring it to already be there, and reports the EGL handles when it cannot get
one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 22:02:44 -07:00
bearstonemandClaude Opus 5 7872929f32 feat(vr): head aim, stick locomotion and comfort options
The game now knows where the player is looking. Until now head tracking
only moved the camera the renderer drew from, so anything consulting the
player's view angles - objectives that ask them to look at something, aim,
hit detection - never saw it. CL_VRMove writes the head's heading and
pitch into cl.viewangles, which is what all of that reads.

Walking follows the off hand rather than the gaze, after the approach in
Team Beef's RTCWQuest. Tying travel to where the player is looking means
they cannot glance sideways without veering, which is what makes room
scale movement feel like being dragged; steering with the free hand lets
them look around and still walk a straight line. cl_vrWalkWithView
restores gaze-directed movement.

Turning snaps by default. A stick that rotates the world smoothly while
the inner ear insists otherwise is the usual way to make people ill, and
one flick gives one step rather than one per frame.

  cl_vrSnapAngle    45    degrees per flick
  cl_vrSmoothTurn   0     1 for smooth turning instead
  cl_vrTurnSpeed    90    degrees/second when smooth
  cl_vrDeadzone     0.2
  cl_vrWalkWithView 0     1 to walk where the player looks

All archived, so they are tunable on the headset rather than at build
time, which is what section 5 of the porting plan asks for.

Thumbsticks are bound on the Touch profile only: the simple controller
has none, and offering a binding a runtime does not recognise makes it
reject the whole set, which would cost the fallback its pointer too.

The dominant hand's aim angles are carried through vrInput_t but not yet
used. Aim is still on the head, which section 5 is right to call wrong
for a shooter - that belongs with weapon handling, and looking at things
had to work first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 17:21:14 -07:00
smallmodel a924fc252b Use the hardware cursor in windowed mode (#718)
In windowed mode, the mouse is no longer grabbed when one of the UI/console catcher is active. When a UI menu is active, the system's hardware cursor is shown, using the game's custom cursor texture, instead of simulating and rendering the cursor in-game.

* Add exports to load a raw image from the renderer
* Set the hardware cursor to the game's custom mouse cursor texture
* When mouse is not grabbed, the mouse gets updated with absolute mouse position, relative to the window position
2025-05-02 16:52:39 +02:00
smallmodel c1efc0e066 Set the minimum number to 30 for cl_maxpackets
20 is the bare minimum for players, any value below makes movements look jittery on a 20 fps server. 30 is the optimal value based on network variation and fps variations
2025-04-23 23:56:05 +02:00
smallmodel d52bf52e6a Add BUTTON_ANY flag when moving mouse 2024-10-21 19:22:54 +02:00
smallmodel d57ea3695b Add VOIP code for cl_input 2024-09-22 16:38:00 +02:00
smallmodel 8dd74b7789 Get rid of the code that sends next fragments from clients 2024-09-22 16:35:12 +02:00
smallmodel 36c00f146d Improve gamepad support 2024-09-22 16:19:55 +02:00
SmileTheory aba9f25744 Fix frame_msec possibly being zero in cl_input.c.
This fixes a mouse freezing bug.
2024-09-22 16:14:01 +02:00
smallmodel 0d394a7e67 Fixes strings printing on the same line 2024-07-01 14:15:58 +02:00
smallmodel 141574a0d7 Ignore mouse events when paused 2024-06-15 16:22:21 +02:00
smallmodel 66cb10a3bf Added a fix that reset the viewangles if it is NaN 2023-12-31 23:14:22 +01:00
smallmodel 20282ffa56 Fixed +speed having inverted up/down 2023-08-20 14:44:46 +02:00
OM 518b2abf0a Improved mouse sensitivity 2023-05-29 21:17:53 +02:00
OM dc45c33c79 ioq3 updates 2023-05-26 20:53:00 +02:00
OM 41fc217a06 ioq3 changes 2023-05-24 19:40:02 +02:00
OM 312332ac5e Fixed weapon commands not working as intended 2023-05-23 01:57:18 +02:00
OM ab2a26a14e Added support for *Team Assault* and *Team Tactics* 2023-05-21 19:59:36 +02:00
OM 76178064a0 Drastically reduced compiler warnings on clang 2023-05-21 00:29:26 +02:00
OM a4bd37af8c Fixed buttons 2023-05-20 19:29:02 +02:00
OM b5ea1ddb53 Added weapon command button bits from cgame module 2023-05-19 23:15:45 +02:00
OM 7b0132f2fb Fixed user eyes 2023-05-16 18:59:56 +02:00
OM 8a821b51bd Fixed usereyes uninitialized 2023-05-09 20:07:17 +02:00
mohabhassan cb7ef4f98e Multiple/general imporvements. 2019-06-25 01:17:10 +02:00
Ley0k 09bed43f97 Hard reset 2016-03-27 11:49:47 +02:00