Add super sampling configuration and 120hz refresh rate

This commit is contained in:
Petr Bartos 2022-09-29 17:38:20 +02:00
parent b11fc0fb29
commit 96b1071b50
6 changed files with 164 additions and 28 deletions

View file

@ -249,10 +249,12 @@ GRAPHICS OPTIONS MENU
#define ID_PLAYERSHADOW 109
#define ID_GAMMA 110
#define ID_HIGHQUALITYSKY 111
#define ID_SUPERSAMPLING 112
#define NUM_REFRESHRATE 4
#define NUM_REFRESHRATE 5
#define NUM_SHADOWS 3
#define NUM_RAILGUN 2
#define NUM_SUPERSAMPLING 5
typedef struct {
menuframework_s menu;
@ -276,6 +278,7 @@ typedef struct {
menulist_s playershadow;
menuslider_s gamma;
menuradiobutton_s highqualitysky;
menulist_s supersampling;
menubitmap_s apply;
menubitmap_s back;
@ -292,6 +295,7 @@ typedef struct
int playershadow;
float gamma;
int highqualitysky;
float supersampling;
} InitialVideoOptions_s;
static InitialVideoOptions_s s_ivo;
@ -313,6 +317,7 @@ static void GraphicsOptions_GetInitialVideo( void )
s_ivo.playershadow = s_graphicsoptions.playershadow.curvalue;
s_ivo.gamma = s_graphicsoptions.gamma.curvalue;
s_ivo.highqualitysky = s_graphicsoptions.highqualitysky.curvalue;
s_ivo.supersampling = s_graphicsoptions.supersampling.curvalue;
}
/*
@ -401,6 +406,9 @@ static void GraphicsOptions_Event( void* ptr, int event ) {
case 3:
refresh = 90;
break;
case 4:
refresh = 120;
break;
}
trap_Cvar_SetValue("vr_refreshrate", refresh);
}
@ -452,6 +460,29 @@ static void GraphicsOptions_Event( void* ptr, int event ) {
trap_Cvar_SetValue( "r_fastsky", !s_graphicsoptions.highqualitysky.curvalue );
break;
case ID_SUPERSAMPLING: {
float supersampling;
switch (s_graphicsoptions.supersampling.curvalue) {
case 0:
supersampling = 0.8;
break;
case 1:
supersampling = 0.9;
break;
case 2:
supersampling = 1.0;
break;
case 3:
supersampling = 1.1;
break;
case 4:
supersampling = 1.2;
break;
}
trap_Cvar_SetValue("vr_superSampling", supersampling);
}
break;
case ID_DRIVERINFO:
UI_DriverInfo_Menu();
break;
@ -542,6 +573,12 @@ static void GraphicsOptions_SetMenuItems( void )
case 90:
s_graphicsoptions.refreshrate.curvalue = 3;
break;
case 120:
s_graphicsoptions.refreshrate.curvalue = 4;
break;
default:
s_graphicsoptions.refreshrate.curvalue = 1;
break;
}
switch ( (int) trap_Cvar_VariableValue( "cg_shadows" ) )
@ -570,6 +607,21 @@ static void GraphicsOptions_SetMenuItems( void )
break;
}
float superSampling = trap_Cvar_VariableValue( "vr_superSampling" );
if (superSampling == 0.8f) {
s_graphicsoptions.supersampling.curvalue = 0;
} else if (superSampling == 0.9f) {
s_graphicsoptions.supersampling.curvalue = 1;
} else if (superSampling == 1.0f) {
s_graphicsoptions.supersampling.curvalue = 2;
} else if (superSampling == 1.1f) {
s_graphicsoptions.supersampling.curvalue = 3;
} else if (superSampling == 1.2f) {
s_graphicsoptions.supersampling.curvalue = 4;
} else {
s_graphicsoptions.supersampling.curvalue = 3;
}
s_graphicsoptions.lighting.curvalue = trap_Cvar_VariableValue( "r_vertexLight" ) != 0;
s_graphicsoptions.railgun.curvalue = trap_Cvar_VariableValue( "cg_oldRail" );
s_graphicsoptions.gamma.curvalue = trap_Cvar_VariableValue( "r_gamma" );
@ -602,9 +654,10 @@ void GraphicsOptions_MenuInit( void )
static const char *s_refreshrate[] =
{
"60",
"72 (Recommended)",
"72",
"80",
"90",
"120",
NULL
};
@ -623,6 +676,16 @@ void GraphicsOptions_MenuInit( void )
NULL
};
static const char *s_supersampling[] =
{
"0.8",
"0.9",
"1.0",
"1.1",
"1.2",
NULL
};
int y;
// zero set all our globals
@ -687,7 +750,7 @@ void GraphicsOptions_MenuInit( void )
s_graphicsoptions.network.style = UI_RIGHT;
s_graphicsoptions.network.color = color_red;
y = 254 - 5 * (BIGCHAR_HEIGHT + 2);
y = 254 - 6 * (BIGCHAR_HEIGHT + 2);
// references "vr_refreshrate"
s_graphicsoptions.refreshrate.generic.type = MTYPE_SPINCONTROL;
@ -701,6 +764,18 @@ void GraphicsOptions_MenuInit( void )
s_graphicsoptions.refreshrate.numitems = NUM_REFRESHRATE;
y += BIGCHAR_HEIGHT+2;
// references "vr_superSampling"
s_graphicsoptions.supersampling.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.supersampling.generic.name = "Supersampling:";
s_graphicsoptions.supersampling.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
s_graphicsoptions.supersampling.generic.x = 400;
s_graphicsoptions.supersampling.generic.y = y;
s_graphicsoptions.supersampling.itemnames = s_supersampling;
s_graphicsoptions.supersampling.generic.callback = GraphicsOptions_Event;
s_graphicsoptions.supersampling.generic.id = ID_SUPERSAMPLING;
s_graphicsoptions.supersampling.numitems = NUM_SUPERSAMPLING;
y += BIGCHAR_HEIGHT+2;
// references "r_gamma"
s_graphicsoptions.gamma.generic.type = MTYPE_SLIDER;
s_graphicsoptions.gamma.generic.name = "Brightness:";
@ -828,6 +903,7 @@ void GraphicsOptions_MenuInit( void )
Menu_AddItem( &s_graphicsoptions.menu, ( void * ) &s_graphicsoptions.network );
Menu_AddItem( &s_graphicsoptions.menu, ( void * ) &s_graphicsoptions.refreshrate );
Menu_AddItem( &s_graphicsoptions.menu, ( void * ) &s_graphicsoptions.supersampling );
Menu_AddItem( &s_graphicsoptions.menu, ( void * ) &s_graphicsoptions.railgun );
Menu_AddItem( &s_graphicsoptions.menu, ( void * ) &s_graphicsoptions.gamma );
Menu_AddItem( &s_graphicsoptions.menu, ( void * ) &s_graphicsoptions.lighting );

View file

@ -35,6 +35,7 @@ cvar_t *vr_weaponPitch = NULL;
cvar_t *vr_twoHandedWeapons = NULL;
cvar_t *vr_showItemInHand = NULL;
cvar_t *vr_refreshrate = NULL;
cvar_t *vr_superSampling = NULL;
cvar_t *vr_weaponScope = NULL;
cvar_t *vr_rollWhenHit = NULL;
cvar_t *vr_hudYOffset = NULL;
@ -154,6 +155,7 @@ void VR_InitCvars( void )
vr_twoHandedWeapons = Cvar_Get ("vr_twoHandedWeapons", "1", CVAR_ARCHIVE);
vr_showItemInHand = Cvar_Get ("vr_showItemInHand", "1", CVAR_ARCHIVE);
vr_refreshrate = Cvar_Get ("vr_refreshrate", "72", CVAR_ARCHIVE);
vr_superSampling = Cvar_Get ("vr_superSampling", "1.1", CVAR_ARCHIVE);
vr_weaponScope = Cvar_Get ("vr_weaponScope", "1", CVAR_ARCHIVE);
vr_rollWhenHit = Cvar_Get ("vr_rollWhenHit", "0", CVAR_ARCHIVE);
vr_hudYOffset = Cvar_Get ("vr_hudYOffset", "0", CVAR_ARCHIVE);

View file

@ -65,6 +65,7 @@ typedef struct {
qboolean menuLeftHanded;
float recenterYaw;
float superSampling;
} vr_clientinfo_t;
#endif //vr_clientinfo_h

View file

@ -19,11 +19,14 @@
#include <GLES3/gl32.h>
#endif
#define DEFAULT_SUPER_SAMPLING 1.1f
extern vr_clientinfo_t vr;
extern cvar_t *vr_heightAdjust;
XrView* projections;
GLboolean stageSupported = GL_FALSE;
qboolean fullscreenMode = qfalse;
void VR_UpdateStageBounds(ovrApp* pappState) {
XrExtent2Df stageBounds = {};
@ -77,7 +80,22 @@ void VR_GetResolution(engine_t* engine, int *pWidth, int *pHeight)
{
static int width = 0;
static int height = 0;
float superSampling = 0.0f;
float configuredSuperSampling = Cvar_VariableValue("vr_superSampling");
if (vr.superSampling == 0.0f || configuredSuperSampling != vr.superSampling) {
vr.superSampling = configuredSuperSampling;
if (vr.superSampling != 0.0f) {
Cbuf_AddText( "vid_restart\n" );
}
}
if (vr.superSampling == 0.0f) {
superSampling = DEFAULT_SUPER_SAMPLING;
} else {
superSampling = vr.superSampling;
}
if (engine)
{
// Enumerate the viewport configurations.
@ -151,8 +169,8 @@ void VR_GetResolution(engine_t* engine, int *pWidth, int *pHeight)
free(viewportConfigurationTypes);
*pWidth = width = engine->appState.ViewConfigurationView[0].recommendedImageRectWidth;
*pHeight = height = engine->appState.ViewConfigurationView[0].recommendedImageRectHeight;
*pWidth = width = engine->appState.ViewConfigurationView[0].recommendedImageRectWidth * superSampling;
*pHeight = height = engine->appState.ViewConfigurationView[0].recommendedImageRectHeight * superSampling;
}
else
{
@ -294,8 +312,8 @@ void VR_InitRenderer( engine_t* engine ) {
ovrRenderer_Create(
engine->appState.Session,
&engine->appState.Renderer,
engine->appState.ViewConfigurationView[0].recommendedImageRectWidth,
engine->appState.ViewConfigurationView[0].recommendedImageRectHeight);
eyeW,
eyeH);
}
void VR_DestroyRenderer( engine_t* engine )
@ -460,6 +478,11 @@ void VR_DrawFrame( engine_t* engine ) {
if (!VR_useScreenLayer() && !(cl.snap.ps.pm_flags & PMF_FOLLOW && vr.follow_mode == VRFM_FIRSTPERSON)) {
vr.menuYaw = vr.hmdorientation[YAW];
if (fullscreenMode) {
VR_ReInitRenderer();
fullscreenMode = qfalse;
}
for (int eye = 0; eye < ovrMaxNumEyes; eye++) {
ovrFramebuffer* frameBuffer = &engine->appState.Renderer.FrameBuffer;
@ -488,6 +511,8 @@ void VR_DrawFrame( engine_t* engine ) {
engine->appState.Layers[engine->appState.LayerCount++].Projection = projection_layer;
} else {
fullscreenMode = qtrue;
// Build the cylinder layer
int width = engine->appState.Renderer.FrameBuffer.ColorSwapChain.Width;
int height = engine->appState.Renderer.FrameBuffer.ColorSwapChain.Height;

View file

@ -184,7 +184,7 @@ itemDef {
type ITEM_TYPE_MULTI
text "Refresh Rate:"
cvar "vr_refreshrate"
cvarFloatList { "60" 60 "72 (Recommended)" 72 "80" 80 "90" 90 }
cvarFloatList { "60" 60 "72" 72 "80" 80 "90" 90 "120" 120 }
rect 0 50 306 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
@ -194,13 +194,29 @@ itemDef {
visible 0
}
itemDef {
name graphics
group grpSystem
type ITEM_TYPE_MULTI
text "Supersampling:"
cvar "vr_superSampling"
cvarFloatList { "0.8" 0.8 "0.9" 0.9 "1.0" 1.0 "1.1" 1.1 "1.2" 1.2 }
rect 0 70 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
textscale .25
forecolor 1 1 1 1
visible 0
}
itemDef {
name graphics
group grpSystem
type ITEM_TYPE_SLIDER
text "Brightness:"
cvarfloat "r_gamma" 0.05 0.6 1.0
rect 0 70 256 20
rect 0 90 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
@ -216,7 +232,7 @@ itemDef {
text "Railgun Effect:"
cvar "cg_oldRail"
cvarFloatList { "Q2 Style" 0 "Q3 Style" 1 }
rect 0 90 256 20
rect 0 110 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
@ -232,7 +248,7 @@ itemDef {
text "Lighting:"
cvar "r_vertexlight"
cvarFloatList { "Lightmap (High)" 0 "Vertex (Low)" 1 }
rect 0 110 256 20
rect 0 130 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
@ -249,7 +265,7 @@ itemDef {
text "Opponent Shadows:"
cvar "cg_shadows"
cvarFloatList { "None" 0 "Low" 1 "High" 3 }
rect 0 130 306 20
rect 0 150 306 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
@ -265,7 +281,7 @@ itemDef {
text "Player Shadow:"
cvar "cg_playerShadow"
cvarFloatList { "None" 0 "Low" 1 "High" 3 }
rect 0 150 306 20
rect 0 170 306 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
@ -281,7 +297,7 @@ itemDef {
text "Geometric Detail:"
cvar "r_lodbias"
cvarFloatList { "High" -1 "Medium" 1 "Low" 2 }
rect 0 170 256 20
rect 0 190 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
@ -298,7 +314,7 @@ itemDef {
text "Texture Detail:"
cvar "r_picmip"
cvarFloatList { "Low" 2 "Normal" 1 "High" 0 }
rect 0 190 256 20
rect 0 210 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
@ -314,7 +330,7 @@ itemDef {
type ITEM_TYPE_YESNO
text "Compress Textures:"
cvar "r_ext_compressed_textures"
rect 0 210 256 20
rect 0 230 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17
@ -330,7 +346,7 @@ itemDef {
type ITEM_TYPE_YESNO
text "Low Quality Sky:"
cvar "r_fastsky"
rect 0 230 256 20
rect 0 250 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 133
textaligny 17

View file

@ -87,7 +87,7 @@ itemDef {
type ITEM_TYPE_MULTI
text "Refresh Rate:"
cvar "vr_refreshrate"
cvarFloatList { "60" 60 "72 (Recommended)" 72 "80" 80 "90" 90 }
cvarFloatList { "60" 60 "72" 72 "80" 80 "90" 90 "120" 120 }
rect 99 42 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
@ -97,13 +97,29 @@ itemDef {
visible 0
}
itemDef {
name graphics
group grpSystem
type ITEM_TYPE_MULTI
text "Supersampling:"
cvar "vr_superSampling"
cvarFloatList { "0.8" 0.8 "0.9" 0.9 "1.0" 1.0 "1.1" 1.1 "1.2" 1.2 }
rect 99 67 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
textscale .333
forecolor 1 1 1 1
visible 0
}
itemDef {
name graphics
group grpSystem
type ITEM_TYPE_SLIDER
text "Brightness:"
cvarfloat "r_gamma" 0.05 0.6 1.0
rect 99 67 256 20
rect 99 92 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
@ -119,7 +135,7 @@ itemDef {
text "Railgun Effect:"
cvar "cg_oldRail"
cvarFloatList { "Q2 Style" 0 "Q3 Style" 1 }
rect 99 92 256 20
rect 99 117 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
@ -135,7 +151,7 @@ itemDef {
text "Lighting:"
cvar "r_vertexlight"
cvarFloatList { "Lightmap (High)" 0 "Vertex (Low)" 1 }
rect 99 117 256 20
rect 99 142 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
@ -152,7 +168,7 @@ itemDef {
text "Opponent Shadows:"
cvar "cg_shadows"
cvarFloatList { "None" 0 "Low" 1 "High" 3 }
rect 99 142 256 20
rect 99 167 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
@ -168,7 +184,7 @@ itemDef {
text "Player Shadow:"
cvar "cg_playerShadow"
cvarFloatList { "None" 0 "Low" 1 "High" 3 }
rect 99 167 256 20
rect 99 192 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
@ -184,7 +200,7 @@ itemDef {
text "Geometric Detail:"
cvar "r_lodbias"
cvarFloatList { "High" -1 "Medium" 1 "Low" 2 }
rect 99 192 256 20
rect 99 217 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
@ -201,7 +217,7 @@ itemDef {
text "Texture Detail:"
cvar "r_picmip"
cvarFloatList { "Low" 2 "Normal" 1 "High" 0 }
rect 99 217 256 20
rect 99 242 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
@ -217,7 +233,7 @@ itemDef {
type ITEM_TYPE_YESNO
text "Compress Textures:"
cvar "r_ext_compressed_textures"
rect 99 242 256 20
rect 99 267 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20
@ -233,7 +249,7 @@ itemDef {
type ITEM_TYPE_YESNO
text "Low Quality Sky:"
cvar "r_fastsky"
rect 99 267 256 20
rect 99 292 256 20
textalign ITEM_ALIGN_RIGHT
textalignx 128
textaligny 20