mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2025-02-20 19:12:15 +00:00
Multiple changes
- Weapon alignment values courtesy of SkillFur (thanks!) - Lightning gun now renders lightning in the correct direction - Many cvar changes - Rail Gun and Rocket Launcher use newer implementation - Changed projection so that UI elements draw clearer - Made scoreboards easier to read but HUD slightly closer
This commit is contained in:
parent
2e97da5dda
commit
b7d89ff02b
20 changed files with 125 additions and 95 deletions
|
@ -65,14 +65,17 @@ int main(int argc, char* argv[]) {
|
|||
engine_t* engine = nullptr;
|
||||
engine = VR_Init(java);
|
||||
|
||||
//sleep(30);
|
||||
|
||||
//First set up resolution cached values
|
||||
int width, height;
|
||||
VR_GetRsolution( engine, &width, &height );
|
||||
VR_GetResolution( engine, &width, &height );
|
||||
|
||||
CON_LogcatFn(&ioq3_logfn);
|
||||
|
||||
std::string defaultArgs("+set fs_basepath ");
|
||||
defaultArgs += SDL_AndroidGetExternalStoragePath();
|
||||
// defaultArgs += " +set fs_game baseq3 +map q3dm6";
|
||||
defaultArgs += " +set fs_game baseq3";
|
||||
|
||||
char* args = new char[defaultArgs.length() + 1];
|
||||
|
@ -84,8 +87,6 @@ int main(int argc, char* argv[]) {
|
|||
|
||||
VR_EnterVR(engine, java);
|
||||
|
||||
//sleep(20);
|
||||
|
||||
while (1) {
|
||||
SDL_Event event;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
|
|
|
@ -270,18 +270,18 @@ CG_Draw3DModel
|
|||
|
||||
================
|
||||
*/
|
||||
extern int hudflags;
|
||||
void CG_Draw3DModel( float x, float y, float w, float h, qhandle_t model, qhandle_t skin, vec3_t origin, vec3_t angles ) {
|
||||
refdef_t refdef;
|
||||
refEntity_t ent;
|
||||
|
||||
|
||||
if ( !cg_draw3dIcons.integer || !cg_drawIcons.integer ) {
|
||||
return;
|
||||
}
|
||||
|
||||
hudflags = HUD_FLAGS_DRAWMODEL;
|
||||
CG_SetHUDFlags(HUD_FLAGS_DRAWMODEL);
|
||||
CG_AdjustFrom640( &x, &y, &w, &h );
|
||||
hudflags = 0;
|
||||
CG_RemoveHUDFlags(HUD_FLAGS_DRAWMODEL);
|
||||
|
||||
memset( &refdef, 0, sizeof( refdef ) );
|
||||
|
||||
|
@ -2681,7 +2681,7 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
|
|||
cg.refdef.vieworg[2] -= PLAYER_HEIGHT;
|
||||
cg.refdef.vieworg[2] += cgVR->hmdposition[1] * worldscale;
|
||||
|
||||
if (!cgVR->fullscreen) {
|
||||
if (!cgVR->virtual_screen) {
|
||||
VectorMA(cg.refdef.vieworg, -separation, cg.refdef.viewaxis[1], cg.refdef.vieworg);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,16 @@ int hudflags = 0;
|
|||
stereoFrame_t hudStereoView = STEREO_CENTER;
|
||||
extern vr_clientinfo_t* cgVR;
|
||||
|
||||
void CG_SetHUDFlags(int flags)
|
||||
{
|
||||
hudflags |= flags;
|
||||
}
|
||||
|
||||
void CG_RemoveHUDFlags(int flags)
|
||||
{
|
||||
hudflags &= ~flags;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
CG_AdjustFrom640
|
||||
|
@ -38,7 +48,7 @@ Adjusted for resolution and screen aspect ratio
|
|||
void CG_AdjustFrom640( float *x, float *y, float *w, float *h ) {
|
||||
|
||||
if (hudflags & HUD_FLAGS_FULLSCREEN ||
|
||||
cgVR->fullscreen)
|
||||
cgVR->virtual_screen)
|
||||
{
|
||||
// scale for screen sizes
|
||||
*x *= cgs.screenXScale;
|
||||
|
@ -49,9 +59,9 @@ void CG_AdjustFrom640( float *x, float *y, float *w, float *h ) {
|
|||
else // scale to clearly visible portion of VR screen
|
||||
{
|
||||
float screenXScale = cgs.screenXScale / 2.75f;
|
||||
float screenYScale = cgs.screenYScale / 2.75f;
|
||||
float screenYScale = cgs.screenYScale / 2.25f;
|
||||
|
||||
int xoffset = -80;
|
||||
int xoffset = (hudflags & HUD_FLAGS_SCOREBOARD) ? -24 : -60;
|
||||
if (hudStereoView == STEREO_LEFT) {
|
||||
xoffset *= -1;
|
||||
}
|
||||
|
|
|
@ -986,10 +986,14 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
|||
|
||||
if(es->clientNum == cg.snap->ps.clientNum && !cg.renderingThirdPerson)
|
||||
{
|
||||
vec3_t angles;
|
||||
CG_CalculateVRWeaponPosition(es->origin2, angles);
|
||||
/*
|
||||
if(cg_drawGun.integer == 2)
|
||||
VectorMA(es->origin2, 8, cg.refdef.viewaxis[1], es->origin2);
|
||||
else if(cg_drawGun.integer == 3)
|
||||
VectorMA(es->origin2, 4, cg.refdef.viewaxis[1], es->origin2);
|
||||
*/
|
||||
}
|
||||
|
||||
CG_RailTrail(ci, es->origin2, es->pos.trBase);
|
||||
|
|
|
@ -93,6 +93,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|||
//VR HUD
|
||||
#define HUD_FLAGS_FULLSCREEN 1
|
||||
#define HUD_FLAGS_DRAWMODEL 2
|
||||
#define HUD_FLAGS_SCOREBOARD 4
|
||||
|
||||
typedef enum {
|
||||
FOOTSTEP_NORMAL,
|
||||
|
@ -1239,6 +1240,8 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo
|
|||
//
|
||||
// cg_drawtools.c
|
||||
//
|
||||
void CG_SetHUDFlags(int flags);
|
||||
void CG_RemoveHUDFlags(int flags);
|
||||
void CG_AdjustFrom640( float *x, float *y, float *w, float *h );
|
||||
void CG_FillRect( float x, float y, float width, float height, const float *color );
|
||||
void CG_DrawPic( float x, float y, float width, float height, qhandle_t hShader );
|
||||
|
@ -1360,6 +1363,8 @@ void CG_NextWeapon_f( void );
|
|||
void CG_PrevWeapon_f( void );
|
||||
void CG_Weapon_f( void );
|
||||
|
||||
void CG_CalculateVRWeaponPosition( vec3_t origin, vec3_t angles );
|
||||
|
||||
void CG_RegisterWeapon( int weaponNum );
|
||||
void CG_RegisterItemVisuals( int itemNum );
|
||||
|
||||
|
|
|
@ -234,10 +234,10 @@ static cvarTable_t cvarTable[] = {
|
|||
{ &cg_draw3dIcons, "cg_draw3dIcons", "1", CVAR_ARCHIVE },
|
||||
{ &cg_drawIcons, "cg_drawIcons", "1", CVAR_ARCHIVE },
|
||||
{ &cg_drawAmmoWarning, "cg_drawAmmoWarning", "1", CVAR_ARCHIVE },
|
||||
{ &cg_drawAttacker, "cg_drawAttacker", "1", CVAR_ARCHIVE },
|
||||
{ &cg_drawAttacker, "cg_drawAttacker", "0", CVAR_ARCHIVE },
|
||||
{ &cg_drawCrosshair, "cg_drawCrosshair", "4", CVAR_ARCHIVE },
|
||||
{ &cg_drawCrosshairNames, "cg_drawCrosshairNames", "1", CVAR_ARCHIVE },
|
||||
{ &cg_drawRewards, "cg_drawRewards", "1", CVAR_ARCHIVE },
|
||||
{ &cg_drawCrosshairNames, "cg_drawCrosshairNames", "0", CVAR_ARCHIVE },
|
||||
{ &cg_drawRewards, "cg_drawRewards", "0", CVAR_ARCHIVE },
|
||||
{ &cg_crosshairSize, "cg_crosshairSize", "24", CVAR_ARCHIVE },
|
||||
{ &cg_crosshairHealth, "cg_crosshairHealth", "1", CVAR_ARCHIVE },
|
||||
{ &cg_crosshairX, "cg_crosshairX", "0", CVAR_ARCHIVE },
|
||||
|
@ -328,10 +328,10 @@ static cvarTable_t cvarTable[] = {
|
|||
{ &cg_noTaunt, "cg_noTaunt", "0", CVAR_ARCHIVE},
|
||||
#endif
|
||||
{ &cg_noProjectileTrail, "cg_noProjectileTrail", "0", CVAR_ARCHIVE},
|
||||
{ &cg_oldRail, "cg_oldRail", "1", CVAR_ARCHIVE},
|
||||
{ &cg_oldRocket, "cg_oldRocket", "1", CVAR_ARCHIVE},
|
||||
{ &cg_oldRail, "cg_oldRail", "0", CVAR_ARCHIVE},
|
||||
{ &cg_oldRocket, "cg_oldRocket", "0", CVAR_ARCHIVE},
|
||||
{ &cg_oldPlasma, "cg_oldPlasma", "1", CVAR_ARCHIVE},
|
||||
{ &cg_trueLightning, "cg_trueLightning", "0.0", CVAR_ARCHIVE}
|
||||
{ &cg_trueLightning, "cg_trueLightning", "0.2", CVAR_ARCHIVE}
|
||||
// { &cg_pmove_fixed, "cg_pmove_fixed", "0", CVAR_USERINFO | CVAR_ARCHIVE }
|
||||
};
|
||||
|
||||
|
|
|
@ -239,6 +239,8 @@ static int CG_TeamScoreboard( int y, team_t team, float fade, int maxClients, in
|
|||
color[0] = color[1] = color[2] = 1.0;
|
||||
color[3] = fade;
|
||||
|
||||
CG_SetHUDFlags(HUD_FLAGS_SCOREBOARD);
|
||||
|
||||
count = 0;
|
||||
for ( i = 0 ; i < cg.numScores && count < maxClients ; i++ ) {
|
||||
score = &cg.scores[i];
|
||||
|
@ -253,6 +255,8 @@ static int CG_TeamScoreboard( int y, team_t team, float fade, int maxClients, in
|
|||
count++;
|
||||
}
|
||||
|
||||
CG_RemoveHUDFlags(HUD_FLAGS_SCOREBOARD);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
@ -304,8 +308,9 @@ qboolean CG_DrawOldScoreboard( void ) {
|
|||
fade = *fadeColor;
|
||||
}
|
||||
|
||||
CG_SetHUDFlags(HUD_FLAGS_SCOREBOARD);
|
||||
|
||||
// fragged by ... line
|
||||
// fragged by ... line
|
||||
if ( cg.killerName[0] ) {
|
||||
s = va("Fragged by %s", cg.killerName );
|
||||
w = CG_DrawStrlen( s ) * BIGCHAR_WIDTH;
|
||||
|
@ -418,6 +423,8 @@ qboolean CG_DrawOldScoreboard( void ) {
|
|||
CG_LoadDeferredPlayers();
|
||||
}
|
||||
|
||||
CG_RemoveHUDFlags(HUD_FLAGS_SCOREBOARD);
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
|
@ -457,6 +464,8 @@ void CG_DrawTourneyScoreboard( void ) {
|
|||
int y;
|
||||
int i;
|
||||
|
||||
CG_SetHUDFlags(HUD_FLAGS_SCOREBOARD);
|
||||
|
||||
// request more scores regularly
|
||||
if ( cg.scoresRequestTime + 2000 < cg.time ) {
|
||||
cg.scoresRequestTime = cg.time;
|
||||
|
@ -529,6 +538,6 @@ void CG_DrawTourneyScoreboard( void ) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
CG_RemoveHUDFlags(HUD_FLAGS_SCOREBOARD);
|
||||
}
|
||||
|
||||
|
|
|
@ -1268,7 +1268,7 @@ static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
|
|||
/* int i;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
float a = cent->lerpAngles[i] - cg.refdefViewAngles[i];
|
||||
float a = cent->lerpAngles[i] - angle[i];
|
||||
if (a > 180) {
|
||||
a -= 360;
|
||||
}
|
||||
|
@ -1276,7 +1276,7 @@ static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
|
|||
a += 360;
|
||||
}
|
||||
|
||||
angle[i] = cg.refdefViewAngles[i] + a * (1.0 - cg_trueLightning.value);
|
||||
angle[i] = angle[i] + a * (1.0 - cg_trueLightning.value);
|
||||
if (angle[i] < 0) {
|
||||
angle[i] += 360;
|
||||
}
|
||||
|
@ -1289,17 +1289,24 @@ static void CG_LightningBolt( centity_t *cent, vec3_t origin ) {
|
|||
VectorCopy(cent->lerpOrigin, muzzlePoint );
|
||||
// VectorCopy(cg.refdef.vieworg, muzzlePoint );
|
||||
} else {
|
||||
vec3_t angle;
|
||||
vec3_t dummy;
|
||||
|
||||
CG_CalculateVRWeaponPosition(dummy, angle);
|
||||
|
||||
// !CPMA
|
||||
AngleVectors( cent->lerpAngles, forward, NULL, NULL );
|
||||
AngleVectors( angle, forward, NULL, NULL );
|
||||
VectorCopy(cent->lerpOrigin, muzzlePoint );
|
||||
}
|
||||
|
||||
anim = cent->currentState.legsAnim & ~ANIM_TOGGLEBIT;
|
||||
if ( anim == LEGS_WALKCR || anim == LEGS_IDLECR ) {
|
||||
muzzlePoint[2] += CROUCH_VIEWHEIGHT;
|
||||
} else {
|
||||
muzzlePoint[2] += DEFAULT_VIEWHEIGHT;
|
||||
}
|
||||
if (cent->currentState.number != cg.predictedPlayerState.clientNum) {
|
||||
anim = cent->currentState.legsAnim & ~ANIM_TOGGLEBIT;
|
||||
if (anim == LEGS_WALKCR || anim == LEGS_IDLECR) {
|
||||
muzzlePoint[2] += CROUCH_VIEWHEIGHT;
|
||||
} else {
|
||||
muzzlePoint[2] += DEFAULT_VIEWHEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
VectorMA( muzzlePoint, 14, forward, muzzlePoint );
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ typedef struct {
|
|||
void (*EndFrame)( int *frontEndMsec, int *backEndMsec );
|
||||
|
||||
#if __ANDROID__
|
||||
void (*SetVRHeadsetParms)( const ovrTracking2* ovrTracking, int renderBufferL, int renderBufferR );
|
||||
void (*SetVRHeadsetParms)( const ovrMatrix4f *projectionMatrix, int renderBufferL, int renderBufferR );
|
||||
#endif
|
||||
|
||||
int (*MarkFragments)( int numPoints, const vec3_t *points, const vec3_t projection,
|
||||
|
|
|
@ -276,7 +276,8 @@ void GL_SetProjectionMatrix(mat4_t matrix)
|
|||
|
||||
void GL_SetModelviewMatrix(mat4_t matrix, qboolean applyStereoView)
|
||||
{
|
||||
if (qfalse) //applyStereoView)
|
||||
/*
|
||||
if (applyStereoView)
|
||||
{
|
||||
if (tr.refdef.stereoFrame == STEREO_LEFT) {
|
||||
Mat4Multiply(tr.vrParms.viewL, matrix, glState.modelview);
|
||||
|
@ -285,7 +286,9 @@ void GL_SetModelviewMatrix(mat4_t matrix, qboolean applyStereoView)
|
|||
} else {
|
||||
Mat4Copy(matrix, glState.modelview);
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
*/
|
||||
{
|
||||
Mat4Copy(matrix, glState.modelview);
|
||||
}
|
||||
|
||||
|
|
|
@ -584,32 +584,11 @@ void R_Mat4Transpose( const float in[4][4], float* out ) {
|
|||
}
|
||||
|
||||
|
||||
void RE_SetVRHeadsetParms( const ovrTracking2* tracking, int renderBufferL, int renderBufferR ) {
|
||||
if (tracking) {
|
||||
R_Mat4Transpose(tracking->Eye[0].ProjectionMatrix.M, tr.vrParms.projectionL);
|
||||
R_Mat4Transpose(tracking->Eye[1].ProjectionMatrix.M, tr.vrParms.projectionR);
|
||||
|
||||
/*
|
||||
R_Mat4Transpose(tracking->Eye[0].ViewMatrix.M, tr.vrParms.viewL);
|
||||
R_Mat4Transpose(tracking->Eye[1].ViewMatrix.M, tr.vrParms.viewR);
|
||||
|
||||
const float worldToMeter = 37.0f; // https://quakewiki.org/wiki/unit, assume 25 units is 1 meter.
|
||||
tr.vrParms.viewL[12] *= worldToMeter;
|
||||
tr.vrParms.viewL[13] *= worldToMeter;
|
||||
tr.vrParms.viewL[14] *= worldToMeter;
|
||||
tr.vrParms.viewR[12] *= worldToMeter;
|
||||
tr.vrParms.viewR[13] *= worldToMeter;
|
||||
tr.vrParms.viewR[14] *= worldToMeter;
|
||||
|
||||
*/
|
||||
|
||||
tr.vrParms.renderBufferL = renderBufferL;
|
||||
tr.vrParms.renderBufferR = renderBufferR;
|
||||
|
||||
tr.vrParms.valid = qtrue;
|
||||
} else {
|
||||
tr.vrParms.valid = qfalse;
|
||||
}
|
||||
void RE_SetVRHeadsetParms( const ovrMatrix4f *projectionMatrix, int renderBufferL, int renderBufferR ) {
|
||||
R_Mat4Transpose(projectionMatrix->M, tr.vrParms.projection);
|
||||
tr.vrParms.renderBufferL = renderBufferL;
|
||||
tr.vrParms.renderBufferR = renderBufferR;
|
||||
tr.vrParms.valid = qtrue;
|
||||
}
|
||||
//#endif
|
||||
|
||||
|
|
|
@ -1215,15 +1215,15 @@ void R_Register( void )
|
|||
r_customwidth = ri.Cvar_Get( "r_customwidth", "1600", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
r_customheight = ri.Cvar_Get( "r_customheight", "1024", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
r_customPixelAspect = ri.Cvar_Get( "r_customPixelAspect", "1", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
r_simpleMipMaps = ri.Cvar_Get( "r_simpleMipMaps", "1", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
r_vertexLight = ri.Cvar_Get( "r_vertexLight", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
r_simpleMipMaps = ri.Cvar_Get( "r_simpleMipMaps", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
r_vertexLight = ri.Cvar_Get( "r_vertexLight", "1", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
r_uiFullScreen = ri.Cvar_Get( "r_uifullscreen", "0", 0);
|
||||
r_subdivisions = ri.Cvar_Get ("r_subdivisions", "4", CVAR_ARCHIVE | CVAR_LATCH);
|
||||
r_stereoEnabled = ri.Cvar_Get( "r_stereoEnabled", "0", CVAR_ARCHIVE | CVAR_LATCH);
|
||||
r_greyscale = ri.Cvar_Get("r_greyscale", "0", CVAR_ARCHIVE | CVAR_LATCH);
|
||||
ri.Cvar_CheckRange(r_greyscale, 0, 1, qfalse);
|
||||
|
||||
r_externalGLSL = ri.Cvar_Get( "r_externalGLSL", "0", CVAR_LATCH );
|
||||
r_externalGLSL = ri.Cvar_Get( "r_externalGLSL", "1", CVAR_LATCH );
|
||||
|
||||
r_hdr = ri.Cvar_Get( "r_hdr", "1", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
r_floatLightmap = ri.Cvar_Get( "r_floatLightmap", "0", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
|
@ -1297,8 +1297,8 @@ void R_Register( void )
|
|||
// archived variables that can change at any time
|
||||
//
|
||||
r_lodCurveError = ri.Cvar_Get( "r_lodCurveError", "250", CVAR_ARCHIVE|CVAR_CHEAT );
|
||||
r_lodbias = ri.Cvar_Get( "r_lodbias", "0", CVAR_ARCHIVE );
|
||||
r_flares = ri.Cvar_Get ("r_flares", "0", CVAR_ARCHIVE );
|
||||
r_lodbias = ri.Cvar_Get( "r_lodbias", "-1", CVAR_ARCHIVE );
|
||||
r_flares = ri.Cvar_Get ("r_flares", "1", CVAR_ARCHIVE );
|
||||
r_znear = ri.Cvar_Get( "r_znear", "4", CVAR_CHEAT );
|
||||
ri.Cvar_CheckRange( r_znear, 0.001f, 200, qfalse );
|
||||
r_zproj = ri.Cvar_Get( "r_zproj", "64", CVAR_ARCHIVE );
|
||||
|
@ -1307,8 +1307,8 @@ void R_Register( void )
|
|||
r_fastsky = ri.Cvar_Get( "r_fastsky", "0", CVAR_ARCHIVE );
|
||||
r_inGameVideo = ri.Cvar_Get( "r_inGameVideo", "1", CVAR_ARCHIVE );
|
||||
r_drawSun = ri.Cvar_Get( "r_drawSun", "0", CVAR_ARCHIVE );
|
||||
r_dynamiclight = ri.Cvar_Get( "r_dynamiclight", "1", CVAR_ARCHIVE );
|
||||
r_dlightBacks = ri.Cvar_Get( "r_dlightBacks", "1", CVAR_ARCHIVE );
|
||||
r_dynamiclight = ri.Cvar_Get( "r_dynamiclight", "0", CVAR_ARCHIVE );
|
||||
r_dlightBacks = ri.Cvar_Get( "r_dlightBacks", "0", CVAR_ARCHIVE );
|
||||
r_finish = ri.Cvar_Get ("r_finish", "0", CVAR_ARCHIVE);
|
||||
r_textureMode = ri.Cvar_Get( "r_textureMode", "GL_LINEAR_MIPMAP_LINEAR", CVAR_ARCHIVE );
|
||||
r_swapInterval = ri.Cvar_Get( "r_swapInterval", "0",
|
||||
|
|
|
@ -841,13 +841,9 @@ typedef struct {
|
|||
|
||||
typedef struct {
|
||||
qboolean valid;
|
||||
float projectionL[16];
|
||||
float projectionR[16];
|
||||
float viewL[16];
|
||||
float viewR[16];
|
||||
float projection[16];
|
||||
int renderBufferL;
|
||||
int renderBufferR;
|
||||
|
||||
int renderBufferOriginal;
|
||||
} vrParms_t;
|
||||
|
||||
|
@ -2508,7 +2504,7 @@ void RE_StretchPic ( float x, float y, float w, float h,
|
|||
void RE_BeginFrame( stereoFrame_t stereoFrame );
|
||||
void RE_EndFrame( int *frontEndMsec, int *backEndMsec );
|
||||
#if __ANDROID__
|
||||
void RE_SetVRHeadsetParms( const ovrTracking2* ovrTracking, int renderBufferL, int renderBufferR );
|
||||
void RE_SetVRHeadsetParms( const ovrMatrix4f *projectionMatrix, int renderBufferL, int renderBufferR );
|
||||
#endif
|
||||
void RE_SaveJPG(char * filename, int quality, int image_width, int image_height,
|
||||
unsigned char *image_buffer, int padding);
|
||||
|
|
|
@ -72,7 +72,7 @@ qboolean R_CompareVert(srfVert_t * v1, srfVert_t * v2, qboolean checkST)
|
|||
=============
|
||||
R_CalcTexDirs
|
||||
|
||||
Lengyel, Eric. “Computing Tangent Space Basis Vectors for an Arbitrary Mesh”. Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html
|
||||
Lengyel, Eric. <EFBFBD>Computing Tangent Space Basis Vectors for an Arbitrary Mesh<EFBFBD>. Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html
|
||||
=============
|
||||
*/
|
||||
void R_CalcTexDirs(vec3_t sdir, vec3_t tdir, const vec3_t v1, const vec3_t v2,
|
||||
|
@ -104,7 +104,7 @@ void R_CalcTexDirs(vec3_t sdir, vec3_t tdir, const vec3_t v1, const vec3_t v2,
|
|||
=============
|
||||
R_CalcTangentSpace
|
||||
|
||||
Lengyel, Eric. “Computing Tangent Space Basis Vectors for an Arbitrary Mesh”. Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html
|
||||
Lengyel, Eric. <EFBFBD>Computing Tangent Space Basis Vectors for an Arbitrary Mesh<EFBFBD>. Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html
|
||||
=============
|
||||
*/
|
||||
vec_t R_CalcTangentSpace(vec3_t tangent, vec3_t bitangent, const vec3_t normal, const vec3_t sdir, const vec3_t tdir)
|
||||
|
@ -765,12 +765,15 @@ void R_SetupProjection(viewParms_t *dest, float zProj, float zFar, qboolean comp
|
|||
height = ymax - ymin;
|
||||
|
||||
if (tr.vrParms.valid) {
|
||||
memcpy(&dest->projectionMatrix, &tr.vrParms.projection, sizeof(dest->projectionMatrix));
|
||||
/*
|
||||
if (dest->stereoFrame == STEREO_LEFT) {
|
||||
memcpy(&dest->projectionMatrix, &tr.vrParms.projectionL, sizeof(dest->projectionMatrix));
|
||||
}
|
||||
else {
|
||||
memcpy(&dest->projectionMatrix, &tr.vrParms.projectionR, sizeof(dest->projectionMatrix));
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
/*
|
||||
* offset the view origin of the viewer for stereo rendering
|
||||
|
|
|
@ -430,7 +430,7 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder, qbool
|
|||
|
||||
ri.Printf (PRINT_ALL, "...setting mode %d:", mode );
|
||||
|
||||
VR_GetRsolution(0, &glConfig.vidWidth, &glConfig.vidHeight);
|
||||
VR_GetResolution(0, &glConfig.vidWidth, &glConfig.vidHeight);
|
||||
/*
|
||||
if (mode == -2)
|
||||
{
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wstrict-prototypes"
|
||||
#include "../VrApi/Include/VrApi_Helpers.h"
|
||||
#include "../VrApi/Include/VrApi.h"
|
||||
|
||||
#pragma clang diagnostic pop
|
||||
|
||||
#include <EGL/egl.h>
|
||||
|
@ -40,15 +42,17 @@ void VR_InitCvars( void )
|
|||
vr_worldscale = Cvar_Get ("vr_worldscale", "32.0", CVAR_ARCHIVE);
|
||||
|
||||
// Values are: scale,right,up,forward,pitch,yaw,roll
|
||||
Cvar_Get ("vr_weapon_adjustment_1", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_2", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_3", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_4", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_5", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_6", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_7", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_8", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_9", "0.75,0,0,0,0,0,0", CVAR_ARCHIVE);
|
||||
// VALUES PROVIDED BY SkillFur - Thank-you!
|
||||
Cvar_Get ("vr_weapon_adjustment_1", "1,-4.0,7,-10,-20,-15,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_2", "0.8,-3.0,5.5,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_3", "0.7,-2.5,5.5,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_4", "0.75,-4.0,6.5,-4,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_5", "0.8,-3.8,6,7.5,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_6", "0.8,-3.3,6,7,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_7", "0.8,-3.3,6,0,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_8", "0.8,-3.5,6,1.5,0,0,0", CVAR_ARCHIVE);
|
||||
Cvar_Get ("vr_weapon_adjustment_9", "0.8,-5.5,6,0,0,0,0", CVAR_ARCHIVE);
|
||||
|
||||
}
|
||||
|
||||
void VR_Destroy( engine_t* engine )
|
||||
|
@ -85,8 +89,8 @@ engine_t* VR_GetEngine( void ) {
|
|||
|
||||
bool VR_useScreenLayer( void )
|
||||
{
|
||||
int keyCatcher = Key_GetCatcher( );
|
||||
return (bool)(clc.state != CA_ACTIVE ||
|
||||
( Key_GetCatcher( ) & KEYCATCH_UI ) ||
|
||||
( Key_GetCatcher( ) & KEYCATCH_CONSOLE ));
|
||||
( keyCatcher & (KEYCATCH_UI | KEYCATCH_CONSOLE) ));
|
||||
}
|
||||
//#endif
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
typedef struct {
|
||||
qboolean weapon_stabilised;
|
||||
qboolean right_handed;
|
||||
qboolean fullscreen;
|
||||
qboolean virtual_screen;
|
||||
|
||||
vec3_t hmdposition;
|
||||
vec3_t hmdposition_last; // Don't use this, it is just for calculating delta!
|
||||
|
|
|
@ -240,7 +240,7 @@ static void IN_VRJoystick( qboolean isRightController, float joystickX, float jo
|
|||
rotateAboutOrigin(-vr.hmdposition_delta[0] * factor * multiplier,
|
||||
vr.hmdposition_delta[2] * factor * multiplier, - vr.hmdorientation[YAW], positional);
|
||||
|
||||
if (vr.fullscreen)
|
||||
if (vr.virtual_screen)
|
||||
{
|
||||
const float x = joystickX * 4.0;
|
||||
const float y = joystickY * -4.0;
|
||||
|
@ -380,7 +380,7 @@ void IN_VRInputFrame( void )
|
|||
result = vrapi_SetClockLevels(VR_GetEngine()->ovr, 4, 4);
|
||||
assert(result == VRAPI_INITIALIZE_SUCCESS);
|
||||
|
||||
vr.fullscreen = VR_useScreenLayer();
|
||||
vr.virtual_screen = VR_useScreenLayer();
|
||||
|
||||
{
|
||||
// We extract Yaw, Pitch, Roll instead of directly using the orientation
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "../qcommon/q_shared.h"
|
||||
#include "../qcommon/qcommon.h"
|
||||
#include "../client/client.h"
|
||||
#include "../VrApi/Include/VrApi_Types.h"
|
||||
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wstrict-prototypes"
|
||||
|
@ -33,15 +34,15 @@ void APIENTRY VR_GLDebugLog(GLenum source, GLenum type, GLuint id,
|
|||
}
|
||||
}
|
||||
|
||||
void VR_GetRsolution(engine_t* engine, int *pWidth, int *pHeight)
|
||||
void VR_GetResolution(engine_t* engine, int *pWidth, int *pHeight)
|
||||
{
|
||||
static int width = 0;
|
||||
static int height = 0;
|
||||
|
||||
if (engine)
|
||||
{
|
||||
*pWidth = width = vrapi_GetSystemPropertyInt(&engine->java, VRAPI_SYS_PROP_SUGGESTED_EYE_TEXTURE_WIDTH) * SUPER_SAMPLE;
|
||||
*pHeight = height = vrapi_GetSystemPropertyInt(&engine->java, VRAPI_SYS_PROP_SUGGESTED_EYE_TEXTURE_HEIGHT) * SUPER_SAMPLE;
|
||||
*pHeight = height = *pWidth = width = vrapi_GetSystemPropertyInt(&engine->java, VRAPI_SYS_PROP_SUGGESTED_EYE_TEXTURE_WIDTH) * SUPER_SAMPLE;
|
||||
//*pHeight = height = vrapi_GetSystemPropertyInt(&engine->java, VRAPI_SYS_PROP_SUGGESTED_EYE_TEXTURE_HEIGHT) * SUPER_SAMPLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -58,7 +59,7 @@ void VR_InitRenderer( engine_t* engine ) {
|
|||
#endif
|
||||
|
||||
int eyeW, eyeH;
|
||||
VR_GetRsolution(engine, &eyeW, &eyeH);
|
||||
VR_GetResolution(engine, &eyeW, &eyeH);
|
||||
|
||||
for (int eye = 0; eye < VRAPI_FRAME_LAYER_EYE_MAX; ++eye) {
|
||||
framebuffer_t* framebuffer = &engine->framebuffers[eye];
|
||||
|
@ -205,13 +206,20 @@ void VR_DrawFrame( engine_t* engine ) {
|
|||
engine->predictedDisplayTime = vrapi_GetPredictedDisplayTime(engine->ovr, engine->frameIndex);
|
||||
engine->tracking = vrapi_GetPredictedTracking2(engine->ovr, engine->predictedDisplayTime);
|
||||
|
||||
//Now using a symmetrical render target, based on the horizontal FOV
|
||||
float fov = vrapi_GetSystemPropertyInt( engine->ovr, VRAPI_SYS_PROP_SUGGESTED_EYE_FOV_DEGREES_Y);
|
||||
|
||||
// Setup the projection matrix.
|
||||
const ovrMatrix4f projectionMatrix = ovrMatrix4f_CreateProjectionFov(
|
||||
fov, fov, 0.0f, 0.0f, 1.0f, 0.0f );
|
||||
|
||||
if (VR_useScreenLayer())
|
||||
{
|
||||
static ovrLayer_Union2 cylinderLayer;
|
||||
memset( &cylinderLayer, 0, sizeof( ovrLayer_Union2 ) );
|
||||
|
||||
int eyeW, eyeH;
|
||||
VR_GetRsolution(engine, &eyeW, &eyeH);
|
||||
VR_GetResolution(engine, &eyeW, &eyeH);
|
||||
|
||||
// Add a simple cylindrical layer
|
||||
cylinderLayer.Cylinder =
|
||||
|
@ -231,7 +239,7 @@ void VR_DrawFrame( engine_t* engine ) {
|
|||
frameDesc.Layers = layers;
|
||||
|
||||
const framebuffer_t* framebuffers = engine->framebuffers;
|
||||
re.SetVRHeadsetParms(&engine->tracking,
|
||||
re.SetVRHeadsetParms(&projectionMatrix,
|
||||
framebuffers[0].framebuffers[framebuffers[0].swapchainIndex],
|
||||
framebuffers[1].framebuffers[framebuffers[1].swapchainIndex]);
|
||||
Com_Frame();
|
||||
|
@ -252,11 +260,12 @@ void VR_DrawFrame( engine_t* engine ) {
|
|||
for (int eye = 0; eye < VRAPI_FRAME_LAYER_EYE_MAX; ++eye) {
|
||||
layer.Textures[eye].ColorSwapChain = engine->framebuffers[eye].colorTexture;
|
||||
layer.Textures[eye].SwapChainIndex = engine->framebuffers[eye].swapchainIndex;
|
||||
layer.Textures[eye].TexCoordsFromTanAngles = ovrMatrix4f_TanAngleMatrixFromProjection(&engine->tracking.Eye[eye].ProjectionMatrix);
|
||||
layer.Textures[eye].TexCoordsFromTanAngles = ovrMatrix4f_TanAngleMatrixFromProjection(&projectionMatrix);
|
||||
}
|
||||
|
||||
|
||||
const framebuffer_t* framebuffers = engine->framebuffers;
|
||||
re.SetVRHeadsetParms(&engine->tracking,
|
||||
re.SetVRHeadsetParms(&projectionMatrix,
|
||||
framebuffers[0].framebuffers[framebuffers[0].swapchainIndex],
|
||||
framebuffers[1].framebuffers[framebuffers[1].swapchainIndex]);
|
||||
Com_Frame();
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#include "vr_types.h"
|
||||
|
||||
void VR_GetRsolution( engine_t* engine, int *pWidth, int *pHeight );
|
||||
void VR_GetResolution( engine_t* engine, int *pWidth, int *pHeight );
|
||||
void VR_InitRenderer( engine_t* engine );
|
||||
void VR_DestroyRenderer( engine_t* engine );
|
||||
void VR_DrawFrame( engine_t* engine );
|
||||
|
|
Loading…
Reference in a new issue