diff --git a/Projects/Android/AndroidManifest.xml b/Projects/Android/AndroidManifest.xml index 699e442..e0ed84a 100644 --- a/Projects/Android/AndroidManifest.xml +++ b/Projects/Android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="1" + android:versionName="0.0.1" android:installLocation="auto" > diff --git a/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c b/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c index f9171ea..e42cfde 100644 --- a/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c +++ b/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c @@ -883,7 +883,7 @@ void getVROrigins(vec3_t _weaponoffset, vec3_t _weaponangles, vec3_t _hmdPositio } -void D_DoomMain (void); +void VR_DoomMain(int argc, char** argv); void VR_GetMove( float *forward, float *side, float *up, float *yaw, float *pitch, float *roll ) { @@ -1533,7 +1533,7 @@ void * AppThreadFunction(void * parm ) { } //Should now be all set up and ready - start the Doom main loop - D_DoomMain(); + VR_DoomMain(argc, argv); //We are done, shutdown cleanly shutdownVR(); diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/d_main.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/d_main.cpp index 9418b58..832cd50 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/d_main.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/d_main.cpp @@ -2339,7 +2339,14 @@ static void CheckCmdLine() // //========================================================================== -void D_DoomMain (void) +void VR_DoomMain(int argc, char** argv) +{ + Args = new FArgs(argc, argv); + C_InitConsole (80*8, 25*8, false); + D_DoomMain (); +} + +void D_DoomMain () { int p; const char *v; diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/d_main.h b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/d_main.h index 78e3e88..7f5f6ab 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/d_main.h +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/d_main.h @@ -45,7 +45,9 @@ struct CRestartException char dummy; }; -extern "C" void D_DoomMain (void); + +extern "C" void VR_DoomMain(int argc, char** argv); +void D_DoomMain (void); void D_Display (); diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/scene/gl_weapon.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/scene/gl_weapon.cpp index 31dc8ae..ca60e5d 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/scene/gl_weapon.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/scene/gl_weapon.cpp @@ -54,6 +54,16 @@ EXTERN_CVAR (Bool, r_drawplayersprites) EXTERN_CVAR(Float, transsouls) EXTERN_CVAR(Int, gl_fuzztype) EXTERN_CVAR (Bool, r_deathcamera) +EXTERN_CVAR(Int, r_PlayerSprites3DMode) +EXTERN_CVAR(Float, gl_fatItemWidth) + +enum PlayerSprites3DMode +{ + CROSSED, + BACK_ONLY, + ITEM_ONLY, + FAT_ITEM, +}; //========================================================================== @@ -111,6 +121,7 @@ void GLSceneDrawer::DrawPSprite (player_t * player,DPSprite *psp, float sx, floa // killough 12/98: fix psprite positioning problem ftexturemid = 100.f - sy - r.top - psp->GetYAdjust(screenblocks >= 11); + AActor * wi=player->ReadyWeapon; scale = (SCREENHEIGHT*vw) / (SCREENWIDTH * 200.0f); y1 = viewwindowy + vh / 2 - (ftexturemid * scale); y2 = y1 + (r.height * scale) + 1; @@ -132,17 +143,103 @@ void GLSceneDrawer::DrawPSprite (player_t * player,DPSprite *psp, float sx, floa } - if (tex->GetTransparent() || OverrideShader != -1) + if ((tex->GetTransparent() || OverrideShader != -1) && !s3d::Stereo3DMode::getCurrentMode().RenderPlayerSpritesCrossed()) { gl_RenderState.AlphaFunc(GL_GEQUAL, 0.f); } gl_RenderState.Apply(); - FQuadDrawer qd; - qd.Set(0, x1, y1, 0, fU1, fV1); - qd.Set(1, x1, y2, 0, fU1, fV2); - qd.Set(2, x2, y1, 0, fU2, fV1); - qd.Set(3, x2, y2, 0, fU2, fV2); - qd.Render(GL_TRIANGLE_STRIP); + + if (r_PlayerSprites3DMode != ITEM_ONLY && r_PlayerSprites3DMode != FAT_ITEM) + { + FQuadDrawer qd; + qd.Set(0, x1, y1, 0, fU1, fV1); + qd.Set(1, x1, y2, 0, fU1, fV2); + qd.Set(2, x2, y1, 0, fU2, fV1); + qd.Set(3, x2, y2, 0, fU2, fV2); + qd.Render(GL_TRIANGLE_STRIP); + } + + if (psp->GetID() == PSP_WEAPON && s3d::Stereo3DMode::getCurrentMode().RenderPlayerSpritesCrossed()) + { + if (r_PlayerSprites3DMode == BACK_ONLY) + return; + + FState* spawn = wi->FindState(NAME_Spawn); + + lump = sprites[spawn->sprite].GetSpriteFrame(0, 0, 0., &mirror); + if (!lump.isValid()) return; + + tex = FMaterial::ValidateTexture(lump, true, false); + if (!tex) return; + + gl_RenderState.SetMaterial(tex, CLAMP_XY_NOMIP, 0, OverrideShader, alphatexture); + + float z1 = 0.0f; + float z2 = (y2 - y1) * MIN(3, tex->GetWidth() / tex->GetHeight()); + + if (!(mirror) != !(psp->Flags & PSPF_FLIP)) + { + fU2 = tex->GetSpriteUL(); + fV1 = tex->GetSpriteVT(); + fU1 = tex->GetSpriteUR(); + fV2 = tex->GetSpriteVB(); + } + else + { + fU1 = tex->GetSpriteUL(); + fV1 = tex->GetSpriteVT(); + fU2 = tex->GetSpriteUR(); + fV2 = tex->GetSpriteVB(); + } + + if (r_PlayerSprites3DMode == FAT_ITEM) + { + x1 = vw / 2 + (x1 - vw / 2) * gl_fatItemWidth; + x2 = vw / 2 + (x2 - vw / 2) * gl_fatItemWidth; + + for (float x = x1; x < x2; x += 1) + { + FQuadDrawer qd2; + qd2.Set(0, x, y1, -z1, fU1, fV1); + qd2.Set(1, x, y2, -z1, fU1, fV2); + qd2.Set(2, x, y1, -z2, fU2, fV1); + qd2.Set(3, x, y2, -z2, fU2, fV2); + qd2.Render(GL_TRIANGLE_STRIP); + } + } + else + { + float crossAt; + if (r_PlayerSprites3DMode == ITEM_ONLY) + { + crossAt = 0.0f; + sy = 0.0f; + } + else + { + sy = y2 - y1; + crossAt = sy * 0.25f; + } + + y1 -= crossAt; + y2 -= crossAt; + + FQuadDrawer qd2; + qd2.Set(0, vw / 2 - crossAt, y1, -z1, fU1, fV1); + qd2.Set(1, vw / 2 + sy / 2, y2, -z1, fU1, fV2); + qd2.Set(2, vw / 2 - crossAt, y1, -z2, fU2, fV1); + qd2.Set(3, vw / 2 + sy / 2, y2, -z2, fU2, fV2); + qd2.Render(GL_TRIANGLE_STRIP); + + FQuadDrawer qd3; + qd3.Set(0, vw / 2 + crossAt, y1, -z1, fU1, fV1); + qd3.Set(1, vw / 2 - sy / 2, y2, -z1, fU1, fV2); + qd3.Set(2, vw / 2 + crossAt, y1, -z2, fU2, fV1); + qd3.Set(3, vw / 2 - sy / 2, y2, -z2, fU2, fV2); + qd3.Render(GL_TRIANGLE_STRIP); + } + } + gl_RenderState.AlphaFunc(GL_GEQUAL, 0.5f); } @@ -218,8 +315,6 @@ void GLSceneDrawer::DrawPlayerSprites(sector_t * viewsector, bool hudModelStep) AActor * playermo=players[consoleplayer].camera; player_t * player=playermo->player; - s3d::Stereo3DMode::getCurrentMode().AdjustPlayerSprites(); - AActor *camera = r_viewpoint.camera; // this is the same as the software renderer @@ -230,6 +325,11 @@ void GLSceneDrawer::DrawPlayerSprites(sector_t * viewsector, bool hudModelStep) (r_deathcamera && camera->health <= 0)) return; + if (!hudModelStep) + { + s3d::Stereo3DMode::getCurrentMode().AdjustPlayerSprites(); + } + float bobx, boby, wx, wy; DPSprite *weapon; @@ -482,11 +582,17 @@ void GLSceneDrawer::DrawPlayerSprites(sector_t * viewsector, bool hudModelStep) DrawPSprite(player, psp, sx, sy, hudModelStep, OverrideShader, !!(RenderStyle.Flags & STYLEF_RedIsAlpha)); } } + gl_RenderState.SetObjectColor(0xffffffff); gl_RenderState.SetAddColor(0); gl_RenderState.SetDynLight(0, 0, 0); gl_RenderState.EnableBrightmap(false); glset.lightmode = oldlightmode; + + if (!hudModelStep) + { + s3d::Stereo3DMode::getCurrentMode().UnAdjustPlayerSprites(); + } } //========================================================================== diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.cpp index f53adf7..059f2ae 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.cpp @@ -123,25 +123,11 @@ namespace s3d /* virtual */ VSMatrix OculusQuestEyePose::GetProjection(FLOATTYPE fov, FLOATTYPE aspectRatio, FLOATTYPE fovRatio) const { - // Ignore those arguments and get the projection from the SDK - // VSMatrix vs1 = ShiftedEyePose::GetProjection(fov, aspectRatio, fovRatio); - return projectionMatrix; + return EyePose::GetProjection(fov, aspectRatio, fovRatio); } void OculusQuestEyePose::initialize() { - float zNear = 5.0; - float zFar = 65536.0; -/* HmdMatrix44_t projection = vrsystem->GetProjectionMatrix( - EVREye(eye), zNear, zFar); - HmdMatrix44_t proj_transpose; - for (int i = 0; i < 4; ++i) { - for (int j = 0; j < 4; ++j) { - proj_transpose.m[i][j] = projection.m[j][i]; - } - }*/ - projectionMatrix.loadIdentity(); - //projectionMatrix.multMatrix(&proj_transpose.m[0][0]); } void OculusQuestEyePose::dispose() @@ -212,9 +198,9 @@ namespace s3d new_projection.translate(-1.0, 1.0, 0); new_projection.scale(2.0 / SCREENWIDTH, -2.0 / SCREENHEIGHT, -1.0); - VSMatrix proj(activeEye->projectionMatrix); - proj.multMatrix(new_projection); - new_projection = proj; +// VSMatrix proj(activeEye->projectionMatrix); + // proj.multMatrix(new_projection); + // new_projection = proj; return new_projection; } diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.h b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.h index 3ac3af1..116876b 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.h +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.h @@ -57,10 +57,6 @@ public: bool submitFrame() const; protected: - VSMatrix projectionMatrix; - VSMatrix eyeToHeadTransform; - VSMatrix otherEyeToHeadTransform; - mutable uint32_t framebuffer; int eye; diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_user.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_user.cpp index 154de4d..add9e1e 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_user.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_user.cpp @@ -126,7 +126,7 @@ ColorSetList ColorSets; PainFlashList PainFlashes; // [Nash] FOV cvar setting -CUSTOM_CVAR(Float, fov, 90.f, CVAR_ARCHIVE | CVAR_USERINFO | CVAR_NOINITCALL) +CUSTOM_CVAR(Float, fov, 104.f, CVAR_ARCHIVE | CVAR_USERINFO | CVAR_NOINITCALL) { player_t *p = &players[consoleplayer]; p->SetFOV(fov); diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/r_utility.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/r_utility.cpp index 3d4ab1a..806a231 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/r_utility.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/r_utility.cpp @@ -104,6 +104,8 @@ CVAR (Bool, r_deathcamera, false, CVAR_ARCHIVE) CVAR (Int, r_clearbuffer, 0, 0) CVAR (Bool, r_drawvoxels, true, 0) CVAR (Bool, r_drawplayersprites, true, 0) // [RH] Draw player sprites? +CVAR(Int, r_PlayerSprites3DMode, 0, CVAR_ARCHIVE); +CVAR(Float, gl_fatItemWidth, 0.5f, CVAR_ARCHIVE); CUSTOM_CVAR(Float, r_quakeintensity, 1.0f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) { if (self < 0.f) self = 0.f; diff --git a/assets/commandline.txt b/assets/commandline.txt new file mode 100644 index 0000000..957dc7e --- /dev/null +++ b/assets/commandline.txt @@ -0,0 +1 @@ +qzdoom --supersampling 1.4 -iwad freedom2.wad \ No newline at end of file diff --git a/java/com/drbeef/qzdoom/GLES3JNIActivity.java b/java/com/drbeef/qzdoom/GLES3JNIActivity.java index 6ff5e35..7a269c2 100644 --- a/java/com/drbeef/qzdoom/GLES3JNIActivity.java +++ b/java/com/drbeef/qzdoom/GLES3JNIActivity.java @@ -161,17 +161,6 @@ import static android.system.Os.setenv; public void create() { - //This will copy the shareware version of quake2 if user doesn't have anything installed -/* copy_asset("/sdcard/QzDoom", "pak0.pak"); - copy_asset("/sdcard/QzDoom", "config.cfg"); - copy_asset("/sdcard/QzDoom", "autoexec.cfg"); - - //The custom weapon PAK file - copy_asset("/sdcard/QzDoom", "pak6.pak"); - copy_asset("/sdcard/QzDoom", "pak99.pak"); - - */ - copy_asset("/sdcard/QzDoom", "commandline.txt"); //Read these from a file and pass through