v0.4.0 M5: low-end performance preset row (D372)

Video.LowEndMode (default off) in F10 VIDEO: ON writes FpsCap 30 +
MSAA x1 (restart row); OFF restores the compiled defaults (60/2) rather
than per-user pre-preset values. The key records the last selected
preset; the effect flows through the two real knobs.
This commit is contained in:
James Dansereau committed 2026-09-27 16:30:32 -04:00
1 parent 40ef53e395
commit b95b54ecc7
4 files changed
+47

No files matched your search

+15
View File
@@ -307,6 +307,9 @@ static struct Row rows[] = {
{ .key="__Resolution", .label="Resolution", .kind=ROW_RES },
{ .key="Video.VSync", .label="VSync", .kind=ROW_TOGGLE, .step=1, .names=kOnOff },
{ .key="Video.FpsCap", .label="Frame rate cap", .kind=ROW_FPSCAP },
/* v0.4.0 M5 (D372): one-row low-end preset -- writes FpsCap 30 +
* MSAA x1 (restart). OFF restores the compiled defaults (60/2). */
{ .key="Video.LowEndMode", .label="Low-end mode (restart)", .kind=ROW_TOGGLE, .step=1, .names=kOnOff },
{ .key="Video.DisplayFPS", .label="Show FPS", .kind=ROW_TOGGLE, .step=1, .names=kOnOff },
{ .key="__ResetVideo", .label="Reset to defaults", .kind=ROW_ACTION },
/* D356: the D353 BOND FILE header + "Edit file" chooser row are retired --
@@ -753,6 +756,17 @@ static void rowSetCommit(struct Row *r, double v, int commit)
inputLayoutApply();
}
/* v0.4.0 M5 (D372): low-end perf preset -- one row, two writes:
* cap the frame rate at 30 (half the sim tick rate, D186) and drop
* MSAA to x1. OFF restores the compiled defaults (60 / 2) rather
* than remembering per-user pre-preset values (the defaults ARE
* the N64-original setting; simpler and predictable). */
if (strcmp(r->key, "Video.LowEndMode") == 0) {
int on = (int)lround(v) != 0;
rowSet(rowByKey("Video.FpsCap"), on ? 30 : 60);
rowSet(rowByKey("Video.MSAA"), on ? 1 : 2);
}
/* Linked aim/turn sensitivity (Input.SensLink, default on): moving either
* knob scales the other to hold the stock default ratio -- AimModeSens 38
* : MouseTurnSpeed 50 (the D194/D238 calibrated defaults). */
@@ -902,6 +916,7 @@ static const struct { const char *key; double def; } kResetDefaults[] = {
{ "Input.CrouchMode", 0 }, /* = 0 (hold) */
/* GRAPHICS (port/src/video.c initializers) */
{ "Video.MSAA", 2 }, /* = 2 */
{ "Video.LowEndMode", 0 }, /* = 0 (preset off) */
{ "Video.TextureFilter", 1 }, /* = 1 (bilinear) */
{ "Video.Anisotropy", 4 }, /* = 4 */
{ "Video.FovScale", 100 }, /* = 100 */
+2
View File
@@ -57,6 +57,7 @@ static int initDone = 0;
static int cfgVSync = 1; /* swap interval: 0 = off, 1 = on */
static int cfgFpsCap = 60; /* frame cap in fps; 0 = uncapped (vsync); menu only exposes 30/60 */
static int cfgMSAA = 2; /* 1/2/4/8 samples; 2x default is lighter on low-end GPUs */
static int cfgLowEndMode = 0; /* v0.4.0 M5 (D372): 1 = low-end preset active (FpsCap 30 + MSAA x1) */
static int cfgTexFilter = 1; /* 0 = nearest, 1 = bilinear (default), 2 = N64 3-point + trilinear */
static int cfgFixMipTex = 1; /* RC2: clip mip-contaminated texture uploads to base height */
static int cfgDetailBaseTile = 1; /* D236: TEXTURETYPE_DETAIL -> sample the base image, not the detail tile */
@@ -349,6 +350,7 @@ PD_CONSTRUCTOR static void videoConfigInit(void)
configRegisterInt("Video.VSync", &cfgVSync, 0, 1);
configRegisterInt("Video.FpsCap", &cfgFpsCap, 0, 1000);
configRegisterInt("Video.MSAA", &cfgMSAA, 1, 8);
configRegisterInt("Video.LowEndMode", &cfgLowEndMode, 0, 1); /* v0.4.0 M5 (D372) */
configRegisterInt("Video.TextureFilter", &cfgTexFilter, 0, 2);
configRegisterInt("Video.FixMipTextures", &cfgFixMipTex, 0, 1);
configRegisterInt("Video.DetailBaseTile", &cfgDetailBaseTile, 0, 1);