mirror of
https://github.com/DrBeef/JKXR.git
synced 2024-11-24 21:11:03 +00:00
Ensure projection works on Meta Quest
Also fixed emplaced guns exiting by gesture use
This commit is contained in:
parent
4b1e010ca0
commit
9bda989514
7 changed files with 27 additions and 12 deletions
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.drbeef.jkquest"
|
package="com.drbeef.jkquest"
|
||||||
android:versionCode="31"
|
android:versionCode="32"
|
||||||
android:versionName="0.5.0" android:installLocation="auto" >
|
android:versionName="0.5.1" android:installLocation="auto" >
|
||||||
|
|
||||||
<!-- Tell the system this app requires OpenGL ES 3.1. -->
|
<!-- Tell the system this app requires OpenGL ES 3.1. -->
|
||||||
<uses-feature android:glEsVersion="0x00030002" android:required="true"/>
|
<uses-feature android:glEsVersion="0x00030002" android:required="true"/>
|
||||||
|
|
|
@ -2109,7 +2109,7 @@ void VR_ClearFrameBuffer( int width, int height)
|
||||||
glViewport( 0, 0, width, height );
|
glViewport( 0, 0, width, height );
|
||||||
|
|
||||||
//Black
|
//Black
|
||||||
glClearColor( 1.0f, 0.0f, 0.0f, 1.0f );
|
glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
|
||||||
|
|
||||||
glScissor( 0, 0, width, height );
|
glScissor( 0, 0, width, height );
|
||||||
glClear( GL_COLOR_BUFFER_BIT );
|
glClear( GL_COLOR_BUFFER_BIT );
|
||||||
|
@ -2134,13 +2134,30 @@ bool JKVR_GetVRProjection(int eye, float zNear, float zFar, float* projection)
|
||||||
{
|
{
|
||||||
if (!vr.cgzoommode)
|
if (!vr.cgzoommode)
|
||||||
{
|
{
|
||||||
|
#ifdef PICO_XR
|
||||||
XrMatrix4x4f_CreateProjectionFov(
|
XrMatrix4x4f_CreateProjectionFov(
|
||||||
&(gAppState.ProjectionMatrices[eye]), GRAPHICS_OPENGL_ES,
|
&(gAppState.ProjectionMatrices[eye]), GRAPHICS_OPENGL_ES,
|
||||||
gAppState.Projections[eye].fov, zNear, zFar);
|
gAppState.Projections[eye].fov, zNear, zFar);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef META_QUEST
|
||||||
|
XrFovf fov = {};
|
||||||
|
for (int eye = 0; eye < ovrMaxNumEyes; eye++) {
|
||||||
|
fov.angleLeft += gAppState.Projections[eye].fov.angleLeft / 2.0f;
|
||||||
|
fov.angleRight += gAppState.Projections[eye].fov.angleRight / 2.0f;
|
||||||
|
fov.angleUp += gAppState.Projections[eye].fov.angleUp / 2.0f;
|
||||||
|
fov.angleDown += gAppState.Projections[eye].fov.angleDown / 2.0f;
|
||||||
|
}
|
||||||
|
XrMatrix4x4f_CreateProjectionFov(
|
||||||
|
&(gAppState.ProjectionMatrices[eye]), GRAPHICS_OPENGL_ES,
|
||||||
|
fov, zNear, zFar);
|
||||||
|
#endif
|
||||||
|
|
||||||
memcpy(projection, gAppState.ProjectionMatrices[eye].m, 16 * sizeof(float));
|
memcpy(projection, gAppState.ProjectionMatrices[eye].m, 16 * sizeof(float));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ typedef struct {
|
||||||
|
|
||||||
bool misc_camera; // looking through a misc camera view entity
|
bool misc_camera; // looking through a misc camera view entity
|
||||||
bool remote_turret; // controlling a remote turret
|
bool remote_turret; // controlling a remote turret
|
||||||
|
bool emplaced_gun; // controlling an emplaced gun
|
||||||
bool remote_droid; // controlling a remote droid
|
bool remote_droid; // controlling a remote droid
|
||||||
bool remote_npc; // controlling a remote NPC (will also be true when controlling a droid)
|
bool remote_npc; // controlling a remote NPC (will also be true when controlling a droid)
|
||||||
|
|
||||||
|
|
|
@ -836,19 +836,16 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
// Process "use" gesture
|
// Process "use" gesture
|
||||||
if (vr_gesture_triggered_use->integer) {
|
if (vr_gesture_triggered_use->integer) {
|
||||||
float distanceToBody;
|
float distanceToBody;
|
||||||
bool controllerTracked;
|
|
||||||
if (vr_gesture_triggered_use->integer == 1) {
|
if (vr_gesture_triggered_use->integer == 1) {
|
||||||
// Gesture with off-hand
|
// Gesture with off-hand
|
||||||
distanceToBody = sqrt(vr.offhandoffset[0]*vr.offhandoffset[0] + vr.offhandoffset[2]*vr.offhandoffset[2]);
|
distanceToBody = sqrt(vr.offhandoffset[0]*vr.offhandoffset[0] + vr.offhandoffset[2]*vr.offhandoffset[2]);
|
||||||
controllerTracked = pOffTracking->Status & VRAPI_TRACKING_STATUS_POSITION_TRACKED;
|
|
||||||
} else {
|
} else {
|
||||||
// Gesture with dominant-hand
|
// Gesture with dominant-hand
|
||||||
distanceToBody = sqrt(vr.weaponoffset[0]*vr.weaponoffset[0] + vr.weaponoffset[2]*vr.weaponoffset[2]);
|
distanceToBody = sqrt(vr.weaponoffset[0]*vr.weaponoffset[0] + vr.weaponoffset[2]*vr.weaponoffset[2]);
|
||||||
controllerTracked = pDominantTracking->Status & VRAPI_TRACKING_STATUS_POSITION_TRACKED;
|
|
||||||
}
|
}
|
||||||
float boundary = vr_use_gesture_boundary->value;
|
|
||||||
bool gestureUseAllowed = !vr.weapon_stabilised && !vr.cin_camera && !vr.misc_camera && !vr.remote_turret;
|
bool gestureUseAllowed = !vr.weapon_stabilised && !vr.cin_camera && !vr.misc_camera && !vr.remote_turret && !vr.emplaced_gun;
|
||||||
if (gestureUseAllowed && controllerTracked && distanceToBody > boundary) {
|
if (gestureUseAllowed && distanceToBody > vr_use_gesture_boundary->value) {
|
||||||
if (!vr.useGestureActive) {
|
if (!vr.useGestureActive) {
|
||||||
vr.useGestureActive = true;
|
vr.useGestureActive = true;
|
||||||
sendButtonAction("+use", true);
|
sendButtonAction("+use", true);
|
||||||
|
|
|
@ -2936,6 +2936,7 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
|
||||||
vr->remote_npc = !Q_stricmp( "NPC", g_entities[cg.snap->ps.viewEntity].classname );
|
vr->remote_npc = !Q_stricmp( "NPC", g_entities[cg.snap->ps.viewEntity].classname );
|
||||||
vr->remote_droid = false;
|
vr->remote_droid = false;
|
||||||
vr->remote_turret = false;
|
vr->remote_turret = false;
|
||||||
|
vr->emplaced_gun = ( cg_entities[cg.snap->ps.clientNum].currentState.eFlags & EF_LOCKED_TO_WEAPON );
|
||||||
in_misccamera = false;
|
in_misccamera = false;
|
||||||
|
|
||||||
if (cg.snap->ps.viewEntity) {
|
if (cg.snap->ps.viewEntity) {
|
||||||
|
@ -2957,7 +2958,6 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
|
||||||
|| vr->remote_droid
|
|| vr->remote_droid
|
||||||
|| vr->remote_turret;
|
|| vr->remote_turret;
|
||||||
}
|
}
|
||||||
bool emplaced_gun = ( cg_entities[cg.snap->ps.clientNum].currentState.eFlags & EF_LOCKED_TO_WEAPON );
|
|
||||||
|
|
||||||
cg.refdef.worldscale = cg_worldScale.value;
|
cg.refdef.worldscale = cg_worldScale.value;
|
||||||
|
|
||||||
|
@ -3008,7 +3008,7 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Immersive cinematic sequence 6DoF
|
//Immersive cinematic sequence 6DoF
|
||||||
if ((in_camera && vr->immersive_cinematics) || emplaced_gun || cg.renderingThirdPerson)
|
if ((in_camera && vr->immersive_cinematics) || vr->emplaced_gun || cg.renderingThirdPerson)
|
||||||
{
|
{
|
||||||
BG_ConvertFromVR(vr->hmdposition_offset, cg.refdef.vieworg, cg.refdef.vieworg);
|
BG_ConvertFromVR(vr->hmdposition_offset, cg.refdef.vieworg, cg.refdef.vieworg);
|
||||||
}
|
}
|
||||||
|
@ -3027,7 +3027,7 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
|
||||||
cgi_R_LAGoggles();
|
cgi_R_LAGoggles();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!emplaced_gun && !in_misccamera && !in_camera) {
|
if (!vr->emplaced_gun && !in_misccamera && !in_camera) {
|
||||||
//Vertical Positional Movement
|
//Vertical Positional Movement
|
||||||
cg.refdef.vieworg[2] -= DEFAULT_PLAYER_HEIGHT;
|
cg.refdef.vieworg[2] -= DEFAULT_PLAYER_HEIGHT;
|
||||||
cg.refdef.vieworg[2] += (vr->hmdposition[1] + cg_heightAdjust.value) * cg_worldScale.value;
|
cg.refdef.vieworg[2] += (vr->hmdposition[1] + cg_heightAdjust.value) * cg_worldScale.value;
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in a new issue