diff --git a/Projects/Android/AndroidManifest.xml b/Projects/Android/AndroidManifest.xml index 3f816a0..cafb7a8 100644 --- a/Projects/Android/AndroidManifest.xml +++ b/Projects/Android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="28" + android:versionName="1.5.0" android:installLocation="auto" > @@ -15,7 +15,12 @@ - + diff --git a/Projects/Android/gradle/wrapper/gradle-wrapper.properties b/Projects/Android/gradle/wrapper/gradle-wrapper.properties index a0381b3..8edb89e 100644 --- a/Projects/Android/gradle/wrapper/gradle-wrapper.properties +++ b/Projects/Android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Dec 10 20:50:55 GMT 2020 +#Sat Sep 03 13:58:17 BST 2022 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c b/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c index 81361ac..a38a052 100644 --- a/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c +++ b/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c @@ -496,17 +496,6 @@ static void ovrFramebuffer_Clear( ovrFramebuffer * frameBuffer ) static bool ovrFramebuffer_Create( ovrFramebuffer * frameBuffer, const GLenum colorFormat, const int width, const int height, const int multisamples ) { - LOAD_GLES2(glBindTexture); - LOAD_GLES2(glTexParameteri); - LOAD_GLES2(glGenRenderbuffers); - LOAD_GLES2(glBindRenderbuffer); - LOAD_GLES2(glRenderbufferStorage); - LOAD_GLES2(glGenFramebuffers); - LOAD_GLES2(glBindFramebuffer); - LOAD_GLES2(glFramebufferRenderbuffer); - LOAD_GLES2(glFramebufferTexture2D); - LOAD_GLES2(glCheckFramebufferStatus); - frameBuffer->Width = width; frameBuffer->Height = height; frameBuffer->Multisamples = multisamples; @@ -526,15 +515,15 @@ static bool ovrFramebuffer_Create( ovrFramebuffer * frameBuffer, const GLenum co // Create the color buffer texture. const GLuint colorTexture = vrapi_GetTextureSwapChainHandle( frameBuffer->ColorTextureSwapChain, i ); GLenum colorTextureTarget = GL_TEXTURE_2D; - GL( gles_glBindTexture( colorTextureTarget, colorTexture ) ); + GL( glBindTexture( colorTextureTarget, colorTexture ) ); // Just clamp to edge. However, this requires manually clearing the border // around the layer to clear the edge texels. - GL( gles_glTexParameteri( colorTextureTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ) ); - GL( gles_glTexParameteri( colorTextureTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ) ); + GL( glTexParameteri( colorTextureTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ) ); + GL( glTexParameteri( colorTextureTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ) ); - GL( gles_glTexParameteri( colorTextureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR ) ); - GL( gles_glTexParameteri( colorTextureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR ) ); - GL( gles_glBindTexture( colorTextureTarget, 0 ) ); + GL( glTexParameteri( colorTextureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR ) ); + GL( glTexParameteri( colorTextureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR ) ); + GL( glBindTexture( colorTextureTarget, 0 ) ); if (multisamples > 1 && glRenderbufferStorageMultisampleEXT != NULL && glFramebufferTexture2DMultisampleEXT != NULL) { @@ -562,18 +551,18 @@ static bool ovrFramebuffer_Create( ovrFramebuffer * frameBuffer, const GLenum co { { // Create depth buffer. - GL( gles_glGenRenderbuffers( 1, &frameBuffer->DepthBuffers[i] ) ); - GL( gles_glBindRenderbuffer( GL_RENDERBUFFER, frameBuffer->DepthBuffers[i] ) ); - GL( gles_glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, frameBuffer->Width, frameBuffer->Height ) ); - GL( gles_glBindRenderbuffer( GL_RENDERBUFFER, 0 ) ); + GL( glGenRenderbuffers( 1, &frameBuffer->DepthBuffers[i] ) ); + GL( glBindRenderbuffer( GL_RENDERBUFFER, frameBuffer->DepthBuffers[i] ) ); + GL( glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, frameBuffer->Width, frameBuffer->Height ) ); + GL( glBindRenderbuffer( GL_RENDERBUFFER, 0 ) ); // Create the frame buffer. - GL( gles_glGenFramebuffers( 1, &frameBuffer->FrameBuffers[i] ) ); - GL( gles_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, frameBuffer->FrameBuffers[i] ) ); - GL( gles_glFramebufferRenderbuffer( GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, frameBuffer->DepthBuffers[i] ) ); - GL( gles_glFramebufferTexture2D( GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorTexture, 0 ) ); - GL( GLenum renderFramebufferStatus = gles_glCheckFramebufferStatus( GL_DRAW_FRAMEBUFFER ) ); - GL( gles_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, 0 ) ); + GL( glGenFramebuffers( 1, &frameBuffer->FrameBuffers[i] ) ); + GL( glBindFramebuffer( GL_DRAW_FRAMEBUFFER, frameBuffer->FrameBuffers[i] ) ); + GL( glFramebufferRenderbuffer( GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, frameBuffer->DepthBuffers[i] ) ); + GL( glFramebufferTexture2D( GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorTexture, 0 ) ); + GL( GLenum renderFramebufferStatus = glCheckFramebufferStatus( GL_DRAW_FRAMEBUFFER ) ); + GL( glBindFramebuffer( GL_DRAW_FRAMEBUFFER, 0 ) ); if ( renderFramebufferStatus != GL_FRAMEBUFFER_COMPLETE ) { ALOGE( "Incomplete frame buffer object: %s", GlFrameBufferStatusString( renderFramebufferStatus ) ); @@ -588,11 +577,8 @@ static bool ovrFramebuffer_Create( ovrFramebuffer * frameBuffer, const GLenum co void ovrFramebuffer_Destroy( ovrFramebuffer * frameBuffer ) { - LOAD_GLES2(glDeleteFramebuffers); - LOAD_GLES2(glDeleteRenderbuffers); - - GL( gles_glDeleteFramebuffers( frameBuffer->TextureSwapChainLength, frameBuffer->FrameBuffers ) ); - GL( gles_glDeleteRenderbuffers( frameBuffer->TextureSwapChainLength, frameBuffer->DepthBuffers ) ); + GL( glDeleteFramebuffers( frameBuffer->TextureSwapChainLength, frameBuffer->FrameBuffers ) ); + GL( glDeleteRenderbuffers( frameBuffer->TextureSwapChainLength, frameBuffer->DepthBuffers ) ); vrapi_DestroyTextureSwapChain( frameBuffer->ColorTextureSwapChain ); @@ -604,14 +590,12 @@ void ovrFramebuffer_Destroy( ovrFramebuffer * frameBuffer ) void ovrFramebuffer_SetCurrent( ovrFramebuffer * frameBuffer ) { - LOAD_GLES2(glBindFramebuffer); - GL( gles_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, frameBuffer->FrameBuffers[frameBuffer->TextureSwapChainIndex] ) ); + GL( glBindFramebuffer( GL_DRAW_FRAMEBUFFER, frameBuffer->FrameBuffers[frameBuffer->TextureSwapChainIndex] ) ); } void ovrFramebuffer_SetNone() { - LOAD_GLES2(glBindFramebuffer); - GL( gles_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, 0 ) ); + GL( glBindFramebuffer( GL_DRAW_FRAMEBUFFER, 0 ) ); } void ovrFramebuffer_Resolve( ovrFramebuffer * frameBuffer ) @@ -633,19 +617,12 @@ void ovrFramebuffer_Advance( ovrFramebuffer * frameBuffer ) void ovrFramebuffer_ClearEdgeTexels( ovrFramebuffer * frameBuffer ) { - LOAD_GLES2(glEnable); - LOAD_GLES2(glDisable); - LOAD_GLES2(glViewport); - LOAD_GLES2(glScissor); - LOAD_GLES2(glClearColor); - LOAD_GLES2(glClear); - - GL( gles_glEnable( GL_SCISSOR_TEST ) ); - GL( gles_glViewport( 0, 0, frameBuffer->Width, frameBuffer->Height ) ); + GL( glEnable( GL_SCISSOR_TEST ) ); + GL( glViewport( 0, 0, frameBuffer->Width, frameBuffer->Height ) ); // Explicitly clear the border texels to black because OpenGL-ES does not support GL_CLAMP_TO_BORDER. // Clear to fully opaque black. - GL( gles_glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ) ); + GL( glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ) ); //Glide comfort mask in and out static float currentVLevel = 0.0f; @@ -673,21 +650,21 @@ void ovrFramebuffer_ClearEdgeTexels( ovrFramebuffer * frameBuffer ) float height = useMask ? (frameBuffer->Height / 2.0f) * currentVLevel : 1; // bottom - GL( gles_glScissor( 0, 0, frameBuffer->Width, width ) ); - GL( gles_glClear( GL_COLOR_BUFFER_BIT ) ); + GL( glScissor( 0, 0, frameBuffer->Width, width ) ); + GL( glClear( GL_COLOR_BUFFER_BIT ) ); // top - GL( gles_glScissor( 0, frameBuffer->Height - height, frameBuffer->Width, height ) ); - GL( gles_glClear( GL_COLOR_BUFFER_BIT ) ); + GL( glScissor( 0, frameBuffer->Height - height, frameBuffer->Width, height ) ); + GL( glClear( GL_COLOR_BUFFER_BIT ) ); // left - GL( gles_glScissor( 0, 0, width, frameBuffer->Height ) ); - GL( gles_glClear( GL_COLOR_BUFFER_BIT ) ); + GL( glScissor( 0, 0, width, frameBuffer->Height ) ); + GL( glClear( GL_COLOR_BUFFER_BIT ) ); // right - GL( gles_glScissor( frameBuffer->Width - width, 0, width, frameBuffer->Height ) ); - GL( gles_glClear( GL_COLOR_BUFFER_BIT ) ); + GL( glScissor( frameBuffer->Width - width, 0, width, frameBuffer->Height ) ); + GL( glClear( GL_COLOR_BUFFER_BIT ) ); - GL( gles_glScissor( 0, 0, 0, 0 ) ); - GL( gles_glDisable( GL_SCISSOR_TEST ) ); + GL( glScissor( 0, 0, 0, 0 ) ); + GL( glDisable( GL_SCISSOR_TEST ) ); } @@ -1113,6 +1090,10 @@ static void ovrApp_HandleVrModeChanges( ovrApp * app ) vrapi_SetPerfThread( app->Ovr, VRAPI_PERF_THREAD_TYPE_RENDERER, app->RenderThreadTid ); ALOGV( " vrapi_SetPerfThread( RENDERER, %d )", app->RenderThreadTid ); + + vrapi_SetExtraLatencyMode(app->Ovr, VRAPI_EXTRA_LATENCY_MODE_ON); + + ALOGV( " vrapi_SetExtraLatencyMode( %d )", VRAPI_EXTRA_LATENCY_MODE_ON ); } } } @@ -1368,7 +1349,33 @@ Android_Vibrate //0 = left, 1 = right float vibration_channel_duration[2] = {0.0f, 0.0f}; float vibration_channel_intensity[2] = {0.0f, 0.0f}; -extern convar_t *vibration_enable; + +convar_t *vibration_enable; +convar_t *vr_snapturn_angle; +convar_t *vr_reloadtimeoutms; +convar_t *vr_positional_factor; +convar_t *vr_walkdirection; +convar_t *vr_weapon_pitchadjust; +convar_t *vr_crowbar_pitchadjust; +convar_t *vr_weapon_recoil; +convar_t *vr_weapon_stabilised; +convar_t *vr_lasersight; +convar_t *vr_quest_fov; +convar_t *vr_refresh; +convar_t *vr_control_scheme; +convar_t *vr_enable_crouching; +convar_t *vr_height_adjust; +convar_t *vr_flashlight_model; +convar_t *vr_hand_model; +convar_t *vr_mirror_weapons; +convar_t *vr_weapon_backface_culling; +convar_t *vr_comfort_mask; +convar_t *vr_legacy_ladders; +convar_t *vr_controller_tracking_haptic; +convar_t *vr_highlight_actionables; +convar_t *vr_headtorch; +convar_t *vr_quick_crouchjump; +convar_t *vr_stereo_side; void Android_Vibrate( float duration, int channel, float intensity ) { @@ -1418,6 +1425,7 @@ void VR_Init() sprintf(buffer, "%d", (int)vrFOV); vr_quest_fov = Cvar_Get("vr_quest_fov", buffer, CVAR_LATCH, "FOV for Lambda1VR" ); + vr_refresh = Cvar_Get("vr_refresh", "72", CVAR_ARCHIVE, "Refresh Rate" ); vr_control_scheme = Cvar_Get( "vr_control_scheme", "0", CVAR_ARCHIVE, "Controller Layout scheme" ); vr_enable_crouching = Cvar_Get( "vr_enable_crouching", "0.85", CVAR_ARCHIVE, "To enable real-world crouching trigger, set this to a value that multiplied by the user's height will trigger crouch mechanic" ); vr_height_adjust = Cvar_Get( "vr_height_adjust", "0.0", CVAR_ARCHIVE, "Additional height adjustment for in-game player (in metres)" ); @@ -1646,10 +1654,11 @@ void * AppThreadFunction( void * parm ) } #endif - //Set 90hz mode for Quest 2 - if (hmdType == VRAPI_DEVICE_TYPE_OCULUSQUEST2) { - vrapi_SetDisplayRefreshRate(appState.Ovr, 90); - } + //Set refresh rate + vrapi_SetDisplayRefreshRate(appState.Ovr, vr_refresh->value); + + //Enable Extra Latency Mode + vrapi_SetExtraLatencyMode(appState.Ovr, VRAPI_EXTRA_LATENCY_MODE_ON); // Get the HMD pose, predicted for the middle of the time period during which // the new eye images will be displayed. The number of frames predicted ahead diff --git a/Projects/Android/jni/src/Lambda1VR/VrCommon.h b/Projects/Android/jni/src/Lambda1VR/VrCommon.h index e1a55b8..aa5fc4e 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrCommon.h +++ b/Projects/Android/jni/src/Lambda1VR/VrCommon.h @@ -26,38 +26,38 @@ #define YAW 1 #define ROLL 2 -bool xash_initialised; +extern bool xash_initialised; -float playerHeight; -float playerYaw; +extern float playerHeight; +extern float playerYaw; -bool showingScreenLayer; -float vrFOV; +extern bool showingScreenLayer; +extern float vrFOV; -vec3_t worldPosition; +extern vec3_t worldPosition; -vec3_t hmdPosition; -vec3_t hmdorientation; -vec3_t positionDeltaThisFrame; +extern vec3_t hmdPosition; +extern vec3_t hmdorientation; +extern vec3_t positionDeltaThisFrame; #define ADJUSTED 0 #define UNADJUSTED 1 #define MELEE 2 -vec3_t weaponangles[3]; -vec3_t weaponoffset; -vec3_t weaponvelocity; +extern vec3_t weaponangles[3]; +extern vec3_t weaponoffset; +extern vec3_t weaponvelocity; -vec3_t offhandangles; +extern vec3_t offhandangles; -vec3_t flashlightangles; -vec3_t flashlightoffset; +extern vec3_t flashlightangles; +extern vec3_t flashlightoffset; #define DUCK_NOTDUCKED 0 #define DUCK_BUTTON 1 #define DUCK_CROUCHED 2 -int ducked; +extern int ducked; -bool player_moving; +extern bool player_moving; bool isMultiplayer(); bool isScopeEngaged(); diff --git a/Projects/Android/jni/src/Lambda1VR/VrCompositor.c b/Projects/Android/jni/src/Lambda1VR/VrCompositor.c index c474168..ba05751 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrCompositor.c +++ b/Projects/Android/jni/src/Lambda1VR/VrCompositor.c @@ -40,28 +40,23 @@ renderState void getCurrentRenderState( renderState * state) { - LOAD_GLES2(glGetIntegerv); - state->VertexBuffer = 0; state->IndexBuffer = 0; state->VertexArrayObject = 0; state->Program = 0; - gles_glGetIntegerv(GL_ARRAY_BUFFER, &state->VertexBuffer ); - gles_glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER, &state->IndexBuffer ); - gles_glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &state->VertexArrayObject ); - gles_glGetIntegerv(GL_CURRENT_PROGRAM, &state->Program ); + glGetIntegerv(GL_ARRAY_BUFFER, &state->VertexBuffer ); + glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER, &state->IndexBuffer ); + glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &state->VertexArrayObject ); + glGetIntegerv(GL_CURRENT_PROGRAM, &state->Program ); } void restoreRenderState( renderState * state ) { - LOAD_GLES2(glBindBuffer); - LOAD_GLES2(glUseProgram); - - GL( gles_glUseProgram( state->Program ) ); + GL( glUseProgram( state->Program ) ); GL( glBindVertexArray( state->VertexArrayObject ) ); - GL( gles_glBindBuffer( GL_ARRAY_BUFFER, state->VertexBuffer ) ); - GL( gles_glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, state->IndexBuffer ) ); + GL( glBindBuffer( GL_ARRAY_BUFFER, state->VertexBuffer ) ); + GL( glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, state->IndexBuffer ) ); } @@ -109,10 +104,6 @@ static void ovrGeometry_Clear( ovrGeometry * geometry ) static void ovrGeometry_CreateGroundPlane( ovrGeometry * geometry ) { - LOAD_GLES2(glGenBuffers); - LOAD_GLES2(glBindBuffer); - LOAD_GLES2(glBufferData); - typedef struct { float positions[4][4]; @@ -163,38 +154,34 @@ static void ovrGeometry_CreateGroundPlane( ovrGeometry * geometry ) renderState state; getCurrentRenderState(&state); - GL( gles_glGenBuffers( 1, &geometry->VertexBuffer ) ); - GL( gles_glBindBuffer( GL_ARRAY_BUFFER, geometry->VertexBuffer ) ); - GL( gles_glBufferData( GL_ARRAY_BUFFER, sizeof( cubeVertices ), &cubeVertices, GL_STATIC_DRAW ) ); + GL( glGenBuffers( 1, &geometry->VertexBuffer ) ); + GL( glBindBuffer( GL_ARRAY_BUFFER, geometry->VertexBuffer ) ); + GL( glBufferData( GL_ARRAY_BUFFER, sizeof( cubeVertices ), &cubeVertices, GL_STATIC_DRAW ) ); - GL( gles_glGenBuffers( 1, &geometry->IndexBuffer ) ); - GL( gles_glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, geometry->IndexBuffer ) ); - GL( gles_glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof( cubeIndices ), cubeIndices, 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 ) { - LOAD_GLES2(glDeleteBuffers); - - GL( gles_glDeleteBuffers( 1, &geometry->IndexBuffer ) ); - GL( gles_glDeleteBuffers( 1, &geometry->VertexBuffer ) ); + GL( glDeleteBuffers( 1, &geometry->IndexBuffer ) ); + GL( glDeleteBuffers( 1, &geometry->VertexBuffer ) ); ovrGeometry_Clear( geometry ); } static void ovrGeometry_CreateVAO( ovrGeometry * geometry ) { - LOAD_GLES2(glBindBuffer); - renderState state; getCurrentRenderState(&state); GL( glGenVertexArrays( 1, &geometry->VertexArrayObject ) ); GL( glBindVertexArray( geometry->VertexArrayObject ) ); - GL( gles_glBindBuffer( GL_ARRAY_BUFFER, geometry->VertexBuffer ) ); + GL( glBindBuffer( GL_ARRAY_BUFFER, geometry->VertexBuffer ) ); for ( int i = 0; i < MAX_VERTEX_ATTRIB_POINTERS; i++ ) { @@ -207,7 +194,7 @@ static void ovrGeometry_CreateVAO( ovrGeometry * geometry ) } } - GL( gles_glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, geometry->IndexBuffer ) ); + GL( glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, geometry->IndexBuffer ) ); restoreRenderState(&state); } @@ -259,65 +246,49 @@ static void ovrProgram_Clear( ovrProgram * program ) static bool ovrProgram_Create( ovrProgram * program, const char * vertexSource, const char * fragmentSource ) { - LOAD_GLES2(glGetIntegerv); - LOAD_GLES2(glCreateShader); - LOAD_GLES2(glShaderSource); - LOAD_GLES2(glCompileShader); - LOAD_GLES2(glGetShaderiv); - LOAD_GLES2(glGetShaderInfoLog); - LOAD_GLES2(glAttachShader); - LOAD_GLES2(glBindAttribLocation); - LOAD_GLES2(glLinkProgram); - LOAD_GLES2(glGetProgramiv); - LOAD_GLES2(glGetUniformLocation); - LOAD_GLES2(glCreateProgram); - LOAD_GLES2(glUseProgram); - LOAD_GLES2(glUniform1i); - LOAD_GLES2(glGetProgramInfoLog); - GLint r; - GL( program->VertexShader = gles_glCreateShader( GL_VERTEX_SHADER ) ); + GL( program->VertexShader = glCreateShader( GL_VERTEX_SHADER ) ); - GL( gles_glShaderSource( program->VertexShader, 1, &vertexSource, 0 ) ); - GL( gles_glCompileShader( program->VertexShader ) ); - GL( gles_glGetShaderiv( program->VertexShader, GL_COMPILE_STATUS, &r ) ); + 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( gles_glGetShaderInfoLog( program->VertexShader, sizeof( msg ), 0, msg ) ); + GL( glGetShaderInfoLog( program->VertexShader, sizeof( msg ), 0, msg ) ); ALOGE( "%s\n%s\n", vertexSource, msg ); return false; } - GL( program->FragmentShader = gles_glCreateShader( GL_FRAGMENT_SHADER ) ); - GL( gles_glShaderSource( program->FragmentShader, 1, &fragmentSource, 0 ) ); - GL( gles_glCompileShader( program->FragmentShader ) ); - GL( gles_glGetShaderiv( program->FragmentShader, GL_COMPILE_STATUS, &r ) ); + 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( gles_glGetShaderInfoLog( program->FragmentShader, sizeof( msg ), 0, msg ) ); + GL( glGetShaderInfoLog( program->FragmentShader, sizeof( msg ), 0, msg ) ); ALOGE( "%s\n%s\n", fragmentSource, msg ); return false; } - GL( program->Program = gles_glCreateProgram() ); - GL( gles_glAttachShader( program->Program, program->VertexShader ) ); - GL( gles_glAttachShader( program->Program, program->FragmentShader ) ); + 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( gles_glBindAttribLocation( program->Program, ProgramVertexAttributes[i].location, ProgramVertexAttributes[i].name ) ); + GL( glBindAttribLocation( program->Program, ProgramVertexAttributes[i].location, ProgramVertexAttributes[i].name ) ); } - GL( gles_glLinkProgram( program->Program ) ); - GL( gles_glGetProgramiv( program->Program, GL_LINK_STATUS, &r ) ); + GL( glLinkProgram( program->Program ) ); + GL( glGetProgramiv( program->Program, GL_LINK_STATUS, &r ) ); if ( r == GL_FALSE ) { GLchar msg[4096]; - GL( gles_glGetProgramInfoLog( program->Program, sizeof( msg ), 0, msg ) ); + GL( glGetProgramInfoLog( program->Program, sizeof( msg ), 0, msg ) ); ALOGE( "Linking program failed: %s\n", msg ); return false; } @@ -337,7 +308,7 @@ static bool ovrProgram_Create( ovrProgram * program, const char * vertexSource, } else { - GL( program->UniformLocation[uniformIndex] = gles_glGetUniformLocation( program->Program, ProgramUniforms[i].name ) ); + GL( program->UniformLocation[uniformIndex] = glGetUniformLocation( program->Program, ProgramUniforms[i].name ) ); program->UniformBinding[uniformIndex] = program->UniformLocation[uniformIndex]; } } @@ -345,17 +316,17 @@ static bool ovrProgram_Create( ovrProgram * program, const char * vertexSource, renderState state; getCurrentRenderState(&state); - GL( gles_glUseProgram( program->Program ) ); + 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] = gles_glGetUniformLocation( program->Program, name ); + program->Textures[i] = glGetUniformLocation( program->Program, name ); if ( program->Textures[i] != -1 ) { - GL( gles_glUniform1i( program->Textures[i], i ) ); + GL( glUniform1i( program->Textures[i], i ) ); } } @@ -366,22 +337,19 @@ static bool ovrProgram_Create( ovrProgram * program, const char * vertexSource, static void ovrProgram_Destroy( ovrProgram * program ) { - LOAD_GLES2(glDeleteProgram); - LOAD_GLES2(glDeleteShader); - if ( program->Program != 0 ) { - GL( gles_glDeleteProgram( program->Program ) ); + GL( glDeleteProgram( program->Program ) ); program->Program = 0; } if ( program->VertexShader != 0 ) { - GL( gles_glDeleteShader( program->VertexShader ) ); + GL( glDeleteShader( program->VertexShader ) ); program->VertexShader = 0; } if ( program->FragmentShader != 0 ) { - GL( gles_glDeleteShader( program->FragmentShader ) ); + GL( glDeleteShader( program->FragmentShader ) ); program->FragmentShader = 0; } } @@ -492,21 +460,6 @@ ovrRenderer ovrLayerProjection2 ovrRenderer_RenderGroundPlaneToEyeBuffer( ovrRenderer * renderer, const ovrJava * java, const ovrScene * scene, const ovrTracking2 * tracking ) { - LOAD_GLES2(glEnable); - LOAD_GLES2(glDepthMask); - LOAD_GLES2(glDepthFunc); - LOAD_GLES2(glViewport); - LOAD_GLES2(glScissor); - LOAD_GLES2(glClearColor); - LOAD_GLES2(glClear); - LOAD_GLES2(glDisable); - LOAD_GLES2(glGetIntegerv); - LOAD_GLES2(glBindBuffer); - LOAD_GLES2(glCullFace); - LOAD_GLES2(glDrawElements); - LOAD_GLES2(glUseProgram); - LOAD_GLES(glUniformMatrix4fv); - ovrLayerProjection2 layer = vrapi_DefaultLayerProjection2(); layer.HeadPose = tracking->HeadPose; for ( int eye = 0; eye < VRAPI_FRAME_LAYER_EYE_MAX; eye++ ) @@ -526,28 +479,28 @@ ovrLayerProjection2 ovrRenderer_RenderGroundPlaneToEyeBuffer( ovrRenderer * rend renderState state; getCurrentRenderState(&state); - GL( gles_glUseProgram( scene->Program.Program ) ); + GL( glUseProgram( scene->Program.Program ) ); ovrMatrix4f viewProjMatrix = ovrMatrix4f_Multiply( &tracking->Eye[eye].ProjectionMatrix, &tracking->Eye[eye].ViewMatrix ); glUniformMatrix4fv( scene->Program.UniformLocation[UNIFORM_VIEW_PROJ_MATRIX], 1, GL_TRUE, &viewProjMatrix.M[0][0] ); - GL( gles_glEnable( GL_SCISSOR_TEST ) ); - GL( gles_glDepthMask( GL_TRUE ) ); - GL( gles_glEnable( GL_DEPTH_TEST ) ); - GL( gles_glDepthFunc( GL_LEQUAL ) ); - GL( gles_glEnable( GL_CULL_FACE ) ); - GL( gles_glCullFace( GL_BACK ) ); - GL( gles_glViewport( 0, 0, frameBuffer->Width, frameBuffer->Height ) ); - GL( gles_glScissor( 0, 0, frameBuffer->Width, frameBuffer->Height ) ); - GL( gles_glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ) ); - GL( gles_glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ); + GL( glEnable( GL_SCISSOR_TEST ) ); + GL( glDepthMask( GL_TRUE ) ); + GL( glEnable( GL_DEPTH_TEST ) ); + GL( glDepthFunc( GL_LEQUAL ) ); + GL( glEnable( GL_CULL_FACE ) ); + GL( glCullFace( GL_BACK ) ); + GL( glViewport( 0, 0, frameBuffer->Width, frameBuffer->Height ) ); + GL( glScissor( 0, 0, frameBuffer->Width, frameBuffer->Height ) ); + GL( glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ) ); + GL( glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ); //bind buffers - GL( gles_glBindBuffer( GL_ARRAY_BUFFER, scene->GroundPlane.VertexBuffer ) ); - GL( gles_glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, scene->GroundPlane.IndexBuffer ) ); + GL( glBindBuffer( GL_ARRAY_BUFFER, scene->GroundPlane.VertexBuffer ) ); + GL( glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, scene->GroundPlane.IndexBuffer ) ); GL( glBindVertexArray( scene->GroundPlane.VertexArrayObject ) ); - GL( gles_glDrawElements( GL_TRIANGLES, scene->GroundPlane.IndexCount, GL_UNSIGNED_SHORT, NULL ) ); + GL( glDrawElements( GL_TRIANGLES, scene->GroundPlane.IndexCount, GL_UNSIGNED_SHORT, NULL ) ); restoreRenderState(&state); diff --git a/Projects/Android/jni/src/Lambda1VR/VrCvars.h b/Projects/Android/jni/src/Lambda1VR/VrCvars.h index 2ca8411..7a62fd2 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrCvars.h +++ b/Projects/Android/jni/src/Lambda1VR/VrCvars.h @@ -2,29 +2,30 @@ #include #include -convar_t *vr_snapturn_angle; -convar_t *vr_reloadtimeoutms; -convar_t *vr_positional_factor; -convar_t *vr_walkdirection; -convar_t *vr_weapon_pitchadjust; -convar_t *vr_crowbar_pitchadjust; -convar_t *vr_weapon_recoil; -convar_t *vr_weapon_stabilised; -convar_t *vr_lasersight; -convar_t *vr_quest_fov; -convar_t *vr_control_scheme; -convar_t *vr_enable_crouching; -convar_t *vr_height_adjust; -convar_t *vr_flashlight_model; -convar_t *vr_hand_model; -convar_t *vr_mirror_weapons; -convar_t *vr_weapon_backface_culling; -convar_t *vr_comfort_mask; -convar_t *vr_legacy_ladders; -convar_t *vr_controller_tracking_haptic; -convar_t *vr_highlight_actionables; -convar_t *vr_headtorch; -convar_t *vr_quick_crouchjump; +extern convar_t *vr_snapturn_angle; +extern convar_t *vr_reloadtimeoutms; +extern convar_t *vr_positional_factor; +extern convar_t *vr_walkdirection; +extern convar_t *vr_weapon_pitchadjust; +extern convar_t *vr_crowbar_pitchadjust; +extern convar_t *vr_weapon_recoil; +extern convar_t *vr_weapon_stabilised; +extern convar_t *vr_lasersight; +extern convar_t *vr_quest_fov; +extern convar_t *vr_refresh; +extern convar_t *vr_control_scheme; +extern convar_t *vr_enable_crouching; +extern convar_t *vr_height_adjust; +extern convar_t *vr_flashlight_model; +extern convar_t *vr_hand_model; +extern convar_t *vr_mirror_weapons; +extern convar_t *vr_weapon_backface_culling; +extern convar_t *vr_comfort_mask; +extern convar_t *vr_legacy_ladders; +extern convar_t *vr_controller_tracking_haptic; +extern convar_t *vr_highlight_actionables; +extern convar_t *vr_headtorch; +extern convar_t *vr_quick_crouchjump; //Used and updated continuously during rendering -convar_t *vr_stereo_side; \ No newline at end of file +extern convar_t *vr_stereo_side; \ No newline at end of file diff --git a/Projects/Android/jni/src/Lambda1VR/VrInput.h b/Projects/Android/jni/src/Lambda1VR/VrInput.h index 21125c5..d420191 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInput.h +++ b/Projects/Android/jni/src/Lambda1VR/VrInput.h @@ -10,23 +10,23 @@ enum control_scheme; #define SCOPE_ENGAGE_DISTANCE 0.28 -ovrInputStateTrackedRemote leftTrackedRemoteState_old; -ovrInputStateTrackedRemote leftTrackedRemoteState_new; -ovrTracking leftRemoteTracking_new; +extern ovrInputStateTrackedRemote leftTrackedRemoteState_old; +extern ovrInputStateTrackedRemote leftTrackedRemoteState_new; +extern ovrTracking leftRemoteTracking_new; -ovrInputStateTrackedRemote rightTrackedRemoteState_old; -ovrInputStateTrackedRemote rightTrackedRemoteState_new; -ovrTracking rightRemoteTracking_new; +extern ovrInputStateTrackedRemote rightTrackedRemoteState_old; +extern ovrInputStateTrackedRemote rightTrackedRemoteState_new; +extern ovrTracking rightRemoteTracking_new; -ovrDeviceID controllerIDs[2]; +extern ovrDeviceID controllerIDs[2]; -float remote_movementSideways; -float remote_movementForward; -float positional_movementSideways; -float positional_movementForward; -float snapTurn; +extern float remote_movementSideways; +extern float remote_movementForward; +extern float positional_movementSideways; +extern float positional_movementForward; +extern float snapTurn; -int hmdType; +extern int hmdType; void sendButtonAction(const char* action, long buttonDown); void sendButtonActionSimple(const char* action); @@ -49,10 +49,10 @@ void HandleInput_OneController( ovrInputStateTrackedRemote *pDominantTrackedRemo ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking, int domButton1, int domButton2, int offButton1, int offButton2 ); -bool stabiliseScope; +extern bool stabiliseScope; void updateScopeAngles(float forwardYaw); -char * g_pszBackpackWeapon; +extern char * g_pszBackpackWeapon; #endif //VRINPUT_H diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c b/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c index c3d904e..6126c82 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputAlt.c @@ -29,7 +29,7 @@ extern cvar_t *cl_movespeedkey; void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx, float dy ); -float initialTouchX, initialTouchY; +extern float initialTouchX, initialTouchY; void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, @@ -535,7 +535,7 @@ void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovr player_moving |= (vr_snapturn_angle->value <= 10.0f && fabs(pDominantTrackedRemoteNew->Joystick.x) > 0.6f); - if (pDominantTrackedRemoteNew->Joystick.x > 0.6f) + if (pDominantTrackedRemoteNew->Joystick.x > 0.7f) { if (increaseSnap) { @@ -550,13 +550,13 @@ void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovr } } } - else if (pDominantTrackedRemoteNew->Joystick.x < 0.4f) + else if (pDominantTrackedRemoteNew->Joystick.x < 0.1f) { increaseSnap = true; } static bool decreaseSnap = true; - if (pDominantTrackedRemoteNew->Joystick.x < -0.6f) + if (pDominantTrackedRemoteNew->Joystick.x < -0.7f) { if (decreaseSnap) { @@ -573,7 +573,7 @@ void HandleInput_Alt( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovr } } } - else if (pDominantTrackedRemoteNew->Joystick.x > -0.4f) + else if (pDominantTrackedRemoteNew->Joystick.x > -0.2f) { decreaseSnap = true; } diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputAlt2.c b/Projects/Android/jni/src/Lambda1VR/VrInputAlt2.c index f42f1a1..1922e63 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputAlt2.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputAlt2.c @@ -29,7 +29,7 @@ extern cvar_t *cl_movespeedkey; void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx, float dy ); -float initialTouchX, initialTouchY; +extern float initialTouchX, initialTouchY; void HandleInput_Alt2( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, @@ -554,7 +554,7 @@ void HandleInput_Alt2( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ov fabs(pOffTrackedRemoteNew->Joystick.x) > 0.6f); static bool increaseSnap = true; - if (pOffTrackedRemoteNew->Joystick.x > 0.6f) + if (pOffTrackedRemoteNew->Joystick.x > 0.7f) { if (increaseSnap) { @@ -568,12 +568,12 @@ void HandleInput_Alt2( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ov snapTurn += 360.f; } } - } else if (pOffTrackedRemoteNew->Joystick.x < 0.4f) { + } else if (pOffTrackedRemoteNew->Joystick.x < 0.1f) { increaseSnap = true; } static bool decreaseSnap = true; - if (pOffTrackedRemoteNew->Joystick.x < -0.6f) + if (pOffTrackedRemoteNew->Joystick.x < -0.7f) { if (decreaseSnap) { @@ -589,7 +589,7 @@ void HandleInput_Alt2( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ov snapTurn -= 360.f; } } - } else if (pOffTrackedRemoteNew->Joystick.x > -0.4f) + } else if (pOffTrackedRemoteNew->Joystick.x > -0.2f) { decreaseSnap = true; } diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputCommon.c b/Projects/Android/jni/src/Lambda1VR/VrInputCommon.c index f1d3b15..9626186 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputCommon.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputCommon.c @@ -23,6 +23,52 @@ Authors : Simon Brown #include "VrInput.h" +ovrDeviceID controllerIDs[2]; + +bool xash_initialised; + +float playerHeight; +float playerYaw; + +bool showingScreenLayer; +float vrFOV; + +vec3_t worldPosition; + +vec3_t hmdPosition; +vec3_t hmdorientation; +vec3_t positionDeltaThisFrame; + +vec3_t weaponangles[3]; +vec3_t weaponoffset; +vec3_t weaponvelocity; + +vec3_t offhandangles; + +vec3_t flashlightangles; +vec3_t flashlightoffset; +int ducked; + +bool player_moving; + +bool stabiliseScope; +char * g_pszBackpackWeapon; + +ovrInputStateTrackedRemote leftTrackedRemoteState_old; +ovrInputStateTrackedRemote leftTrackedRemoteState_new; +ovrTracking leftRemoteTracking_new; + +ovrInputStateTrackedRemote rightTrackedRemoteState_old; +ovrInputStateTrackedRemote rightTrackedRemoteState_new; +ovrTracking rightRemoteTracking_new; + +float remote_movementSideways; +float remote_movementForward; +float positional_movementSideways; +float positional_movementForward; +float snapTurn; + +int hmdType; void handleTrackedControllerButton(ovrInputStateTrackedRemote * trackedRemoteState, ovrInputStateTrackedRemote * prevTrackedRemoteState, uint32_t button, int key) { @@ -61,7 +107,7 @@ float length(float x, float y) return sqrtf(powf(x, 2.0f) + powf(y, 2.0f)); } -#define NLF_DEADZONE 0.1 +#define NLF_DEADZONE 0.2 #define NLF_POWER 2.2 float nonLinearFilter(float in) @@ -147,7 +193,7 @@ void acquireTrackedRemotesData(const ovrMobile *Ovr, double displayTime) {//The int IN_TouchEvent( touchEventType type, int fingerID, float x, float y, float dx, float dy ); -float initialTouchX, initialTouchY; +extern float initialTouchX, initialTouchY; void interactWithTouchScreen(ovrTracking *tracking, ovrInputStateTrackedRemote *newState, ovrInputStateTrackedRemote *oldState) { float remoteAngles[3]; diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c b/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c index b1f763c..be455ff 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputDefault.c @@ -552,7 +552,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, fabs(pDominantTrackedRemoteNew->Joystick.x) > 0.6f); static bool increaseSnap = true; - if (pDominantTrackedRemoteNew->Joystick.x > 0.6f) + if (pDominantTrackedRemoteNew->Joystick.x > 0.7f) { if (increaseSnap) { @@ -566,12 +566,12 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, snapTurn += 360.f; } } - } else if (pDominantTrackedRemoteNew->Joystick.x < 0.4f) { + } else if (pDominantTrackedRemoteNew->Joystick.x < 0.1f) { increaseSnap = true; } static bool decreaseSnap = true; - if (pDominantTrackedRemoteNew->Joystick.x < -0.6f) + if (pDominantTrackedRemoteNew->Joystick.x < -0.7f) { if (decreaseSnap) { @@ -587,7 +587,7 @@ void HandleInput_Default( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, snapTurn -= 360.f; } } - } else if (pDominantTrackedRemoteNew->Joystick.x > -0.4f) + } else if (pDominantTrackedRemoteNew->Joystick.x > -0.2f) { decreaseSnap = true; } diff --git a/Projects/Android/jni/src/Lambda1VR/VrInputOneController.c b/Projects/Android/jni/src/Lambda1VR/VrInputOneController.c index fa6f3d5..5a9e359 100644 --- a/Projects/Android/jni/src/Lambda1VR/VrInputOneController.c +++ b/Projects/Android/jni/src/Lambda1VR/VrInputOneController.c @@ -30,7 +30,7 @@ extern cvar_t *cl_movespeedkey; void Touch_Motion( touchEventType type, int fingerID, float x, float y, float dx, float dy ); -float initialTouchX, initialTouchY; +extern float initialTouchX, initialTouchY; void HandleInput_OneController( ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, diff --git a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_game.c b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_game.c index e044795..68e2e34 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_game.c +++ b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_game.c @@ -986,8 +986,8 @@ Render crosshair ==================== */ -vec3_t weaponangles[3]; -vec3_t hmdorientation; +extern vec3_t weaponangles[3]; +extern vec3_t hmdorientation; void CL_DrawCrosshair( void ) { diff --git a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_mobile.c b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_mobile.c index 6362b17..16fe611 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_mobile.c +++ b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_mobile.c @@ -28,7 +28,7 @@ GNU General Public License for more details. mobile_engfuncs_t *gMobileEngfuncs; -convar_t *vibration_enable; +extern convar_t *vibration_enable; static void pfnVibrate( float duration, int channel, float intensity ) { diff --git a/Projects/Android/jni/src/Xash3D/xash3d/engine/common/build.c b/Projects/Android/jni/src/Xash3D/xash3d/engine/common/build.c index 9ef1036..ecb1fe4 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/engine/common/build.c +++ b/Projects/Android/jni/src/Xash3D/xash3d/engine/common/build.c @@ -139,7 +139,7 @@ Q_buildcommit will identify this build as release or "notset" */ const char *Q_buildcommit( void ) { - return "Lambda1VR-v1.4.9"; + return "Lambda1VR-v1.5.0"; } /* diff --git a/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/Credits.cpp b/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/Credits.cpp index a964069..ead6edc 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/Credits.cpp +++ b/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/Credits.cpp @@ -29,6 +29,7 @@ static const char *uiCreditsDefault[] = "", "Copyright XashXT Group 2017 (C)", "Copyright Flying With Gauss 2017 (C)", + "Copyright Team Beef 2022 (C)", 0 }; diff --git a/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/VideoOptions.cpp b/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/VideoOptions.cpp index e4854ef..6ba0367 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/VideoOptions.cpp +++ b/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/VideoOptions.cpp @@ -23,10 +23,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "PicButton.h" #include "Slider.h" #include "CheckBox.h" +#include "SpinControl.h" +#include "StringArrayModel.h" #define ART_BANNER "gfx/shell/head_vidoptions" #define ART_GAMMA "gfx/shell/gamma" +static const char *refreshStr[] = +{ + "60hz", "72hz", "80hz", "90hz", "120hz" +}; + + class CMenuVidOptions : public CMenuFramework { private: @@ -38,6 +46,8 @@ public: void SaveAndPopMenu() override; void GammaUpdate(); void GammaGet(); + void GetConfig(); + void RefreshChanged( void ); int outlineWidth; @@ -50,6 +60,7 @@ public: CMenuSlider gammaIntensity; CMenuSlider glareReduction; + CMenuSpinControl refresh; //CMenuCheckBox fastSky; CMenuCheckBox hiTextures; CMenuCheckBox vbo; @@ -87,6 +98,7 @@ void CMenuVidOptions::GammaGet( void ) void CMenuVidOptions::SaveAndPopMenu( void ) { glareReduction.WriteCvar(); + //refresh.WriteCvar(); //fastSky.WriteCvar(); hiTextures.WriteCvar(); vbo.WriteCvar(); @@ -96,6 +108,9 @@ void CMenuVidOptions::SaveAndPopMenu( void ) vignette.WriteCvar(); // gamma is already written + //write refresh + RefreshChanged(); + CMenuFramework::SaveAndPopMenu(); } @@ -178,20 +193,31 @@ void CMenuVidOptions::_Init( void ) glareReduction.LinkCvar( "brightness" ); } - height.SetCoord( 72, 400 ); + + static CStringArrayModel model( refreshStr, ARRAYSIZE( refreshStr )); + refresh.Setup( &model ); + refresh.font = QM_SMALLFONT; + refresh.SetRect( 72, 400, 300, 32 ); + refresh.SetNameAndStatus( "Refresh", "Set Refresh Rate" ); + refresh.Setup( 0, 4, 1 ); + //refresh.LinkCvar( "vr_refresh", CMenuEditable::CVAR_VALUE ); + refresh.onChanged = VoidCb( &CMenuVidOptions::RefreshChanged ); + + + height.SetCoord( 72, 470 ); height.SetNameAndStatus( "Height Offset: %.1fm", "Set Player Height Adjustment" ); height.Setup( -0.5, 1.0, 0.1 ); height.SetDrawValue(true); height.LinkCvar( "vr_height_adjust" ); - vignette.SetCoord( 72, 450 ); + vignette.SetCoord( 72, 520 ); vignette.SetNameAndStatus( "Comfort Vignette", "Set Comfort Vignette" ); vignette.Setup( 0.0, 0.7, 0.05 ); vignette.SetDrawValue(true); vignette.LinkCvar( "vr_comfort_mask" ); vbo.SetNameAndStatus( "Use VBO", "Use new world renderer. Faster, but causes issues with flashlight" ); - vbo.SetCoord( 72, 495 ); + vbo.SetCoord( 72, 555 ); vbo.LinkCvar( "r_vbo" ); // vbo.onChanged = CMenuCheckBox::BitMaskCb; // vbo.onChanged.pExtra = &bump.iFlags; @@ -199,7 +225,7 @@ void CMenuVidOptions::_Init( void ) vbo.iMask = QMF_GRAYED; actionables.SetNameAndStatus( "Highlight Usable Objects", "Enables highlighting of objects when they can be \"used\"" ); - actionables.SetCoord( 72, 545 ); + actionables.SetCoord( 72, 605 ); actionables.LinkCvar( "vr_highlight_actionables" ); //fastSky.SetNameAndStatus( "Draw simple sky", "enable/disable fast sky rendering (for old computers)" ); @@ -207,15 +233,15 @@ void CMenuVidOptions::_Init( void ) //fastSky.LinkCvar( "r_fastsky" ); hiTextures.SetNameAndStatus( "Allow materials", "let engine replace 8-bit textures with full color hi-res prototypes (if present)" ); - hiTextures.SetCoord( 72, 595 ); + hiTextures.SetCoord( 72, 655 ); hiTextures.LinkCvar( "host_allow_materials" ); fps.SetNameAndStatus( "Show FPS", "Show FPS Counter" ); - fps.SetCoord( 72, 645 ); + fps.SetCoord( 72, 705 ); fps.LinkCvar( "cl_showfps" ); done.SetNameAndStatus( "Done", "Go back to the Video Menu" ); - done.SetCoord( 72, 695 ); + done.SetCoord( 72, 755 ); done.SetPicture( PC_DONE ); done.onActivated = VoidCb( &CMenuVidOptions::SaveAndPopMenu ); @@ -224,6 +250,7 @@ void CMenuVidOptions::_Init( void ) AddItem( done ); AddItem( gammaIntensity ); AddItem( glareReduction ); + AddItem( refresh ); AddItem( actionables ); AddItem( fps ); AddItem( vbo ); @@ -234,10 +261,74 @@ void CMenuVidOptions::_Init( void ) AddItem( testImage ); } +void CMenuVidOptions::RefreshChanged( void ) +{ + if( refresh.GetCurrentValue() == 0) + { + EngFuncs::CvarSetValue("vr_refresh", 60.0); + } + else if( refresh.GetCurrentValue() == 1) + { + EngFuncs::CvarSetValue("vr_refresh", 72); + } + else if( refresh.GetCurrentValue() == 2) + { + EngFuncs::CvarSetValue("vr_refresh", 80); + } + else if( refresh.GetCurrentValue() == 3) + { + EngFuncs::CvarSetValue("vr_refresh", 90); + } + else if( refresh.GetCurrentValue() == 4) + { + EngFuncs::CvarSetValue("vr_refresh", 120); + } +} +/* +================= +CMenuVidOptions::GetConfig +================= +*/ +void CMenuVidOptions::GetConfig( void ) +{ + int vr_refresh = (int)EngFuncs::GetCvarFloat("vr_refresh"); + int val = 0; + switch (vr_refresh) + { + case 72: + { + val = 1; + } + break; + case 80: + { + val = 2; + } + break; + case 90: + { + val = 3; + } + break; + case 120: + { + val = 4; + } + break; + default: + break; + } + + refresh.ForceDisplayString( refreshStr[val] ); + refresh.SetCurrentValue( (float)val ); +} + void CMenuVidOptions::_VidInit() { outlineWidth = 2; UI_ScaleCoords( NULL, NULL, &outlineWidth, NULL ); + + GetConfig(); } /* diff --git a/Projects/Android/jni/src/gl4es/src/gl/fpe_shader.h b/Projects/Android/jni/src/gl4es/src/gl/fpe_shader.h index 2b32b24..69a8db2 100644 --- a/Projects/Android/jni/src/gl4es/src/gl/fpe_shader.h +++ b/Projects/Android/jni/src/gl4es/src/gl/fpe_shader.h @@ -3,7 +3,7 @@ #include "fpe.h" -const char* fpeshader_signature; +extern const char* fpeshader_signature; const char* const* fpe_VertexShader(fpe_state_t *state); const char* const* fpe_FragmentShader(fpe_state_t *state); diff --git a/Projects/Android/jni/src/gl4es/src/gl/string_utils.h b/Projects/Android/jni/src/gl4es/src/gl/string_utils.h index 467b17e..5927705 100644 --- a/Projects/Android/jni/src/gl4es/src/gl/string_utils.h +++ b/Projects/Android/jni/src/gl4es/src/gl/string_utils.h @@ -1,7 +1,7 @@ #ifndef _GL4ES_STRING_UTILS_H_ #define _GL4ES_STRING_UTILS_H_ -const char* AllSeparators; +//const char* AllSeparators; int CountString(char* pBuffer, const char* S); char* ResizeIfNeeded(char* pBuffer, int *size, int addsize); diff --git a/java/com/drbeef/lambda1vr/GLES3JNIActivity.java b/java/com/drbeef/lambda1vr/GLES3JNIActivity.java index 05ab44a..5504590 100644 --- a/java/com/drbeef/lambda1vr/GLES3JNIActivity.java +++ b/java/com/drbeef/lambda1vr/GLES3JNIActivity.java @@ -14,6 +14,7 @@ import java.io.OutputStream; import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.AssetManager; @@ -420,9 +421,9 @@ import static android.system.Os.setenv; //Set default environment try { + ApplicationInfo info = getApplicationInfo(); setenv("XASH3D_BASEDIR", "/sdcard/xash/", true); - setenv("XASH3D_ENGLIBDIR", getFilesDir().getParentFile().getPath() + "/lib", true); - setenv("XASH3D_GAMELIBDIR", getFilesDir().getParentFile().getPath() + "/lib", true); + setenv("XASH3D_GAMELIBDIR", info.nativeLibraryDir, true); setenv("XASH3D_GAMEDIR", "valve", true); setenv( "XASH3D_EXTRAS_PAK1", getFilesDir().getPath() + "/extras.pak", true );