Make stuff draw in both eyes

This commit is contained in:
Simon 2020-07-04 11:46:12 +01:00
parent 380daf2711
commit 1a8ae3ab0a
10 changed files with 93 additions and 58 deletions

View file

@ -618,7 +618,7 @@ void ovrFramebuffer_Resolve( ovrFramebuffer * frameBuffer )
// Flush this frame worth of commands.
glFlush();
GPUDropSync();
//GPUDropSync();
}
void ovrFramebuffer_Advance( ovrFramebuffer * frameBuffer )
@ -961,8 +961,8 @@ static void ovrApp_Clear( ovrApp * app )
app->FrameIndex = 1;
app->DisplayTime = 0;
app->SwapInterval = 1;
app->CpuLevel = 2;
app->GpuLevel = 2;
app->CpuLevel = 3;
app->GpuLevel = 3;
app->MainThreadTid = 0;
app->RenderThreadTid = 0;
@ -1316,7 +1316,7 @@ void RTCWVR_Init()
//Create Cvars
vr_snapturn_angle = Cvar_Get( "vr_snapturn_angle", "45", CVAR_ARCHIVE);
vr_reloadtimeoutms = Cvar_Get( "vr_reloadtimeoutms", "200", CVAR_ARCHIVE);
vr_positional_factor = Cvar_Get( "vr_positional_factor", "10", CVAR_ARCHIVE);
vr_positional_factor = Cvar_Get( "vr_positional_factor", "12", CVAR_ARCHIVE);
vr_walkdirection = Cvar_Get( "vr_walkdirection", "0", CVAR_ARCHIVE);
vr_weapon_pitchadjust = Cvar_Get( "vr_weapon_pitchadjust", "-20.0", CVAR_ARCHIVE);
vr_control_scheme = Cvar_Get( "vr_control_scheme", "0", CVAR_ARCHIVE);

View file

@ -8,7 +8,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := rtcw_client
LOCAL_CFLAGS = $(RTCW_BASE_CFLAGS) -DBOTLIB
LOCAL_CFLAGS = $(RTCW_BASE_CFLAGS) -DBOTLIB -Wno-switch -Wno-inconsistent-missing-override -Werror=format-security -fexceptions -fpermissive
LOCAL_LDFLAGS = $(RTCW_BASE_LDFLAGS)

View file

@ -311,7 +311,7 @@ cvarTable_t cvarTable[] = {
{ &cg_viewsize, "cg_viewsize", "100", CVAR_ARCHIVE },
{ &cg_letterbox, "cg_letterbox", "0", CVAR_TEMP }, //----(SA) added
{ &cg_stereoSeparation, "cg_stereoSeparation", "0.065", CVAR_ARCHIVE },
{ &cg_worldScale, "cg_worldScale", "37.5", CVAR_ARCHIVE },
{ &cg_worldScale, "cg_worldScale", "40.0", CVAR_ARCHIVE },
{ &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE },
{ &cg_gibs, "cg_gibs", "1", CVAR_ARCHIVE },
{ &cg_draw2D, "cg_draw2D", "1", CVAR_ARCHIVE },

View file

@ -1758,10 +1758,8 @@ static void CG_WeaponAnimation( playerState_t *ps, weaponInfo_t *weapon, int *we
void convertFromVR(vec3_t in, vec3_t offset, vec3_t out)
{
vec3_t vrSpace;
VectorSet(vrSpace, -in[2], in[0], in[1]);
vec3_t temp;
VectorScale(vrSpace, cg_worldScale.value, temp);
VectorScale(in, cg_worldScale.value, temp);
if (offset) {
VectorAdd(temp, offset, out);
@ -1781,6 +1779,8 @@ static void CG_CalculateWeaponPosition( vec3_t origin, vec3_t angles ) {
convertFromVR(cgVR->weaponoffset, cg.refdef.vieworg, origin);
VectorCopy(cgVR->weaponangles, angles);
angles[YAW] = cg.refdefViewAngles[YAW] - (cgVR->weaponangles[YAW] - cgVR->hmdorientation[YAW]);
return;
float scale;

View file

@ -537,7 +537,7 @@ text to the screen.
void RTCWVR_FrameSetup();
void RTCWVR_finishEyeBuffer(int eye );
void RTCWVR_setUseScreenLayer(qboolean use);
qboolean RTCWVR_useScreenLayer();
void RTCWVR_processHaptics();
void RTCWVR_getHMDOrientation();
qboolean RTCWVR_processMessageQueue();
@ -557,47 +557,37 @@ void SCR_UpdateScreen( void ) {
recursive = 1;
RTCWVR_FrameSetup();
RTCWVR_processMessageQueue();
/* if (gamestate == GS_LEVEL && !getMenuState()) {
RTCWVR_setUseScreenLayer(false);
}
else {
//Ensure we are drawing on virtual screen
RTCWVR_setUseScreenLayer(true);
}*/
//Get controller state here
RTCWVR_getHMDOrientation();
RTCWVR_getTrackedRemotesOrientation();
RTCWVR_processHaptics();
GPUWaitSync();
//GPUWaitSync();
//Draw twice for Quest
SCR_DrawScreenField( STEREO_LEFT );
RTCWVR_finishEyeBuffer(0);
//Only need to do this when viewing screen mode
//if (RTCWVR_useScreenLayer())
{
if (com_speeds->integer) {
re.EndFrame(STEREO_LEFT, &time_frontend, &time_backend);
} else {
re.EndFrame(STEREO_LEFT, NULL, NULL);
}
}
SCR_DrawScreenField( STEREO_RIGHT );
RTCWVR_finishEyeBuffer(1);
/*
#ifndef HAVE_GLES
// if running in stereo, we need to draw the frame twice
if ( cls.glconfig.stereoEnabled ) {
SCR_DrawScreenField( STEREO_LEFT );
SCR_DrawScreenField( STEREO_RIGHT );
} else
#endif
{
SCR_DrawScreenField( STEREO_CENTER );
}*/
if ( com_speeds->integer ) {
re.EndFrame( &time_frontend, &time_backend );
re.EndFrame( STEREO_RIGHT, &time_frontend, &time_backend );
} else {
re.EndFrame( NULL, NULL );
re.EndFrame( STEREO_RIGHT, NULL, NULL );
}
recursive = 0;

View file

@ -1591,6 +1591,34 @@ void RB_ShowImages( void ) {
}
/*
=============
RB_Flush
=============
*/
const void *RB_Flush( const void *data ) {
const swapBuffersCommand_t *cmd;
// finish any 2D drawing if needed
if ( tess.numIndexes ) {
RB_EndSurface();
}
// texture swapping test
if ( r_showImages->integer ) {
RB_ShowImages();
}
cmd = (const swapBuffersCommand_t *)data;
backEnd.projection2D = qfalse;
return (const void *)( cmd + 1 );
}
/*
=============
RB_SwapBuffers
@ -1686,6 +1714,9 @@ void RB_ExecuteRenderCommands( const void *data ) {
case RC_SWAP_BUFFERS:
data = RB_SwapBuffers( data );
break;
case RC_FLUSH:
data = RB_Flush( data );
break;
case RC_END_OF_LIST:
default:

View file

@ -544,31 +544,44 @@ RE_EndFrame
Returns the number of msec spent in the back end
=============
*/
void RE_EndFrame( int *frontEndMsec, int *backEndMsec ) {
void RE_EndFrame( int stereoFrame, int *frontEndMsec, int *backEndMsec ) {
swapBuffersCommand_t *cmd;
if ( !tr.registered ) {
return;
}
cmd = R_GetCommandBuffer( sizeof( *cmd ) );
if ( !cmd ) {
return;
}
cmd->commandId = RC_SWAP_BUFFERS;
if ( !tr.registered ) {
return;
}
R_IssueRenderCommands( qtrue );
cmd = R_GetCommandBuffer(sizeof(*cmd));
if (!cmd) {
return;
}
// use the other buffers next frame, because another CPU
// may still be rendering into the current ones
R_ToggleSmpFrame();
if (stereoFrame == 2) {
cmd->commandId = RC_SWAP_BUFFERS;
} else {
cmd->commandId = RC_FLUSH;
}
if ( frontEndMsec ) {
*frontEndMsec = tr.frontEndMsec;
if (stereoFrame == 2)
{
R_IssueRenderCommands( qtrue );
}
tr.frontEndMsec = 0;
if ( backEndMsec ) {
*backEndMsec = backEnd.pc.msec;
}
backEnd.pc.msec = 0;
else
{
R_IssueRenderCommands( qfalse );
}
// use the other buffers next frame, because another CPU
// may still be rendering into the current ones
R_ToggleSmpFrame();
if (frontEndMsec) {
*frontEndMsec = tr.frontEndMsec;
}
tr.frontEndMsec = 0;
if (backEndMsec) {
*backEndMsec = backEnd.pc.msec;
}
backEnd.pc.msec = 0;
}

View file

@ -1717,7 +1717,8 @@ typedef enum {
RC_STRETCH_PIC_GRADIENT, // (SA) added
RC_DRAW_SURFS,
RC_DRAW_BUFFER,
RC_SWAP_BUFFERS
RC_SWAP_BUFFERS,
RC_FLUSH
} renderCommand_t;
@ -1772,7 +1773,7 @@ void RE_StretchPic( float x, float y, float w, float h,
void RE_StretchPicGradient( float x, float y, float w, float h,
float s1, float t1, float s2, float t2, qhandle_t hShader, const float *gradientColor, int gradientType );
void RE_BeginFrame( stereoFrame_t stereoFrame );
void RE_EndFrame( int *frontEndMsec, int *backEndMsec );
void RE_EndFrame( int stereoFrame, int *frontEndMsec, int *backEndMsec );
void SaveJPG( char * filename, int quality, int image_width, int image_height, unsigned char *image_buffer );
// font stuff

View file

@ -97,7 +97,7 @@ typedef struct {
void ( *BeginFrame )( stereoFrame_t stereoFrame );
// if the pointers are not NULL, timing info will be returned
void ( *EndFrame )( int *frontEndMsec, int *backEndMsec );
void ( *EndFrame )( stereoFrame_t stereoFrame, int *frontEndMsec, int *backEndMsec );
int ( *MarkFragments )( int numPoints, const vec3_t *points, const vec3_t projection,

View file

@ -563,12 +563,12 @@ void RE_RenderScene( const refdef_t *fd ) {
{
float yawDelta = (vr.hmdorientation[YAW] - last_hmd_yaw);
yaw += yawDelta;
last_hmd_yaw = vr.hmdorientation[YAW];
}
viewAngles[YAW] = yaw;
AnglesToAxis(viewAngles, parms.or.axis);
}
last_hmd_yaw = vr.hmdorientation[YAW];
VectorCopy( fd->vieworg, parms.pvsOrigin );