Add -gl_stereoview option for selecting stereo viewport modes.

This commit is contained in:
Dave Milici 2021-03-12 10:07:45 -08:00
parent f5d2dfa7ce
commit 509da82ee8
6 changed files with 19 additions and 10 deletions

View file

@ -102,6 +102,7 @@ struct CArg : prohibit_void_ptr<CArg>
bool DbgGlRGBA2Ok;
unsigned OglSyncWait;
bool OglStereo;
int OglStereoView;
#else
bool DbgSdlHWSurface;
bool DbgSdlASyncBlit;

View file

@ -205,6 +205,7 @@ extern game_window *Game_wind;
void game();
void init_game();
void init_stereo();
void init_cockpit();
extern void PALETTE_FLASH_ADD(int dr, int dg, int db);

View file

@ -193,10 +193,15 @@ namespace dsx {
void init_stereo()
{
// init stereo options
if (CGameArg.OglStereo) {
VR_stereo = true;
// VR_half_width = true;
VR_half_height = true;
if (CGameArg.OglStereo || CGameArg.OglStereoView) {
if (!VR_stereo && !VR_eye_offset)
VR_stereo = (CGameArg.OglStereoView) ? CGameArg.OglStereoView % 4 : true;
switch (VR_stereo) {
case 0: VR_half_width = VR_half_height = false; break;
case 1: VR_half_width = false; VR_half_height = true; break;
case 2: VR_half_width = true; VR_half_height = false; break;
case 3: VR_half_width = VR_half_height = true; break;
}
VR_eye_width = (F1_0 * 7) / 10; // Descent 1.5 defaults
VR_eye_offset = (VR_half_width) ? -6 : -12;
PlayerCfg.CockpitMode[1] = CM_FULL_SCREEN;

View file

@ -931,13 +931,9 @@ static window_event_result HandleSystemKey(int key)
break;
case KEY_SHIFTED + KEY_F8:
case KEY_SHIFTED + KEY_ALTED + KEY_F8:
if (CGameArg.OglStereo)
if (CGameArg.OglStereo || CGameArg.OglStereoView) {
++VR_stereo %= 4;
switch (VR_stereo) {
case 0: VR_half_width = VR_half_height = false; break;
case 1: VR_half_width = false; VR_half_height = true; break;
case 2: VR_half_width = true; VR_half_height = false; break;
case 3: VR_half_width = VR_half_height = true; break;
init_stereo();
}
break;

View file

@ -206,6 +206,10 @@ static void print_commandline_help()
VERB(" -gl_syncwait <n> Wait interval (ms) for sync mode 2 (default: " DXX_STRINGIZE(OGL_SYNC_WAIT_DEFAULT) ")\n") \
VERB(" -gl_darkedges Re-enable dark edges around filtered textures (as present in earlier versions of the engine)\n") \
VERB(" -gl_stereo Enable OpenGL stereo quad buffering, if available\n") \
VERB(" -gl_stereoview <n> Select OpenGL stereo viewport mode\n") \
VERB(" 1: above/below half-height format\n") \
VERB(" 2: side/by/side half-width format\n") \
VERB(" 3: side/by/side half-size format, normal aspect ratio\n") \
) \
DXX_if_defined_01(DXX_USE_UDP, ( \
VERB("\n Multiplayer:\n\n") \

View file

@ -295,6 +295,8 @@ static void ReadCmdArgs(Inilist &ini, Arglist &Args)
CGameArg.OglDarkEdges = true;
else if (!d_stricmp(p, "-gl_stereo"))
CGameArg.OglStereo = true;
else if (!d_stricmp(p, "-gl_stereoview"))
CGameArg.OglStereoView = arg_integer(pp, end);
#endif
// Multiplayer Options