diff --git a/crates/benilla-app/assets/ui/OptionsFrame.xml b/crates/benilla-app/assets/ui/OptionsFrame.xml index c13aafa2..8b8a0773 100644 --- a/crates/benilla-app/assets/ui/OptionsFrame.xml +++ b/crates/benilla-app/assets/ui/OptionsFrame.xml @@ -620,7 +620,7 @@ }, Graphics = { "RowUiScale", "RowFarclip", "RowWorldDetail", - "RowWindowedMode", "RowVerticalSync", + "RowWindowedMode", "RowVerticalSync", "RowMultisample", }, Nameplates = { "RowEnemyPlates", "RowFriendlyPlates", @@ -2312,6 +2312,59 @@ "OPTION_TOOLTIP_VERTICAL_SYNC") + + + + + + + -- Multisampling: 1.12's own Video Options dropdown + -- (OptionsFrameMultiSampleDropDown, id 4), over + -- gxMultisample. Label and tooltip key are the + -- reference's GlobalStrings (MULTISAMPLE = + -- "Multisampling" / OPTION_TOOLTIP_MULTISAMPLING). + -- + -- The STOPS ARE THE DEVICE'S, not a fixed ladder: + -- built here from GetMultisampleFormats(), which + -- is what this GPU actually accepts (decision + -- 1631's enumeration, the same one that clamps a + -- typed gxMultisample). That is the reference's + -- design too -- its list comes from a D3D + -- CheckDeviceMultiSampleType sweep or a GL + -- wglGetPixelFormatAttribivARB sweep -- and it is + -- why the row cannot offer a mode that would kill + -- the client. An Apple GPU shows three stops + -- (1x/2x/4x); a machine with 8x shows four. + -- + -- NOT marked deferred. That flag stages a value + -- until Apply (uiScale's mid-drag rescale is what + -- it exists for); this row writes live like every + -- other. What it cannot do is take effect live: + -- gxMultisample is LATCHED (decision 1629 -- the + -- camera reads its sample count once, at spawn), + -- exactly as the reference's own row is, whose + -- callback echoes "set pending gxRestart". The + -- CVar moves and persists on the click; the + -- picture changes at the next launch. + OptionsRow_OnLoad(self, "gxMultisample", "Multisampling", + "OPTION_TOOLTIP_MULTISAMPLING") + local stops = {} + local fmt = { GetMultisampleFormats() } + -- Three varargs per entry, the walk OptionsFrame.lua + -- l.354 does (`for i=1, arg.n, 3`). The text is + -- MULTISAMPLING_FORMAT_STRING verbatim, inlined + -- rather than read off the global so the row does + -- not depend on GlobalStrings being loaded. + for i = 1, table.getn(fmt), 3 do + table.insert(stops, { + text = format("%d-bit color %d-bit depth %dx multisample", + fmt[i], fmt[i + 1], fmt[i + 2]), + value = tostring(fmt[i + 2]), + }) + end + OptionsDropdownRow_Setup(self, stops) + +