From c7a7e7e2f7b3338355df48b1ddf27b7ce558243e Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 24 Nov 2019 19:09:29 +0000 Subject: [PATCH] Configurable Comfort Vignette --- .../jni/src/Lambda1VR/L1VR_SurfaceView.c | 18 ++++++-- .../src/Xash3D/xash3d/engine/client/cl_game.c | 45 +++++++++++++++++++ .../src/Xash3D/xash3d/engine/client/cl_scrn.c | 1 + .../src/Xash3D/xash3d/engine/client/cl_view.c | 3 +- .../src/Xash3D/xash3d/engine/client/client.h | 2 + .../xash3d/mainui/menus/VideoOptions.cpp | 22 ++++++--- .../drbeef/lambda1vr/GLES3JNIActivity.java | 3 +- 7 files changed, 83 insertions(+), 11 deletions(-) diff --git a/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c b/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c index c6fe603..5decfa0 100644 --- a/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c +++ b/Projects/Android/jni/src/Lambda1VR/L1VR_SurfaceView.c @@ -646,10 +646,22 @@ void ovrFramebuffer_ClearEdgeTexels( ovrFramebuffer * frameBuffer ) // Clear to fully opaque black. GL( gles_glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ) ); - bool useMask = (vr_comfort_mask->value != 0.0f && player_moving); + //Glide comfort mask in and out + static float currentVLevel = 0.0f; + if (player_moving) + { + if (currentVLevel < vr_comfort_mask->value) + currentVLevel += vr_comfort_mask->value * 0.05; + } else{ + if (currentVLevel > 0.0f) + currentVLevel -= vr_comfort_mask->value * 0.05; + } - float width = useMask ? (frameBuffer->Width / 2.0f) * vr_comfort_mask->value : 1; - float height = useMask ? (frameBuffer->Height / 2.0f) * vr_comfort_mask->value : 1; + + bool useMask = (currentVLevel > 0.0f && currentVLevel <= 1.0f); + + float width = useMask ? (frameBuffer->Width / 2.0f) * currentVLevel : 1; + float height = useMask ? (frameBuffer->Height / 2.0f) * currentVLevel : 1; // bottom GL( gles_glScissor( 0, 0, frameBuffer->Width, width ) ); 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 a550a14..4470f5b 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 @@ -15,6 +15,7 @@ GNU General Public License for more details. #ifndef XASH_DEDICATED +#include #include "common.h" #include "client.h" #include "const.h" @@ -31,6 +32,7 @@ GNU General Public License for more details. #include "library.h" #include "vgui_draw.h" #include "sound.h" // SND_STOP_LOOPING +#include "../../../../Lambda1VR/VrCvars.h" #define MAX_LINELENGTH 80 #define MAX_TEXTCHANNELS 8 // must be power of two (GoldSrc uses 4 channels) @@ -648,6 +650,49 @@ void CL_DrawCenterPrint( void ) } } + +/* +============= +CL_DrawVignette + + +============= +*/ +extern bool player_moving; + +void CL_DrawVignette( void ) +{ + if (vr_comfort_mask->value <= 0.0f || + vr_comfort_mask->value > 1.0f) + { + return; + } + + static float currentVLevel = 0.0f; + + if (player_moving) + { + if (currentVLevel < vr_comfort_mask->value) + currentVLevel += vr_comfort_mask->value * 0.05; + } else{ + if (currentVLevel > 0.0f) + currentVLevel -= vr_comfort_mask->value * 0.05; + } + + if (currentVLevel > 0.0f && + currentVLevel < 1.0f) + { + int x = (int)((scr_width->integer / 2) * currentVLevel); + int y = (int)((scr_height->integer / 2) * currentVLevel); + + GL_SetRenderMode(kRenderTransTexture); + R_DrawStretchPic(x, y, scr_width->integer - (2 * x), scr_height->integer - (2 * y), 0, 0, 1, 1, + cls.vignetteImage); + pglColor4ub(255, 255, 255, 255); + } +} + + /* ============= CL_DrawScreenFade diff --git a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_scrn.c b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_scrn.c index f96f640..0d6da26 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_scrn.c +++ b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_scrn.c @@ -606,6 +606,7 @@ void SCR_InstallParticlePalette( void ) void SCR_RegisterTextures( void ) { cls.fillImage = GL_LoadTexture( "*white", NULL, 0, TF_IMAGE, NULL ); // used for FillRGBA + cls.vignetteImage = GL_LoadTexture( "sprites/vignette.tga", NULL, 0, TF_IMAGE, NULL ); // used for puke reducing vignette cls.particleImage = GL_LoadTexture( "*particle", NULL, 0, TF_IMAGE, NULL ); // register gfx.wad images diff --git a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_view.c b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_view.c index bc177dd..00c61d0 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_view.c +++ b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/cl_view.c @@ -450,6 +450,7 @@ void V_PostRender( void ) if( cls.state == ca_active ) { SCR_TileClear(); + CL_DrawVignette(); CL_DrawHUD( CL_ACTIVE ); VGui_Paint(); } @@ -481,7 +482,7 @@ void V_PostRender( void ) CL_DrawDemoRecording(); R_ShowTextures(); CL_DrawHUD( CL_CHANGELEVEL ); - + Con_DrawConsole(); UI_UpdateMenu( host.realtime ); SCR_DrawNetGraph(); diff --git a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/client.h b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/client.h index e6d5218..b2d184d 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/engine/client/client.h +++ b/Projects/Android/jni/src/Xash3D/xash3d/engine/client/client.h @@ -489,6 +489,7 @@ typedef struct int loadingBar; // 'loading' progress bar int glowShell; // for renderFxGlowShell int tileImage; // for draw any areas not covered by the refresh + int vignetteImage; HSPRITE hChromeSprite; // this is a really HudSprite handle, not texnum! cl_font_t creditsFont; // shared creditsfont @@ -688,6 +689,7 @@ void CL_InitEdicts( void ); void CL_FreeEdicts( void ); void CL_ClearWorld( void ); void CL_DrawCenterPrint( void ); +void CL_DrawVignette( void ); void CL_FreeEntity( cl_entity_t *pEdict ); void CL_CenterPrint( const char *text, float y ); void CL_TextMessageParse( byte *pMemFile, int fileSize ); 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 e3b74a2..391572c 100644 --- a/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/VideoOptions.cpp +++ b/Projects/Android/jni/src/Xash3D/xash3d/mainui/menus/VideoOptions.cpp @@ -53,9 +53,10 @@ public: CMenuCheckBox fastSky; CMenuCheckBox hiTextures; CMenuCheckBox vbo; - CMenuCheckBox bump; + //CMenuCheckBox bump; CMenuCheckBox fps; CMenuSlider height; + CMenuSlider vignette; HIMAGE hTestImage; } uiVidOptions; @@ -89,9 +90,10 @@ void CMenuVidOptions::SaveAndPopMenu( void ) fastSky.WriteCvar(); hiTextures.WriteCvar(); vbo.WriteCvar(); - bump.WriteCvar(); + //bump.WriteCvar(); fps.WriteCvar(); height.WriteCvar(); + vignette.WriteCvar(); // gamma is already written CMenuFramework::SaveAndPopMenu(); @@ -182,17 +184,24 @@ void CMenuVidOptions::_Init( void ) height.SetDrawValue(true); height.LinkCvar( "vr_height_adjust" ); + vignette.SetCoord( 72, 450 ); + vignette.SetNameAndStatus( "Comfort Vignette", "Set Comfort Vignette" ); + vignette.Setup( 0.0, 0.7, 0.05 ); + vignette.SetDrawValue(true); + vignette.LinkCvar( "vr_comfort_mask" ); + +/* bump.SetNameAndStatus( "Bump-mapping", "Enable bump mapping" ); bump.SetCoord( 72, 445 ); bump.LinkCvar( "r_bump" ); if( !EngFuncs::GetCvarFloat( "r_vbo" ) ) bump.SetGrayed( true ); - +*/ vbo.SetNameAndStatus( "Use VBO", "Use new world renderer. Faster, but causes issues with flashlight" ); vbo.SetCoord( 72, 495 ); vbo.LinkCvar( "r_vbo" ); - vbo.onChanged = CMenuCheckBox::BitMaskCb; - vbo.onChanged.pExtra = &bump.iFlags; +// vbo.onChanged = CMenuCheckBox::BitMaskCb; +// vbo.onChanged.pExtra = &bump.iFlags; vbo.bInvertMask = true; vbo.iMask = QMF_GRAYED; @@ -218,10 +227,11 @@ void CMenuVidOptions::_Init( void ) AddItem( done ); AddItem( gammaIntensity ); AddItem( glareReduction ); - AddItem( bump ); + //AddItem( bump ); AddItem( fps ); AddItem( vbo ); AddItem( height ); + AddItem( vignette ); AddItem( fastSky ); AddItem( hiTextures ); AddItem( testImage ); diff --git a/java/com/drbeef/lambda1vr/GLES3JNIActivity.java b/java/com/drbeef/lambda1vr/GLES3JNIActivity.java index d82244c..0f24370 100644 --- a/java/com/drbeef/lambda1vr/GLES3JNIActivity.java +++ b/java/com/drbeef/lambda1vr/GLES3JNIActivity.java @@ -183,8 +183,9 @@ import static android.system.Os.setenv; //special commands copy_asset("/sdcard/xash/" + game + "/", "commands.lst", false); // Copy in case user has deleted their config - //Copy our special sprites + //Copy our special stuff copy_asset("/sdcard/xash/" + game + "/", "sprites/s_stealth.spr", true); + copy_asset("/sdcard/xash/" + game + "/", "sprites/vignette.tga", true); //Copy modified weapon models if (!(new File("/sdcard/xash/" + game + "/models/no_copy").exists()))