mirror of
https://github.com/DrBeef/RTCWQuest.git
synced 2024-11-15 00:51:32 +00:00
Lots of change going on...
This commit is contained in:
parent
1f5a068b27
commit
8a4ad32dd1
19 changed files with 203 additions and 475 deletions
|
@ -80,8 +80,6 @@ int GPU_LEVEL = 4;
|
||||||
int NUM_MULTI_SAMPLES = 1;
|
int NUM_MULTI_SAMPLES = 1;
|
||||||
float SS_MULTIPLIER = 1.25f;
|
float SS_MULTIPLIER = 1.25f;
|
||||||
|
|
||||||
vec2_t cylinderSize = {1280, 720};
|
|
||||||
|
|
||||||
jclass clazz;
|
jclass clazz;
|
||||||
|
|
||||||
float radians(float deg) {
|
float radians(float deg) {
|
||||||
|
@ -133,12 +131,15 @@ LAMBDA1VR Stuff
|
||||||
================================================================================
|
================================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Qcommon_Init (int argc, char **argv);
|
|
||||||
|
|
||||||
qboolean RTCWVR_useScreenLayer()
|
qboolean RTCWVR_useScreenLayer()
|
||||||
{
|
{
|
||||||
//TODO
|
//TODO
|
||||||
return qtrue;//(showingScreenLayer || (cls.state != ca_connected && cls.state != ca_active) || cls.key_dest != key_game) || cl.cinematictime != 0;
|
return (qboolean)(showingScreenLayer ||
|
||||||
|
(cls.state == CA_CINEMATIC) ||
|
||||||
|
(cls.state == CA_LOADING) ||
|
||||||
|
(clc.demoplaying) ||
|
||||||
|
( Key_GetCatcher( ) & KEYCATCH_UI ) ||
|
||||||
|
( Key_GetCatcher( ) & KEYCATCH_CONSOLE ));
|
||||||
}
|
}
|
||||||
|
|
||||||
int runStatus = -1;
|
int runStatus = -1;
|
||||||
|
@ -582,6 +583,32 @@ void ovrFramebuffer_SetNone()
|
||||||
GL( gles_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, 0 ) );
|
GL( gles_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, 0 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GLsync syncBuff = NULL;
|
||||||
|
|
||||||
|
void GPUDropSync()
|
||||||
|
{
|
||||||
|
if (syncBuff != NULL)
|
||||||
|
{
|
||||||
|
glDeleteSync(syncBuff);
|
||||||
|
}
|
||||||
|
|
||||||
|
syncBuff = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPUWaitSync()
|
||||||
|
{
|
||||||
|
if( syncBuff )
|
||||||
|
{
|
||||||
|
GLenum status = glClientWaitSync(syncBuff, GL_SYNC_FLUSH_COMMANDS_BIT, 1000 * 1000 * 50); // Wait for a max of 50ms...
|
||||||
|
if (status != GL_ALREADY_SIGNALED && status != GL_CONDITION_SATISFIED)
|
||||||
|
{
|
||||||
|
LOGE("Error on glClientWaitSync: %d\n", status);
|
||||||
|
}
|
||||||
|
glDeleteSync(syncBuff);
|
||||||
|
syncBuff = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ovrFramebuffer_Resolve( ovrFramebuffer * frameBuffer )
|
void ovrFramebuffer_Resolve( ovrFramebuffer * frameBuffer )
|
||||||
{
|
{
|
||||||
// Discard the depth buffer, so the tiler won't need to write it back out to memory.
|
// Discard the depth buffer, so the tiler won't need to write it back out to memory.
|
||||||
|
@ -590,6 +617,8 @@ void ovrFramebuffer_Resolve( ovrFramebuffer * frameBuffer )
|
||||||
|
|
||||||
// Flush this frame worth of commands.
|
// Flush this frame worth of commands.
|
||||||
glFlush();
|
glFlush();
|
||||||
|
|
||||||
|
GPUDropSync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ovrFramebuffer_Advance( ovrFramebuffer * frameBuffer )
|
void ovrFramebuffer_Advance( ovrFramebuffer * frameBuffer )
|
||||||
|
@ -854,7 +883,7 @@ qboolean isMultiplayer()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
========================
|
========================
|
||||||
Android_Vibrate
|
RTCWVR_Vibrate
|
||||||
========================
|
========================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -862,7 +891,7 @@ Android_Vibrate
|
||||||
float vibration_channel_duration[2] = {0.0f, 0.0f};
|
float vibration_channel_duration[2] = {0.0f, 0.0f};
|
||||||
float vibration_channel_intensity[2] = {0.0f, 0.0f};
|
float vibration_channel_intensity[2] = {0.0f, 0.0f};
|
||||||
|
|
||||||
void Android_Vibrate( float duration, int channel, float intensity )
|
void RTCWVR_Vibrate( float duration, int channel, float intensity )
|
||||||
{
|
{
|
||||||
if (vibration_channel_duration[channel] > 0.0f)
|
if (vibration_channel_duration[channel] > 0.0f)
|
||||||
return;
|
return;
|
||||||
|
@ -1254,16 +1283,10 @@ int m_height;
|
||||||
|
|
||||||
qboolean R_SetMode( void );
|
qboolean R_SetMode( void );
|
||||||
|
|
||||||
void Android_GetScreenRes(int *width, int *height)
|
void RTCWVR_GetScreenRes(int *width, int *height)
|
||||||
{
|
{
|
||||||
if (RTCWVR_useScreenLayer())
|
*width = m_width;
|
||||||
{
|
*height = m_height;
|
||||||
*width = cylinderSize[0];
|
|
||||||
*height = cylinderSize[1];
|
|
||||||
} else {
|
|
||||||
*width = m_width;
|
|
||||||
*height = m_height;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Android_MessageBox(const char *title, const char *text)
|
void Android_MessageBox(const char *title, const char *text)
|
||||||
|
@ -1277,7 +1300,7 @@ void VR_Init()
|
||||||
{
|
{
|
||||||
//Initialise all our variables
|
//Initialise all our variables
|
||||||
playerYaw = 0.0f;
|
playerYaw = 0.0f;
|
||||||
showingScreenLayer = qtrue;
|
showingScreenLayer = qfalse;
|
||||||
remote_movementSideways = 0.0f;
|
remote_movementSideways = 0.0f;
|
||||||
remote_movementForward = 0.0f;
|
remote_movementForward = 0.0f;
|
||||||
remote_movementUp = 0.0f;
|
remote_movementUp = 0.0f;
|
||||||
|
@ -1291,7 +1314,8 @@ void VR_Init()
|
||||||
|
|
||||||
//Create Cvars
|
//Create Cvars
|
||||||
vr_snapturn_angle = Cvar_Get( "vr_snapturn_angle", "45", CVAR_ARCHIVE);
|
vr_snapturn_angle = Cvar_Get( "vr_snapturn_angle", "45", CVAR_ARCHIVE);
|
||||||
vr_positional_factor = Cvar_Get( "vr_positional_factor", "2000", CVAR_ARCHIVE);
|
vr_reloadtimeoutms = Cvar_Get( "vr_reloadtimeoutms", "200", CVAR_ARCHIVE);
|
||||||
|
vr_positional_factor = Cvar_Get( "vr_positional_factor", "10", CVAR_ARCHIVE);
|
||||||
vr_walkdirection = Cvar_Get( "vr_walkdirection", "0", CVAR_ARCHIVE);
|
vr_walkdirection = Cvar_Get( "vr_walkdirection", "0", CVAR_ARCHIVE);
|
||||||
vr_weapon_pitchadjust = Cvar_Get( "vr_weapon_pitchadjust", "-20.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);
|
vr_control_scheme = Cvar_Get( "vr_control_scheme", "0", CVAR_ARCHIVE);
|
||||||
|
@ -1300,13 +1324,6 @@ void VR_Init()
|
||||||
vr_weapon_stabilised = Cvar_Get( "vr_weapon_stabilised", "0.0", CVAR_LATCH);
|
vr_weapon_stabilised = Cvar_Get( "vr_weapon_stabilised", "0.0", CVAR_LATCH);
|
||||||
vr_lasersight = Cvar_Get( "vr_lasersight", "0", CVAR_LATCH);
|
vr_lasersight = Cvar_Get( "vr_lasersight", "0", CVAR_LATCH);
|
||||||
vr_comfort_mask = Cvar_Get( "vr_comfort_mask", "0.0", CVAR_ARCHIVE);
|
vr_comfort_mask = Cvar_Get( "vr_comfort_mask", "0.0", CVAR_ARCHIVE);
|
||||||
|
|
||||||
//The Engine (which is a derivative of Quake) uses a very specific unit size:
|
|
||||||
//Wolfenstein 3D, DOOM and QUAKE use the same coordinate/unit system:
|
|
||||||
//8 foot (96 inch) height wall == 64 units, 1.5 inches per pixel unit
|
|
||||||
//1.0 pixel unit / 1.5 inch == 0.666666 pixel units per inch
|
|
||||||
//This make a world scale of: 26.2467
|
|
||||||
vr_worldscale = Cvar_Get( "vr_worldscale", "26.2467", CVAR_ARCHIVE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ void interactWithTouchScreen(ovrTracking *tracking, ovrInputStateTrackedRemote *
|
||||||
|
|
||||||
//Called from engine code
|
//Called from engine code
|
||||||
qboolean RTCWVR_useScreenLayer();
|
qboolean RTCWVR_useScreenLayer();
|
||||||
void RTCWVR_GetScreenRes(uint32_t *width, uint32_t *height);
|
void RTCWVR_GetScreenRes(int *width, int *height);
|
||||||
void RTCWVR_Vibrate(float duration, int channel, float intensity );
|
void RTCWVR_Vibrate(float duration, int channel, float intensity );
|
||||||
qboolean RTCWVR_processMessageQueue();
|
qboolean RTCWVR_processMessageQueue();
|
||||||
void RTCWVR_FrameSetup();
|
void RTCWVR_FrameSetup();
|
||||||
|
@ -83,4 +83,7 @@ void RTCWVR_prepareEyeBuffer(int eye );
|
||||||
void RTCWVR_finishEyeBuffer(int eye );
|
void RTCWVR_finishEyeBuffer(int eye );
|
||||||
void RTCWVR_submitFrame();
|
void RTCWVR_submitFrame();
|
||||||
|
|
||||||
|
void GPUDropSync();
|
||||||
|
void GPUWaitSync();
|
||||||
|
|
||||||
#endif //vrcommon_h
|
#endif //vrcommon_h
|
|
@ -59,321 +59,6 @@ void restoreRenderState( renderState * state )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
ovrGeometry
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum VertexAttributeLocation
|
|
||||||
{
|
|
||||||
VERTEX_ATTRIBUTE_LOCATION_POSITION,
|
|
||||||
VERTEX_ATTRIBUTE_LOCATION_COLOR,
|
|
||||||
VERTEX_ATTRIBUTE_LOCATION_UV,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
enum VertexAttributeLocation location;
|
|
||||||
const char * name;
|
|
||||||
} ovrVertexAttribute;
|
|
||||||
|
|
||||||
static ovrVertexAttribute ProgramVertexAttributes[] =
|
|
||||||
{
|
|
||||||
{ VERTEX_ATTRIBUTE_LOCATION_POSITION, "vertexPosition" },
|
|
||||||
{ VERTEX_ATTRIBUTE_LOCATION_COLOR, "vertexColor" },
|
|
||||||
{ VERTEX_ATTRIBUTE_LOCATION_UV, "vertexUv" },
|
|
||||||
};
|
|
||||||
|
|
||||||
static void ovrGeometry_Clear( ovrGeometry * geometry )
|
|
||||||
{
|
|
||||||
geometry->VertexBuffer = 0;
|
|
||||||
geometry->IndexBuffer = 0;
|
|
||||||
geometry->VertexArrayObject = 0;
|
|
||||||
geometry->VertexCount = 0;
|
|
||||||
geometry->IndexCount = 0;
|
|
||||||
for ( int i = 0; i < MAX_VERTEX_ATTRIB_POINTERS; i++ )
|
|
||||||
{
|
|
||||||
memset( &geometry->VertexAttribs[i], 0, sizeof( geometry->VertexAttribs[i] ) );
|
|
||||||
geometry->VertexAttribs[i].Index = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ovrGeometry_CreateGroundPlane( ovrGeometry * geometry )
|
|
||||||
{
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
float positions[4][4];
|
|
||||||
unsigned char colors[4][4];
|
|
||||||
} ovrCubeVertices;
|
|
||||||
|
|
||||||
static const ovrCubeVertices cubeVertices =
|
|
||||||
{
|
|
||||||
// positions
|
|
||||||
{
|
|
||||||
{ 4.5f, -1.2f, 4.5f, 1.0f },
|
|
||||||
{ 4.5f, -1.2f, -4.5f, 1.0f },
|
|
||||||
{ -4.5f, -1.2f, -4.5f, 1.0f },
|
|
||||||
{ -4.5f, -1.2f, 4.5f, 1.0f }
|
|
||||||
},
|
|
||||||
// colors
|
|
||||||
{
|
|
||||||
{ 255, 0, 0, 255 },
|
|
||||||
{ 0, 255, 0, 255 },
|
|
||||||
{ 0, 0, 255, 255 },
|
|
||||||
{ 255, 255, 0, 255 },
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const unsigned short cubeIndices[6] =
|
|
||||||
{
|
|
||||||
0, 1, 2,
|
|
||||||
0, 2, 3,
|
|
||||||
};
|
|
||||||
|
|
||||||
geometry->VertexCount = 4;
|
|
||||||
geometry->IndexCount = 6;
|
|
||||||
|
|
||||||
geometry->VertexAttribs[0].Index = VERTEX_ATTRIBUTE_LOCATION_POSITION;
|
|
||||||
geometry->VertexAttribs[0].Size = 4;
|
|
||||||
geometry->VertexAttribs[0].Type = GL_FLOAT;
|
|
||||||
geometry->VertexAttribs[0].Normalized = false;
|
|
||||||
geometry->VertexAttribs[0].Stride = sizeof( cubeVertices.positions[0] );
|
|
||||||
geometry->VertexAttribs[0].Pointer = (const GLvoid *)offsetof( ovrCubeVertices, positions );
|
|
||||||
|
|
||||||
geometry->VertexAttribs[1].Index = VERTEX_ATTRIBUTE_LOCATION_COLOR;
|
|
||||||
geometry->VertexAttribs[1].Size = 4;
|
|
||||||
geometry->VertexAttribs[1].Type = GL_UNSIGNED_BYTE;
|
|
||||||
geometry->VertexAttribs[1].Normalized = true;
|
|
||||||
geometry->VertexAttribs[1].Stride = sizeof( cubeVertices.colors[0] );
|
|
||||||
geometry->VertexAttribs[1].Pointer = (const GLvoid *)offsetof( ovrCubeVertices, colors );
|
|
||||||
|
|
||||||
renderState state;
|
|
||||||
getCurrentRenderState(&state);
|
|
||||||
|
|
||||||
GL( glGenBuffers( 1, &geometry->VertexBuffer ) );
|
|
||||||
GL( glBindBuffer( GL_ARRAY_BUFFER, geometry->VertexBuffer ) );
|
|
||||||
GL( glBufferData( GL_ARRAY_BUFFER, sizeof( cubeVertices ), &cubeVertices, GL_STATIC_DRAW ) );
|
|
||||||
|
|
||||||
GL( glGenBuffers( 1, &geometry->IndexBuffer ) );
|
|
||||||
GL( glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, geometry->IndexBuffer ) );
|
|
||||||
GL( glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof( cubeIndices ), cubeIndices, GL_STATIC_DRAW ) );
|
|
||||||
|
|
||||||
restoreRenderState(&state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ovrGeometry_Destroy( ovrGeometry * geometry )
|
|
||||||
{
|
|
||||||
GL( glDeleteBuffers( 1, &geometry->IndexBuffer ) );
|
|
||||||
GL( glDeleteBuffers( 1, &geometry->VertexBuffer ) );
|
|
||||||
|
|
||||||
ovrGeometry_Clear( geometry );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ovrGeometry_CreateVAO( ovrGeometry * geometry )
|
|
||||||
{
|
|
||||||
renderState state;
|
|
||||||
getCurrentRenderState(&state);
|
|
||||||
|
|
||||||
GL( glGenVertexArrays( 1, &geometry->VertexArrayObject ) );
|
|
||||||
GL( glBindVertexArray( geometry->VertexArrayObject ) );
|
|
||||||
|
|
||||||
GL( glBindBuffer( GL_ARRAY_BUFFER, geometry->VertexBuffer ) );
|
|
||||||
|
|
||||||
for ( int i = 0; i < MAX_VERTEX_ATTRIB_POINTERS; i++ )
|
|
||||||
{
|
|
||||||
if ( geometry->VertexAttribs[i].Index != -1 )
|
|
||||||
{
|
|
||||||
GL( glEnableVertexAttribArray( geometry->VertexAttribs[i].Index ) );
|
|
||||||
GL( glVertexAttribPointer( geometry->VertexAttribs[i].Index, geometry->VertexAttribs[i].Size,
|
|
||||||
geometry->VertexAttribs[i].Type, geometry->VertexAttribs[i].Normalized,
|
|
||||||
geometry->VertexAttribs[i].Stride, geometry->VertexAttribs[i].Pointer ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GL( glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, geometry->IndexBuffer ) );
|
|
||||||
|
|
||||||
restoreRenderState(&state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ovrGeometry_DestroyVAO( ovrGeometry * geometry )
|
|
||||||
{
|
|
||||||
GL( glDeleteVertexArrays( 1, &geometry->VertexArrayObject ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
ovrProgram
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
UNIFORM_VIEW_PROJ_MATRIX,
|
|
||||||
} index;
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
UNIFORM_TYPE_VECTOR4,
|
|
||||||
UNIFORM_TYPE_MATRIX4X4,
|
|
||||||
UNIFORM_TYPE_INT,
|
|
||||||
UNIFORM_TYPE_BUFFER,
|
|
||||||
} type;
|
|
||||||
const char * name;
|
|
||||||
} ovrUniform;
|
|
||||||
|
|
||||||
static ovrUniform ProgramUniforms[] =
|
|
||||||
{
|
|
||||||
{ UNIFORM_VIEW_PROJ_MATRIX, UNIFORM_TYPE_MATRIX4X4, "viewProjectionMatrix" },
|
|
||||||
};
|
|
||||||
|
|
||||||
static void ovrProgram_Clear( ovrProgram * program )
|
|
||||||
{
|
|
||||||
program->Program = 0;
|
|
||||||
program->VertexShader = 0;
|
|
||||||
program->FragmentShader = 0;
|
|
||||||
memset( program->UniformLocation, 0, sizeof( program->UniformLocation ) );
|
|
||||||
memset( program->UniformBinding, 0, sizeof( program->UniformBinding ) );
|
|
||||||
memset( program->Textures, 0, sizeof( program->Textures ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool ovrProgram_Create( ovrProgram * program, const char * vertexSource, const char * fragmentSource )
|
|
||||||
{
|
|
||||||
GLint r;
|
|
||||||
|
|
||||||
GL( program->VertexShader = glCreateShader( GL_VERTEX_SHADER ) );
|
|
||||||
|
|
||||||
GL( glShaderSource( program->VertexShader, 1, &vertexSource, 0 ) );
|
|
||||||
GL( glCompileShader( program->VertexShader ) );
|
|
||||||
GL( glGetShaderiv( program->VertexShader, GL_COMPILE_STATUS, &r ) );
|
|
||||||
if ( r == GL_FALSE )
|
|
||||||
{
|
|
||||||
GLchar msg[4096];
|
|
||||||
GL( glGetShaderInfoLog( program->VertexShader, sizeof( msg ), 0, msg ) );
|
|
||||||
ALOGE( "%s\n%s\n", vertexSource, msg );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
GL( program->FragmentShader = glCreateShader( GL_FRAGMENT_SHADER ) );
|
|
||||||
GL( glShaderSource( program->FragmentShader, 1, &fragmentSource, 0 ) );
|
|
||||||
GL( glCompileShader( program->FragmentShader ) );
|
|
||||||
GL( glGetShaderiv( program->FragmentShader, GL_COMPILE_STATUS, &r ) );
|
|
||||||
if ( r == GL_FALSE )
|
|
||||||
{
|
|
||||||
GLchar msg[4096];
|
|
||||||
GL( glGetShaderInfoLog( program->FragmentShader, sizeof( msg ), 0, msg ) );
|
|
||||||
ALOGE( "%s\n%s\n", fragmentSource, msg );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
GL( program->Program = glCreateProgram() );
|
|
||||||
GL( glAttachShader( program->Program, program->VertexShader ) );
|
|
||||||
GL( glAttachShader( program->Program, program->FragmentShader ) );
|
|
||||||
|
|
||||||
// Bind the vertex attribute locations.
|
|
||||||
for ( int i = 0; i < sizeof( ProgramVertexAttributes ) / sizeof( ProgramVertexAttributes[0] ); i++ )
|
|
||||||
{
|
|
||||||
GL( glBindAttribLocation( program->Program, ProgramVertexAttributes[i].location, ProgramVertexAttributes[i].name ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
GL( glLinkProgram( program->Program ) );
|
|
||||||
GL( glGetProgramiv( program->Program, GL_LINK_STATUS, &r ) );
|
|
||||||
if ( r == GL_FALSE )
|
|
||||||
{
|
|
||||||
GLchar msg[4096];
|
|
||||||
GL( glGetProgramInfoLog( program->Program, sizeof( msg ), 0, msg ) );
|
|
||||||
ALOGE( "Linking program failed: %s\n", msg );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int numBufferBindings = 0;
|
|
||||||
|
|
||||||
// Get the uniform locations.
|
|
||||||
memset( program->UniformLocation, -1, sizeof( program->UniformLocation ) );
|
|
||||||
for ( int i = 0; i < sizeof( ProgramUniforms ) / sizeof( ProgramUniforms[0] ); i++ )
|
|
||||||
{
|
|
||||||
const int uniformIndex = ProgramUniforms[i].index;
|
|
||||||
if ( ProgramUniforms[i].type == UNIFORM_TYPE_BUFFER )
|
|
||||||
{
|
|
||||||
GL( program->UniformLocation[uniformIndex] = glGetUniformBlockIndex( program->Program, ProgramUniforms[i].name ) );
|
|
||||||
program->UniformBinding[uniformIndex] = numBufferBindings++;
|
|
||||||
GL( glUniformBlockBinding( program->Program, program->UniformLocation[uniformIndex], program->UniformBinding[uniformIndex] ) );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
GL( program->UniformLocation[uniformIndex] = glGetUniformLocation( program->Program, ProgramUniforms[i].name ) );
|
|
||||||
program->UniformBinding[uniformIndex] = program->UniformLocation[uniformIndex];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
renderState state;
|
|
||||||
getCurrentRenderState(&state);
|
|
||||||
|
|
||||||
GL( glUseProgram( program->Program ) );
|
|
||||||
|
|
||||||
// Get the texture locations.
|
|
||||||
for ( int i = 0; i < MAX_PROGRAM_TEXTURES; i++ )
|
|
||||||
{
|
|
||||||
char name[32];
|
|
||||||
sprintf( name, "Texture%i", i );
|
|
||||||
program->Textures[i] = glGetUniformLocation( program->Program, name );
|
|
||||||
if ( program->Textures[i] != -1 )
|
|
||||||
{
|
|
||||||
GL( glUniform1i( program->Textures[i], i ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
restoreRenderState(&state);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ovrProgram_Destroy( ovrProgram * program )
|
|
||||||
{
|
|
||||||
if ( program->Program != 0 )
|
|
||||||
{
|
|
||||||
GL( glDeleteProgram( program->Program ) );
|
|
||||||
program->Program = 0;
|
|
||||||
}
|
|
||||||
if ( program->VertexShader != 0 )
|
|
||||||
{
|
|
||||||
GL( glDeleteShader( program->VertexShader ) );
|
|
||||||
program->VertexShader = 0;
|
|
||||||
}
|
|
||||||
if ( program->FragmentShader != 0 )
|
|
||||||
{
|
|
||||||
GL( glDeleteShader( program->FragmentShader ) );
|
|
||||||
program->FragmentShader = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char VERTEX_SHADER[] =
|
|
||||||
"#version 300 es\n"
|
|
||||||
"in vec3 vertexPosition;\n"
|
|
||||||
"in vec4 vertexColor;\n"
|
|
||||||
"uniform mat4 viewProjectionMatrix;\n"
|
|
||||||
"out vec4 fragmentColor;\n"
|
|
||||||
"void main()\n"
|
|
||||||
"{\n"
|
|
||||||
" gl_Position = viewProjectionMatrix * vec4( vertexPosition, 1.0 );\n"
|
|
||||||
" fragmentColor = vertexColor;\n"
|
|
||||||
"}\n";
|
|
||||||
|
|
||||||
static const char FRAGMENT_SHADER[] =
|
|
||||||
"#version 300 es\n"
|
|
||||||
"in lowp vec4 fragmentColor;\n"
|
|
||||||
"out lowp vec4 outColor;\n"
|
|
||||||
"void main()\n"
|
|
||||||
"{\n"
|
|
||||||
" outColor = fragmentColor;\n"
|
|
||||||
"}\n";
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
@ -385,9 +70,6 @@ ovrScene
|
||||||
void ovrScene_Clear( ovrScene * scene )
|
void ovrScene_Clear( ovrScene * scene )
|
||||||
{
|
{
|
||||||
scene->CreatedScene = false;
|
scene->CreatedScene = false;
|
||||||
scene->CreatedVAOs = false;
|
|
||||||
ovrProgram_Clear( &scene->Program );
|
|
||||||
ovrGeometry_Clear( &scene->GroundPlane );
|
|
||||||
ovrRenderer_Clear( &scene->CylinderRenderer );
|
ovrRenderer_Clear( &scene->CylinderRenderer );
|
||||||
|
|
||||||
scene->CylinderWidth = 0;
|
scene->CylinderWidth = 0;
|
||||||
|
@ -399,33 +81,8 @@ bool ovrScene_IsCreated( ovrScene * scene )
|
||||||
return scene->CreatedScene;
|
return scene->CreatedScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ovrScene_CreateVAOs( ovrScene * scene )
|
|
||||||
{
|
|
||||||
if ( !scene->CreatedVAOs )
|
|
||||||
{
|
|
||||||
ovrGeometry_CreateVAO( &scene->GroundPlane );
|
|
||||||
scene->CreatedVAOs = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ovrScene_DestroyVAOs( ovrScene * scene )
|
|
||||||
{
|
|
||||||
if ( scene->CreatedVAOs )
|
|
||||||
{
|
|
||||||
ovrGeometry_DestroyVAO( &scene->GroundPlane );
|
|
||||||
scene->CreatedVAOs = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ovrScene_Create( int width, int height, ovrScene * scene, const ovrJava * java )
|
void ovrScene_Create( int width, int height, ovrScene * scene, const ovrJava * java )
|
||||||
{
|
{
|
||||||
// Simple ground plane geometry.
|
|
||||||
{
|
|
||||||
ovrProgram_Create( &scene->Program, VERTEX_SHADER, FRAGMENT_SHADER );
|
|
||||||
ovrGeometry_CreateGroundPlane( &scene->GroundPlane );
|
|
||||||
ovrScene_CreateVAOs( scene );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create Cylinder renderer
|
// Create Cylinder renderer
|
||||||
{
|
{
|
||||||
scene->CylinderWidth = width;
|
scene->CylinderWidth = width;
|
||||||
|
@ -440,9 +97,6 @@ void ovrScene_Create( int width, int height, ovrScene * scene, const ovrJava * j
|
||||||
|
|
||||||
void ovrScene_Destroy( ovrScene * scene )
|
void ovrScene_Destroy( ovrScene * scene )
|
||||||
{
|
{
|
||||||
ovrScene_DestroyVAOs( scene );
|
|
||||||
ovrProgram_Destroy( &scene->Program );
|
|
||||||
ovrGeometry_Destroy( &scene->GroundPlane );
|
|
||||||
ovrRenderer_Destroy( &scene->CylinderRenderer );
|
ovrRenderer_Destroy( &scene->CylinderRenderer );
|
||||||
|
|
||||||
scene->CreatedScene = false;
|
scene->CreatedScene = false;
|
||||||
|
@ -497,8 +151,8 @@ ovrLayerCylinder2 BuildCylinderLayer( ovrRenderer * cylinderRenderer,
|
||||||
|
|
||||||
const float density = 4500.0f;
|
const float density = 4500.0f;
|
||||||
const float rotateYaw = 0.0f;
|
const float rotateYaw = 0.0f;
|
||||||
const float radius = 2.0f;
|
const float radius = 3.0f;
|
||||||
const ovrVector3f translation = { 0.0f, playerHeight, -0.5f };
|
const ovrVector3f translation = { 0.0f, playerHeight/2, -5.0f };
|
||||||
|
|
||||||
ovrMatrix4f cylinderTransform =
|
ovrMatrix4f cylinderTransform =
|
||||||
CylinderModelMatrix( textureWidth, textureHeight, translation,
|
CylinderModelMatrix( textureWidth, textureHeight, translation,
|
||||||
|
|
|
@ -178,9 +178,6 @@ ovrScene
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
bool CreatedScene;
|
bool CreatedScene;
|
||||||
bool CreatedVAOs;
|
|
||||||
ovrProgram Program;
|
|
||||||
ovrGeometry GroundPlane;
|
|
||||||
|
|
||||||
//Proper renderer for stereo rendering to the cylinder layer
|
//Proper renderer for stereo rendering to the cylinder layer
|
||||||
ovrRenderer CylinderRenderer;
|
ovrRenderer CylinderRenderer;
|
||||||
|
@ -189,11 +186,8 @@ typedef struct
|
||||||
int CylinderHeight;
|
int CylinderHeight;
|
||||||
} ovrScene;
|
} ovrScene;
|
||||||
|
|
||||||
bool ovrScene_IsCreated( ovrScene * scene );
|
|
||||||
void ovrScene_Clear( ovrScene * scene );
|
void ovrScene_Clear( ovrScene * scene );
|
||||||
void ovrScene_Create( int width, int height, ovrScene * scene, const ovrJava * java );
|
void ovrScene_Create( int width, int height, ovrScene * scene, const ovrJava * java );
|
||||||
void ovrScene_CreateVAOs( ovrScene * scene );
|
|
||||||
void ovrScene_DestroyVAOs( ovrScene * scene );
|
|
||||||
void ovrScene_Destroy( ovrScene * scene );
|
void ovrScene_Destroy( ovrScene * scene );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
cvar_t *vr_snapturn_angle;
|
cvar_t *vr_snapturn_angle;
|
||||||
|
cvar_t *vr_reloadtimeoutms;
|
||||||
cvar_t *vr_positional_factor;
|
cvar_t *vr_positional_factor;
|
||||||
cvar_t *vr_walkdirection;
|
cvar_t *vr_walkdirection;
|
||||||
cvar_t *vr_weapon_pitchadjust;
|
cvar_t *vr_weapon_pitchadjust;
|
||||||
cvar_t *vr_lasersight;
|
cvar_t *vr_lasersight;
|
||||||
cvar_t *vr_control_scheme;
|
cvar_t *vr_control_scheme;
|
||||||
cvar_t *vr_height_adjust;
|
cvar_t *vr_height_adjust;
|
||||||
cvar_t *vr_worldscale;
|
|
||||||
cvar_t *vr_weaponscale;
|
cvar_t *vr_weaponscale;
|
||||||
cvar_t *vr_weapon_stabilised;
|
cvar_t *vr_weapon_stabilised;
|
||||||
cvar_t *vr_comfort_mask;
|
cvar_t *vr_comfort_mask;
|
||||||
|
|
|
@ -156,18 +156,14 @@ void interactWithTouchScreen(ovrTracking *tracking, ovrInputStateTrackedRemote *
|
||||||
if (yaw >= 180.0f) yaw -= 180.0f;
|
if (yaw >= 180.0f) yaw -= 180.0f;
|
||||||
if (yaw <= -180.0f) yaw += 180.0f;
|
if (yaw <= -180.0f) yaw += 180.0f;
|
||||||
|
|
||||||
if (yaw > -40.0f && yaw < 40.0f &&
|
if (yaw > -45.0f && yaw < 45.0f &&
|
||||||
remoteAngles[PITCH] > -22.5f && remoteAngles[PITCH] < 22.5f) {
|
remoteAngles[PITCH] > -15.0f && remoteAngles[PITCH] < 75.0f) {
|
||||||
|
|
||||||
int newRemoteTrigState = (newState->Buttons & ovrButton_Trigger) != 0;
|
int newRemoteTrigState = (newState->Buttons & ovrButton_Trigger) != 0;
|
||||||
int prevRemoteTrigState = (oldState->Buttons & ovrButton_Trigger) != 0;
|
int prevRemoteTrigState = (oldState->Buttons & ovrButton_Trigger) != 0;
|
||||||
|
|
||||||
float touchX = (-yaw + 40.0f) / 80.0f;
|
float touchX = (-yaw + 45.0f) / 90.0f;
|
||||||
float touchY = (remoteAngles[PITCH] + 22.5f) / 45.0f;
|
float touchY = (remoteAngles[PITCH] + 15.0f) / 90.0f;
|
||||||
if (newRemoteTrigState != prevRemoteTrigState)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
PortableMouseAbs(touchX, touchY);
|
PortableMouseAbs(touchX, touchY);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -32,16 +32,25 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
Cvar_Set("hand", vr_control_scheme->value < 10 ? "0" : "1");
|
Cvar_Set("hand", vr_control_scheme->value < 10 ? "0" : "1");
|
||||||
|
|
||||||
//Get the cvar
|
//Get the cvar
|
||||||
sv_cheats = Cvar_Get("cheats", "0", CVAR_ARCHIVE);
|
sv_cheats = Cvar_Get("cheats", "1", CVAR_ARCHIVE);
|
||||||
|
|
||||||
static qboolean dominantGripPushed = false;
|
static qboolean dominantGripPushed = false;
|
||||||
static float dominantGripPushTime = 0.0f;
|
static float dominantGripPushTime = 0.0f;
|
||||||
static qboolean inventoryManagementMode = false;
|
static int grabMeleeWeapon = 0;
|
||||||
|
static bool canUseBackpack = false;
|
||||||
|
|
||||||
//Menu button
|
|
||||||
|
//switch to screen layer override
|
||||||
|
if ((pOffTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
||||||
|
(pOffTrackedRemoteOld->Buttons & ovrButton_Joystick)) {
|
||||||
|
showingScreenLayer = !showingScreenLayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Menu button
|
||||||
handleTrackedControllerButton(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, ovrButton_Enter, K_ESCAPE);
|
handleTrackedControllerButton(&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, ovrButton_Enter, K_ESCAPE);
|
||||||
|
|
||||||
if ( Key_GetCatcher( ) & KEYCATCH_UI )
|
if ( RTCWVR_useScreenLayer() )
|
||||||
{
|
{
|
||||||
interactWithTouchScreen(pDominantTracking, pDominantTrackedRemoteNew, pDominantTrackedRemoteOld);
|
interactWithTouchScreen(pDominantTracking, pDominantTrackedRemoteNew, pDominantTrackedRemoteOld);
|
||||||
|
|
||||||
|
@ -87,10 +96,9 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set gun angles - We need to calculate all those we might need (including adjustments) for the client to then take its pick
|
//Set gun angles - We need to calculate all those we might need (including adjustments) for the client to then take its pick
|
||||||
const ovrQuatf quatRemote = pDominantTracking->HeadPose.Pose.Orientation;
|
|
||||||
vec3_t rotation = {0};
|
vec3_t rotation = {0};
|
||||||
rotation[PITCH] = vr_weapon_pitchadjust->value;
|
rotation[PITCH] = vr_weapon_pitchadjust->value;
|
||||||
QuatToYawPitchRoll(quatRemote, rotation, weaponangles);
|
QuatToYawPitchRoll(pDominantTracking->HeadPose.Pose.Orientation, rotation, weaponangles);
|
||||||
weaponangles[YAW] += (cl.viewangles[YAW] - hmdorientation[YAW]);
|
weaponangles[YAW] += (cl.viewangles[YAW] - hmdorientation[YAW]);
|
||||||
weaponangles[ROLL] *= -1.0f;
|
weaponangles[ROLL] *= -1.0f;
|
||||||
|
|
||||||
|
@ -107,11 +115,57 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool finishReloadNextFrame = false;
|
||||||
|
if (finishReloadNextFrame)
|
||||||
|
{
|
||||||
|
sendButtonActionSimple("-reload");
|
||||||
|
finishReloadNextFrame = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) {
|
||||||
|
canUseBackpack = false;
|
||||||
|
}
|
||||||
|
else if (!canUseBackpack && grabMeleeWeapon == 0) {
|
||||||
|
int channel = (vr_control_scheme->integer >= 10) ? 0 : 1;
|
||||||
|
RTCWVR_Vibrate(40, channel,
|
||||||
|
0.5); // vibrate to let user know they can switch
|
||||||
|
|
||||||
|
canUseBackpack = true;
|
||||||
|
}
|
||||||
|
|
||||||
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_GripTrigger) !=
|
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_GripTrigger) !=
|
||||||
(pDominantTrackedRemoteOld->Buttons & ovrButton_GripTrigger)) {
|
(pDominantTrackedRemoteOld->Buttons & ovrButton_GripTrigger)) {
|
||||||
|
|
||||||
sendButtonActionSimple("inven");
|
dominantGripPushed = (pDominantTrackedRemoteNew->Buttons &
|
||||||
inventoryManagementMode = (pDominantTrackedRemoteNew->Buttons & ovrButton_GripTrigger) > 0;
|
ovrButton_GripTrigger) != 0;
|
||||||
|
|
||||||
|
if (grabMeleeWeapon == 0)
|
||||||
|
{
|
||||||
|
if (pDominantTracking->Status & (VRAPI_TRACKING_STATUS_POSITION_TRACKED | VRAPI_TRACKING_STATUS_POSITION_VALID)) {
|
||||||
|
|
||||||
|
if (dominantGripPushed) {
|
||||||
|
dominantGripPushTime = GetTimeInMilliSeconds();
|
||||||
|
} else {
|
||||||
|
if ((GetTimeInMilliSeconds() - dominantGripPushTime) <
|
||||||
|
vr_reloadtimeoutms->integer) {
|
||||||
|
sendButtonActionSimple("+reload");
|
||||||
|
finishReloadNextFrame = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else{
|
||||||
|
if (dominantGripPushed) {
|
||||||
|
//Initiate crowbar from backpack mode
|
||||||
|
sendButtonActionSimple("weapon0");
|
||||||
|
int channel = (vr_control_scheme->integer >= 10) ? 0 : 1;
|
||||||
|
RTCWVR_Vibrate(80, channel, 0.8); // vibrate to let user know they switched
|
||||||
|
grabMeleeWeapon = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (grabMeleeWeapon == 1 && !dominantGripPushed) {
|
||||||
|
//Restores last used weapon
|
||||||
|
sendButtonActionSimple("lastinv");
|
||||||
|
grabMeleeWeapon = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,12 +204,9 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
|
|
||||||
//This section corrects for the fact that the controller actually controls direction of movement, but we want to move relative to the direction the
|
//This section corrects for the fact that the controller actually controls direction of movement, but we want to move relative to the direction the
|
||||||
//player is facing for positional tracking
|
//player is facing for positional tracking
|
||||||
float multiplier = 1.0;//(vr_positional_factor->value) /
|
|
||||||
//((pOffTrackedRemoteNew->Buttons & ovrButton_Trigger) ? 1.5f : 1.0f);
|
|
||||||
|
|
||||||
vec2_t v;
|
vec2_t v;
|
||||||
rotateAboutOrigin(-positionDeltaThisFrame[0] * multiplier,
|
rotateAboutOrigin(-positionDeltaThisFrame[0] * vr_positional_factor->value,
|
||||||
positionDeltaThisFrame[2] * multiplier, /*cl.viewangles[YAW]*/ - hmdorientation[YAW], v);
|
positionDeltaThisFrame[2] * vr_positional_factor->value, - hmdorientation[YAW], v);
|
||||||
positional_movementSideways = v[0];
|
positional_movementSideways = v[0];
|
||||||
positional_movementForward = v[1];
|
positional_movementForward = v[1];
|
||||||
|
|
||||||
|
@ -167,27 +218,37 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
handleTrackedControllerButton(pDominantTrackedRemoteNew,
|
handleTrackedControllerButton(pDominantTrackedRemoteNew,
|
||||||
pDominantTrackedRemoteOld, domButton2, K_SPACE);
|
pDominantTrackedRemoteOld, domButton2, K_SPACE);
|
||||||
|
|
||||||
|
|
||||||
//We need to record if we have started firing primary so that releasing trigger will stop firing, if user has pushed grip
|
//We need to record if we have started firing primary so that releasing trigger will stop firing, if user has pushed grip
|
||||||
//in meantime, then it wouldn't stop the gun firing and it would get stuck
|
//in meantime, then it wouldn't stop the gun firing and it would get stuck
|
||||||
static bool firingPrimary = false;
|
static bool firingPrimary = false;
|
||||||
|
|
||||||
{
|
if (!firingPrimary && dominantGripPushed && (GetTimeInMilliSeconds() - dominantGripPushTime) > vr_reloadtimeoutms->integer)
|
||||||
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
|
{
|
||||||
(pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) {
|
//Fire Secondary
|
||||||
|
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
|
||||||
|
(pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) {
|
||||||
|
|
||||||
firingPrimary = (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger);
|
sendButtonAction("+attack2", (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Fire Primary
|
||||||
|
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
|
||||||
|
(pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger)) {
|
||||||
|
|
||||||
if (inventoryManagementMode)
|
firingPrimary = (pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger);
|
||||||
{
|
sendButtonAction("+attack", firingPrimary);
|
||||||
if (firingPrimary)
|
}
|
||||||
sendButtonActionSimple("invuse");
|
// we need to release secondary fire if dominantGripPushed has been released before releasing trigger -> should fix the gun jamming and non stop firing secondary attack bug
|
||||||
}
|
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Trigger) !=
|
||||||
else
|
(pDominantTrackedRemoteOld->Buttons & ovrButton_Trigger) &&
|
||||||
{
|
(pDominantTrackedRemoteNew->Buttons& ovrButton_Trigger) == false)
|
||||||
sendButtonAction("+attack", firingPrimary ? 1 : 0);
|
{
|
||||||
}
|
sendButtonAction("+attack2", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Duck with A
|
//Duck with A
|
||||||
if ((pDominantTrackedRemoteNew->Buttons & domButton1) !=
|
if ((pDominantTrackedRemoteNew->Buttons & domButton1) !=
|
||||||
|
@ -206,26 +267,11 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
if (!itemSwitched) {
|
if (!itemSwitched) {
|
||||||
if (between(0.8f, pDominantTrackedRemoteNew->Joystick.y, 1.0f))
|
if (between(0.8f, pDominantTrackedRemoteNew->Joystick.y, 1.0f))
|
||||||
{
|
{
|
||||||
if (inventoryManagementMode)
|
sendButtonActionSimple("weapprev");
|
||||||
{
|
|
||||||
sendButtonActionSimple("invprev");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sendButtonActionSimple("weapprev");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (inventoryManagementMode)
|
sendButtonActionSimple("weapnext");
|
||||||
{
|
|
||||||
sendButtonActionSimple("invnext");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sendButtonActionSimple("weapnext");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
itemSwitched = true;
|
itemSwitched = true;
|
||||||
}
|
}
|
||||||
|
@ -241,7 +287,15 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
pOffTracking->HeadPose.Pose.Position.y,
|
pOffTracking->HeadPose.Pose.Position.y,
|
||||||
pOffTracking->HeadPose.Pose.Position.z);
|
pOffTracking->HeadPose.Pose.Position.z);
|
||||||
|
|
||||||
//Laser-sight
|
//"Use" (open doors etc)
|
||||||
|
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
||||||
|
(pDominantTrackedRemoteOld->Buttons & ovrButton_Joystick)) {
|
||||||
|
|
||||||
|
sendButtonAction("+activate", (pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Laser-sight - not implemented
|
||||||
|
/*
|
||||||
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
if ((pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
||||||
(pDominantTrackedRemoteOld->Buttons & ovrButton_Joystick)
|
(pDominantTrackedRemoteOld->Buttons & ovrButton_Joystick)
|
||||||
&& (pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick)) {
|
&& (pDominantTrackedRemoteNew->Buttons & ovrButton_Joystick)) {
|
||||||
|
@ -253,6 +307,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
// Cvar_ForceSet("vr_lasersight", "1.0");
|
// Cvar_ForceSet("vr_lasersight", "1.0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
//Apply a filter and quadratic scaler so small movements are easier to make
|
//Apply a filter and quadratic scaler so small movements are easier to make
|
||||||
float dist = length(pOffTrackedRemoteNew->Joystick.x, pOffTrackedRemoteNew->Joystick.y);
|
float dist = length(pOffTrackedRemoteNew->Joystick.x, pOffTrackedRemoteNew->Joystick.y);
|
||||||
|
@ -272,24 +327,27 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
|
||||||
remote_movementSideways,
|
remote_movementSideways,
|
||||||
remote_movementForward);
|
remote_movementForward);
|
||||||
|
|
||||||
|
//Kick!
|
||||||
//show help computer while X/A pressed
|
|
||||||
if ((pOffTrackedRemoteNew->Buttons & offButton1) !=
|
if ((pOffTrackedRemoteNew->Buttons & offButton1) !=
|
||||||
(pOffTrackedRemoteOld->Buttons & offButton1)) {
|
(pOffTrackedRemoteOld->Buttons & offButton1)) {
|
||||||
sendButtonActionSimple("cmd help");
|
sendButtonAction("+kick", (pOffTrackedRemoteNew->Buttons & offButton1));
|
||||||
|
}
|
||||||
|
|
||||||
|
//notebook
|
||||||
|
if ((pOffTrackedRemoteNew->Buttons & offButton2) !=
|
||||||
|
(pOffTrackedRemoteOld->Buttons & offButton2)) {
|
||||||
|
sendButtonActionSimple("notebook");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Use (Action)
|
if (((pOffTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
||||||
if ((pOffTrackedRemoteNew->Buttons & ovrButton_Joystick) !=
|
(pOffTrackedRemoteOld->Buttons & ovrButton_Joystick))
|
||||||
(pOffTrackedRemoteOld->Buttons & ovrButton_Joystick)
|
|
||||||
&& (pOffTrackedRemoteNew->Buttons & ovrButton_Joystick)) {
|
&& (pOffTrackedRemoteNew->Buttons & ovrButton_Joystick)) {
|
||||||
|
|
||||||
//If cheats enabled, give all weapons/pickups to player
|
//If cheats enabled, give all weapons/pickups to player
|
||||||
if (sv_cheats->value == 1.0f) {
|
if (sv_cheats->value == 1.0f) {
|
||||||
Cbuf_AddText("give all\n");
|
Cbuf_AddText("give all\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//We need to record if we have started firing primary so that releasing trigger will stop definitely firing, if user has pushed grip
|
//We need to record if we have started firing primary so that releasing trigger will stop definitely firing, if user has pushed grip
|
||||||
|
|
|
@ -247,7 +247,7 @@ static qboolean GLW_StartDriverAndSetMode( const char *drivername,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Android_GetScreenRes(int *width, int *height);
|
void RTCWVR_GetScreenRes(int *width, int *height);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** GLW_InitExtensions
|
** GLW_InitExtensions
|
||||||
|
@ -478,7 +478,7 @@ void GLimp_Init( void ) {
|
||||||
|
|
||||||
int android_screen_width;
|
int android_screen_width;
|
||||||
int android_screen_height;
|
int android_screen_height;
|
||||||
Android_GetScreenRes(&android_screen_width, &android_screen_height);
|
RTCWVR_GetScreenRes(&android_screen_width, &android_screen_height);
|
||||||
glConfig.vidWidth = android_screen_width;
|
glConfig.vidWidth = android_screen_width;
|
||||||
glConfig.vidHeight = android_screen_height;
|
glConfig.vidHeight = android_screen_height;
|
||||||
glConfig.colorBits = 32;
|
glConfig.colorBits = 32;
|
||||||
|
|
|
@ -225,12 +225,12 @@ void PortableMouse(float dx,float dy)
|
||||||
}
|
}
|
||||||
|
|
||||||
int absx=0,absy=0;
|
int absx=0,absy=0;
|
||||||
Android_GetScreenRes(int *width, int *height);
|
RTCWVR_GetScreenRes(int *width, int *height);
|
||||||
void PortableMouseAbs(float x,float y)
|
void PortableMouseAbs(float x,float y)
|
||||||
{
|
{
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
Android_GetScreenRes(&width, &height);
|
RTCWVR_GetScreenRes(&width, &height);
|
||||||
absx = x * width;
|
absx = x * width;
|
||||||
absy = y * height;
|
absy = y * height;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3535,7 +3535,7 @@ CG_DrawActive
|
||||||
Perform all drawing needed to completely fill the screen
|
Perform all drawing needed to completely fill the screen
|
||||||
=====================
|
=====================
|
||||||
*/
|
*/
|
||||||
void CG_DrawActive( stereoFrame_t stereoView ) {
|
void CG_DrawActive( int stereoView ) {
|
||||||
float separation;
|
float separation;
|
||||||
vec3_t baseOrg;
|
vec3_t baseOrg;
|
||||||
|
|
||||||
|
@ -3561,22 +3561,13 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( stereoView ) {
|
separation = stereoView == 1 ?
|
||||||
case STEREO_CENTER:
|
cg_worldScale.value * (-cg_stereoSeparation.value / 2) : //left
|
||||||
separation = 0;
|
cg_worldScale.value * (cg_stereoSeparation.value / 2); // right
|
||||||
break;
|
|
||||||
case STEREO_LEFT:
|
|
||||||
separation = -cg_stereoSeparation.value / 2;
|
|
||||||
break;
|
|
||||||
case STEREO_RIGHT:
|
|
||||||
separation = cg_stereoSeparation.value / 2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
separation = 0;
|
|
||||||
CG_Error( "CG_DrawActive: Undefined stereoView" );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
cg.refdef.worldscale = cg_worldScale.value;
|
||||||
|
|
||||||
// clear around the rendered view if sized down
|
// clear around the rendered view if sized down
|
||||||
// CG_TileClear(); // (SA) moved down
|
// CG_TileClear(); // (SA) moved down
|
||||||
|
|
||||||
|
@ -3586,6 +3577,10 @@ void CG_DrawActive( stereoFrame_t stereoView ) {
|
||||||
VectorMA( cg.refdef.vieworg, -separation, cg.refdef.viewaxis[1], cg.refdef.vieworg );
|
VectorMA( cg.refdef.vieworg, -separation, cg.refdef.viewaxis[1], cg.refdef.vieworg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cg.refdef.vieworg[2] -= cg.predictedPlayerState.viewheight;
|
||||||
|
|
||||||
|
|
||||||
cg.refdef.glfog.registered = 0; // make sure it doesn't use fog from another scene
|
cg.refdef.glfog.registered = 0; // make sure it doesn't use fog from another scene
|
||||||
/*
|
/*
|
||||||
// NERVE - SMF - activate limbo menu and draw small 3d window
|
// NERVE - SMF - activate limbo menu and draw small 3d window
|
||||||
|
|
|
@ -1703,6 +1703,7 @@ extern vmCvar_t cg_thirdPersonRange;
|
||||||
extern vmCvar_t cg_thirdPersonAngle;
|
extern vmCvar_t cg_thirdPersonAngle;
|
||||||
extern vmCvar_t cg_thirdPerson;
|
extern vmCvar_t cg_thirdPerson;
|
||||||
extern vmCvar_t cg_stereoSeparation;
|
extern vmCvar_t cg_stereoSeparation;
|
||||||
|
extern vmCvar_t cg_worldScale;
|
||||||
extern vmCvar_t cg_lagometer;
|
extern vmCvar_t cg_lagometer;
|
||||||
extern vmCvar_t cg_drawAttacker;
|
extern vmCvar_t cg_drawAttacker;
|
||||||
extern vmCvar_t cg_synchronousClients;
|
extern vmCvar_t cg_synchronousClients;
|
||||||
|
@ -1893,7 +1894,7 @@ void CG_AddLagometerSnapshotInfo( snapshot_t *snap );
|
||||||
void CG_CenterPrint( const char *str, int y, int charWidth );
|
void CG_CenterPrint( const char *str, int y, int charWidth );
|
||||||
void CG_ObjectivePrint( const char *str, int charWidth, int team ); // NERVE - SMF
|
void CG_ObjectivePrint( const char *str, int charWidth, int team ); // NERVE - SMF
|
||||||
void CG_DrawHead( float x, float y, float w, float h, int clientNum, vec3_t headAngles );
|
void CG_DrawHead( float x, float y, float w, float h, int clientNum, vec3_t headAngles );
|
||||||
void CG_DrawActive( stereoFrame_t stereoView );
|
void CG_DrawActive( int stereoView );
|
||||||
void CG_DrawFlagModel( float x, float y, float w, float h, int team );
|
void CG_DrawFlagModel( float x, float y, float w, float h, int team );
|
||||||
|
|
||||||
void CG_DrawTeamBackground( int x, int y, int w, int h, float alpha, int team );
|
void CG_DrawTeamBackground( int x, int y, int w, int h, float alpha, int team );
|
||||||
|
|
|
@ -185,6 +185,7 @@ vmCvar_t cg_thirdPerson;
|
||||||
vmCvar_t cg_thirdPersonRange;
|
vmCvar_t cg_thirdPersonRange;
|
||||||
vmCvar_t cg_thirdPersonAngle;
|
vmCvar_t cg_thirdPersonAngle;
|
||||||
vmCvar_t cg_stereoSeparation;
|
vmCvar_t cg_stereoSeparation;
|
||||||
|
vmCvar_t cg_worldScale;
|
||||||
vmCvar_t cg_lagometer;
|
vmCvar_t cg_lagometer;
|
||||||
vmCvar_t cg_drawAttacker;
|
vmCvar_t cg_drawAttacker;
|
||||||
vmCvar_t cg_synchronousClients;
|
vmCvar_t cg_synchronousClients;
|
||||||
|
@ -301,10 +302,11 @@ cvarTable_t cvarTable[] = {
|
||||||
{ &cg_zoomStepSniper, "cg_zoomStepSniper", "2", CVAR_ARCHIVE },
|
{ &cg_zoomStepSniper, "cg_zoomStepSniper", "2", CVAR_ARCHIVE },
|
||||||
{ &cg_zoomStepSnooper, "cg_zoomStepSnooper", "5", CVAR_ARCHIVE },
|
{ &cg_zoomStepSnooper, "cg_zoomStepSnooper", "5", CVAR_ARCHIVE },
|
||||||
{ &cg_zoomStepFG, "cg_zoomStepFG", "10", CVAR_ARCHIVE }, //----(SA) added
|
{ &cg_zoomStepFG, "cg_zoomStepFG", "10", CVAR_ARCHIVE }, //----(SA) added
|
||||||
{ &cg_fov, "cg_fov", "104", CVAR_ARCHIVE | CVAR_CHEAT }, // JPW NERVE added cheat protect NOTE: there is already a dmflag (DF_FIXED_FOV) to allow server control of this cheat
|
{ &cg_fov, "cg_fov", "104", CVAR_ARCHIVE }, // JPW NERVE added cheat protect NOTE: there is already a dmflag (DF_FIXED_FOV) to allow server control of this cheat
|
||||||
{ &cg_viewsize, "cg_viewsize", "100", CVAR_ARCHIVE },
|
{ &cg_viewsize, "cg_viewsize", "100", CVAR_ARCHIVE },
|
||||||
{ &cg_letterbox, "cg_letterbox", "0", CVAR_TEMP }, //----(SA) added
|
{ &cg_letterbox, "cg_letterbox", "0", CVAR_TEMP }, //----(SA) added
|
||||||
{ &cg_stereoSeparation, "cg_stereoSeparation", "0.4", CVAR_ARCHIVE },
|
{ &cg_stereoSeparation, "cg_stereoSeparation", "0.065", CVAR_ARCHIVE },
|
||||||
|
{ &cg_worldScale, "cg_worldScale", "35.0", CVAR_ARCHIVE },
|
||||||
{ &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE },
|
{ &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE },
|
||||||
{ &cg_gibs, "cg_gibs", "1", CVAR_ARCHIVE },
|
{ &cg_gibs, "cg_gibs", "1", CVAR_ARCHIVE },
|
||||||
{ &cg_draw2D, "cg_draw2D", "1", CVAR_ARCHIVE },
|
{ &cg_draw2D, "cg_draw2D", "1", CVAR_ARCHIVE },
|
||||||
|
@ -334,7 +336,7 @@ cvarTable_t cvarTable[] = {
|
||||||
{ &cg_crosshairY, "cg_crosshairY", "0", CVAR_ARCHIVE },
|
{ &cg_crosshairY, "cg_crosshairY", "0", CVAR_ARCHIVE },
|
||||||
{ &cg_brassTime, "cg_brassTime", "1250", CVAR_ARCHIVE },
|
{ &cg_brassTime, "cg_brassTime", "1250", CVAR_ARCHIVE },
|
||||||
{ &cg_simpleItems, "cg_simpleItems", "0", CVAR_ARCHIVE },
|
{ &cg_simpleItems, "cg_simpleItems", "0", CVAR_ARCHIVE },
|
||||||
{ &cg_reticles, "cg_reticles", "1", CVAR_CHEAT },
|
{ &cg_reticles, "cg_reticles", "0", CVAR_CHEAT },
|
||||||
{ &cg_reticleBrightness, "cg_reticleBrightness", "0.7", CVAR_ARCHIVE },
|
{ &cg_reticleBrightness, "cg_reticleBrightness", "0.7", CVAR_ARCHIVE },
|
||||||
{ &cg_markTime, "cg_marktime", "20000", CVAR_ARCHIVE },
|
{ &cg_markTime, "cg_marktime", "20000", CVAR_ARCHIVE },
|
||||||
{ &cg_lagometer, "cg_lagometer", "1", CVAR_ARCHIVE },
|
{ &cg_lagometer, "cg_lagometer", "1", CVAR_ARCHIVE },
|
||||||
|
|
|
@ -565,8 +565,8 @@ static void CG_OffsetFirstPersonView( void ) {
|
||||||
|
|
||||||
// if dead, fix the angle and don't add any kick
|
// if dead, fix the angle and don't add any kick
|
||||||
if ( cg.snap->ps.stats[STAT_HEALTH] <= 0 ) {
|
if ( cg.snap->ps.stats[STAT_HEALTH] <= 0 ) {
|
||||||
angles[ROLL] = 40;
|
//angles[ROLL] = 40;
|
||||||
angles[PITCH] = -15;
|
//angles[PITCH] = -15;
|
||||||
angles[YAW] = cg.snap->ps.stats[STAT_DEAD_YAW];
|
angles[YAW] = cg.snap->ps.stats[STAT_DEAD_YAW];
|
||||||
origin[2] += cg.predictedPlayerState.viewheight;
|
origin[2] += cg.predictedPlayerState.viewheight;
|
||||||
return;
|
return;
|
||||||
|
@ -1070,7 +1070,7 @@ static int CG_CalcViewValues( void ) {
|
||||||
|
|
||||||
if ( cg.cameraMode ) {
|
if ( cg.cameraMode ) {
|
||||||
vec3_t origin, angles;
|
vec3_t origin, angles;
|
||||||
float fov = 90;
|
float fov = 104;
|
||||||
float x;
|
float x;
|
||||||
|
|
||||||
if ( trap_getCameraInfo( CAM_PRIMARY, cg.time, &origin, &angles, &fov ) ) {
|
if ( trap_getCameraInfo( CAM_PRIMARY, cg.time, &origin, &angles, &fov ) ) {
|
||||||
|
|
|
@ -215,6 +215,7 @@ typedef struct {
|
||||||
float fov_x, fov_y;
|
float fov_x, fov_y;
|
||||||
vec3_t vieworg;
|
vec3_t vieworg;
|
||||||
vec3_t viewaxis[3]; // transformation matrix
|
vec3_t viewaxis[3]; // transformation matrix
|
||||||
|
float worldscale;
|
||||||
|
|
||||||
int time; // time in milliseconds for shader effects and other time dependent rendering issues
|
int time; // time in milliseconds for shader effects and other time dependent rendering issues
|
||||||
int rdflags; // RDF_NOWORLDMODEL, etc
|
int rdflags; // RDF_NOWORLDMODEL, etc
|
||||||
|
|
|
@ -540,6 +540,7 @@ void RTCWVR_processHaptics();
|
||||||
void RTCWVR_getHMDOrientation();
|
void RTCWVR_getHMDOrientation();
|
||||||
qboolean RTCWVR_processMessageQueue();
|
qboolean RTCWVR_processMessageQueue();
|
||||||
void RTCWVR_getTrackedRemotesOrientation();
|
void RTCWVR_getTrackedRemotesOrientation();
|
||||||
|
void GPUWaitSync();
|
||||||
|
|
||||||
void SCR_UpdateScreen( void ) {
|
void SCR_UpdateScreen( void ) {
|
||||||
static int recursive;
|
static int recursive;
|
||||||
|
@ -571,6 +572,8 @@ void SCR_UpdateScreen( void ) {
|
||||||
|
|
||||||
RTCWVR_processHaptics();
|
RTCWVR_processHaptics();
|
||||||
|
|
||||||
|
GPUWaitSync();
|
||||||
|
|
||||||
//Draw twice for Quest
|
//Draw twice for Quest
|
||||||
SCR_DrawScreenField( STEREO_LEFT );
|
SCR_DrawScreenField( STEREO_LEFT );
|
||||||
RTCWVR_finishEyeBuffer(0);
|
RTCWVR_finishEyeBuffer(0);
|
||||||
|
|
|
@ -80,7 +80,7 @@ float pm_waterWadeScale = 0.70;
|
||||||
float pm_slagSwimScale = 0.30;
|
float pm_slagSwimScale = 0.30;
|
||||||
float pm_slagWadeScale = 0.70;
|
float pm_slagWadeScale = 0.70;
|
||||||
|
|
||||||
float pm_accelerate = 10;
|
float pm_accelerate = 10000; // Boosted for VR
|
||||||
float pm_airaccelerate = 1;
|
float pm_airaccelerate = 1;
|
||||||
float pm_wateraccelerate = 4;
|
float pm_wateraccelerate = 4;
|
||||||
float pm_slagaccelerate = 2;
|
float pm_slagaccelerate = 2;
|
||||||
|
@ -3732,7 +3732,7 @@ void PM_UpdateViewAngles( playerState_t *ps, usercmd_t *cmd, void( trace ) ( tra
|
||||||
|
|
||||||
// circularly clamp the angles with deltas
|
// circularly clamp the angles with deltas
|
||||||
for ( i = 0 ; i < 3 ; i++ ) {
|
for ( i = 0 ; i < 3 ; i++ ) {
|
||||||
temp = cmd->angles[i] + ps->delta_angles[i];
|
temp = cmd->angles[i] + (i == YAW ? ps->delta_angles[i] : 0);
|
||||||
if ( i == PITCH ) {
|
if ( i == PITCH ) {
|
||||||
// don't let the player look up or down more than 90 degrees
|
// don't let the player look up or down more than 90 degrees
|
||||||
if ( temp > 16000 ) {
|
if ( temp > 16000 ) {
|
||||||
|
|
|
@ -27,6 +27,7 @@ If you have questions concerning this license or the applicable additional terms
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <src/client/client.h>
|
||||||
#include "tr_local.h"
|
#include "tr_local.h"
|
||||||
|
|
||||||
int r_firstSceneDrawSurf;
|
int r_firstSceneDrawSurf;
|
||||||
|
@ -405,6 +406,8 @@ Rendering a scene may require multiple views to be rendered
|
||||||
to handle mirrors,
|
to handle mirrors,
|
||||||
@@@@@@@@@@@@@@@@@@@@@
|
@@@@@@@@@@@@@@@@@@@@@
|
||||||
*/
|
*/
|
||||||
|
extern vec3_t hmdPosition;
|
||||||
|
extern cvar_t *vr_worldscale;
|
||||||
void RE_RenderScene( const refdef_t *fd ) {
|
void RE_RenderScene( const refdef_t *fd ) {
|
||||||
viewParms_t parms;
|
viewParms_t parms;
|
||||||
int startTime;
|
int startTime;
|
||||||
|
@ -524,6 +527,7 @@ void RE_RenderScene( const refdef_t *fd ) {
|
||||||
parms.fovY = tr.refdef.fov_y;
|
parms.fovY = tr.refdef.fov_y;
|
||||||
|
|
||||||
VectorCopy( fd->vieworg, parms.or.origin );
|
VectorCopy( fd->vieworg, parms.or.origin );
|
||||||
|
//AnglesToAxis( cl.viewangles, parms.or.axis ); // Just use our known client view angles
|
||||||
VectorCopy( fd->viewaxis[0], parms.or.axis[0] );
|
VectorCopy( fd->viewaxis[0], parms.or.axis[0] );
|
||||||
VectorCopy( fd->viewaxis[1], parms.or.axis[1] );
|
VectorCopy( fd->viewaxis[1], parms.or.axis[1] );
|
||||||
VectorCopy( fd->viewaxis[2], parms.or.axis[2] );
|
VectorCopy( fd->viewaxis[2], parms.or.axis[2] );
|
||||||
|
|
|
@ -285,11 +285,11 @@ static void SV_Map_f( void ) {
|
||||||
// if the level was started with "map <levelname>", then
|
// if the level was started with "map <levelname>", then
|
||||||
// cheats will not be allowed. If started with "devmap <levelname>"
|
// cheats will not be allowed. If started with "devmap <levelname>"
|
||||||
// then cheats will be allowed
|
// then cheats will be allowed
|
||||||
if ( cheat ) {
|
// if ( cheat ) {
|
||||||
Cvar_Set( "sv_cheats", "1" );
|
Cvar_Set( "sv_cheats", "1" );
|
||||||
} else {
|
// } else {
|
||||||
Cvar_Set( "sv_cheats", "0" );
|
// Cvar_Set( "sv_cheats", "0" );
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -919,7 +919,7 @@ void SV_Init( void ) {
|
||||||
// systeminfo
|
// systeminfo
|
||||||
#ifdef PANDORA
|
#ifdef PANDORA
|
||||||
// allow easy cheating by aving sv_cheats R/W
|
// allow easy cheating by aving sv_cheats R/W
|
||||||
Cvar_Get( "sv_cheats", "0", CVAR_SYSTEMINFO );
|
Cvar_Get( "sv_cheats", "1", CVAR_SYSTEMINFO );
|
||||||
#else
|
#else
|
||||||
Cvar_Get( "sv_cheats", "0", CVAR_SYSTEMINFO | CVAR_ROM );
|
Cvar_Get( "sv_cheats", "0", CVAR_SYSTEMINFO | CVAR_ROM );
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue