feat(weather editor): add filter options for objects window#1922
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughReplaces global/static objects-window filter state with instance members on EditorWindow, adds FilterColumn enum and kFilterColumnNames, implements ResetObjectsFilter and MatchesObjectFilter, centralizes per-object filtering across object lists, and updates the Objects window UI to include a unified search and filter-by combo. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
src/WeatherEditor/EditorWindow.cpp (2)
193-206:GetEditorID()called twice in theAllcase — cache the result.Lines 195 and 202 both call
w->GetEditorID(). IfGetEditorID()returns by value, this constructs twostd::stringcopies per widget per frame in theAllpath.♻️ Proposed fix
case FilterColumn::All: default: - if (ContainsStringIgnoreCase(w->GetEditorID(), filterBuffer)) + { + const auto& editorID = w->GetEditorID(); + if (ContainsStringIgnoreCase(editorID, filterBuffer)) return true; if (ContainsStringIgnoreCase(w->GetFormID(), filterBuffer)) return true; if (ContainsStringIgnoreCase(w->GetFilename(), filterBuffer)) return true; { - auto it = settings.markedRecords.find(w->GetEditorID()); + auto it = settings.markedRecords.find(editorID); if (it != settings.markedRecords.end() && ContainsStringIgnoreCase(it->second, filterBuffer)) return true; } return false; + }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 193 - 206, In the FilterColumn::All branch avoid calling w->GetEditorID() twice by capturing its result into a local string (e.g., editorId) and reuse that for the ContainsStringIgnoreCase check and for the settings.markedRecords lookup; ensure you compare editorId with filterBuffer and use the cached editorId when doing settings.markedRecords.find(editorId), leaving the other checks (GetFormID, GetFilename, and markedRecords value check) unchanged.
291-292:* 8.0fspacing multiplier must be manually kept in sync with the UI layout.The magic constant
8.0fencodes the exact number ofSameLine()spacings between the filter input and the right edge of the row. If any item is added or removed from this line, this formula silently produces incorrect widths, potentially reintroducing overflow.Consider a brief comment:
♻️ Suggested comment
-const float fixedW = style.ItemSpacing.x * 8.0f + comboW + helpW + 10.0f + iconW + - ImGui::CalcTextSize("Favorites").x + 10.0f + iconW + ImGui::CalcTextSize("Flagged").x; +// 8 SameLine spacings: filter→combo, combo→help, help→sp1, sp1→star, star→Fav, Fav→sp2, sp2→circle, circle→Flagged +const float fixedW = style.ItemSpacing.x * 8.0f + comboW + helpW + 10.0f + iconW + + ImGui::CalcTextSize("Favorites").x + 10.0f + iconW + ImGui::CalcTextSize("Flagged").x;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 291 - 292, The expression computing fixedW uses a hardcoded multiplier "8.0f" tied to the number of SameLine() gaps, which will break when the UI row layout changes; update the calculation in EditorWindow.cpp (the fixedW computation that uses style.ItemSpacing.x, comboW, helpW, iconW and ImGui::CalcTextSize("Favorites"/"Flagged")) to compute the spacing count programmatically (e.g., derive numGaps from the actual list of items on the row or a small const/enum that is updated with the layout) and replace the magic 8.0f with style.ItemSpacing.x * numGaps, and add a short inline comment explaining that numGaps must match the number of SameLine() items so future edits update both the layout and this constant.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Around line 287-288: The combo width calculation underestimates space for the
arrow button; update the computation of comboW in EditorWindow.cpp (the line
computing comboW using ImGui::CalcTextSize and style.FramePadding) to add
ImGui::GetFrameHeight() and only two times FramePadding.x (i.e. text width +
2*FramePadding.x + ImGui::GetFrameHeight()) so the preview text "Editor ID" is
not clipped; keep the rest of the code using comboW unchanged.
---
Nitpick comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Around line 193-206: In the FilterColumn::All branch avoid calling
w->GetEditorID() twice by capturing its result into a local string (e.g.,
editorId) and reuse that for the ContainsStringIgnoreCase check and for the
settings.markedRecords lookup; ensure you compare editorId with filterBuffer and
use the cached editorId when doing settings.markedRecords.find(editorId),
leaving the other checks (GetFormID, GetFilename, and markedRecords value check)
unchanged.
- Around line 291-292: The expression computing fixedW uses a hardcoded
multiplier "8.0f" tied to the number of SameLine() gaps, which will break when
the UI row layout changes; update the calculation in EditorWindow.cpp (the
fixedW computation that uses style.ItemSpacing.x, comboW, helpW, iconW and
ImGui::CalcTextSize("Favorites"/"Flagged")) to compute the spacing count
programmatically (e.g., derive numGaps from the actual list of items on the row
or a small const/enum that is updated with the layout) and replace the magic
8.0f with style.ItemSpacing.x * numGaps, and add a short inline comment
explaining that numGaps must match the number of SameLine() items so future
edits update both the layout and this constant.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/WeatherEditor/EditorWindow.cpp (1)
158-175:⚠️ Potential issue | 🟡 Minor
currentFilterColumnnot reset on category change may produce an unexpectedly empty list.If
currentFilterColumnisStatusand the user switches to a category with no marked records,matchesFilterreturnsfalsefor every widget, leaving the list blank with no visible explanation. A simple reset toFilterColumn::AllwheneverselectedCategorychanges would prevent the surprise:🛡️ Suggested guard
+ static std::string prevSelectedCategory; + if (prevSelectedCategory != selectedCategory) { + prevSelectedCategory = selectedCategory; + currentFilterColumn = FilterColumn::All; + }(Place this immediately after the
currentFilterColumnstatic declaration.)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 158 - 175, The filter column (currentFilterColumn) isn't reset when selectedCategory changes, which can leave the list empty if the new category has no items matching the previously chosen column (e.g., Status); add a guard right after the currentFilterColumn static declaration that detects a change in selectedCategory (store a previousSelectedCategory static string), and when it differs set currentFilterColumn = FilterColumn::All (optionally also clear filterBuffer/showOnlyFlagged/showOnlyFavorites) so matchesFilter uses the default "All" column after a category switch; reference symbols: selectedCategory, currentFilterColumn, matchesFilter.
🧹 Nitpick comments (2)
src/WeatherEditor/EditorWindow.cpp (2)
165-175: Consider hoistingFilterColumn,kFilterColumnNames, andcurrentFilterColumnout of the function body.All three are re-declared inside
ShowObjectsWindow()on every call.staticensures they initialize only once, and C++ permits astaticlocal of a localenum classtype — but this pattern is non-idiomatic and makes the type invisible to the rest of the class. Moving them to class scope (or to an anonymous namespace in the.cpp) eliminates the per-call re-definition noise and makes the state easier to spot during debugging.♻️ Sketch of class-scope placement
In
EditorWindow.h/EditorWindow.cppprivate section:+ enum class FilterColumn : int { All = 0, EditorID, FormID, File, Status }; + static constexpr const char* kFilterColumnNames[] = { "All", "Editor ID", "Form ID", "File", "Status" }; + FilterColumn currentFilterColumn = FilterColumn::All;Then in
ShowObjectsWindow()remove the three local declarations.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 165 - 175, Move the local enum and static variables out of ShowObjectsWindow to file- or class-scope: define FilterColumn (enum class FilterColumn), kFilterColumnNames (constexpr const char*[]), and currentFilterColumn (FilterColumn) either as private members in the EditorWindow class or in an anonymous namespace at top of the .cpp, then remove their local declarations from ShowObjectsWindow so the function uses the hoisted symbols; ensure any references (FilterColumn::All, currentFilterColumn, kFilterColumnNames) are updated to the new scope.
293-297:numGapsis a fragile magic constant with no compile-time guard.The accompanying comment correctly warns that
numGapsmust be kept in sync with the number ofSameLine()calls — but that synchronization is entirely manual. A mismatch causes the input field to either overflow the row or leave a visible gap, with no compile-time or runtime diagnostic.A self-verifying alternative (counts items at compile time rather than hard-coding the gap count):
♻️ Suggested approach
- constexpr int numGaps = 8; - const float fixedW = style.ItemSpacing.x * numGaps + comboW + helpW + 10.0f + iconW + - ImGui::CalcTextSize("Favorites").x + 10.0f + iconW + ImGui::CalcTextSize("Flagged").x; + // Each SameLine() item after the search bar contributes one ItemSpacing gap. + // Items: [combo] [help] [spacer10] [fav icon] ["Favorites"] [spacer10] [flag icon] ["Flagged"] + const float fixedItemsW = comboW + helpW + 10.0f + iconW + + ImGui::CalcTextSize("Favorites").x + 10.0f + iconW + + ImGui::CalcTextSize("Flagged").x; + constexpr int numSameLines = 8; // one per SameLine() call that follows the search bar + const float fixedW = style.ItemSpacing.x * numSameLines + fixedItemsW;The split makes it clearer what "gaps" means vs. "item widths", reducing the chance of off-by-one when a new item is inserted.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 293 - 297, The hard-coded constexpr int numGaps is brittle and must be derived instead of manually kept in sync with the number of ImGui::SameLine() items; update the code around numGaps and fixedW to compute the gap count from the actual set of UI items (e.g. define a constexpr list/array of the row elements or a constexpr numItems and compute constexpr int numGaps = numItems - 1) and use that computed numGaps when building fixedW (still referencing comboW, helpW, iconW and the text widths), so adding/removing ImGui::SameLine() calls no longer requires a manual numGaps change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Around line 158-175: The filter column (currentFilterColumn) isn't reset when
selectedCategory changes, which can leave the list empty if the new category has
no items matching the previously chosen column (e.g., Status); add a guard right
after the currentFilterColumn static declaration that detects a change in
selectedCategory (store a previousSelectedCategory static string), and when it
differs set currentFilterColumn = FilterColumn::All (optionally also clear
filterBuffer/showOnlyFlagged/showOnlyFavorites) so matchesFilter uses the
default "All" column after a category switch; reference symbols:
selectedCategory, currentFilterColumn, matchesFilter.
---
Nitpick comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Around line 165-175: Move the local enum and static variables out of
ShowObjectsWindow to file- or class-scope: define FilterColumn (enum class
FilterColumn), kFilterColumnNames (constexpr const char*[]), and
currentFilterColumn (FilterColumn) either as private members in the EditorWindow
class or in an anonymous namespace at top of the .cpp, then remove their local
declarations from ShowObjectsWindow so the function uses the hoisted symbols;
ensure any references (FilterColumn::All, currentFilterColumn,
kFilterColumnNames) are updated to the new scope.
- Around line 293-297: The hard-coded constexpr int numGaps is brittle and must
be derived instead of manually kept in sync with the number of ImGui::SameLine()
items; update the code around numGaps and fixedW to compute the gap count from
the actual set of UI items (e.g. define a constexpr list/array of the row
elements or a constexpr numItems and compute constexpr int numGaps = numItems -
1) and use that computed numGaps when building fixedW (still referencing comboW,
helpW, iconW and the text widths), so adding/removing ImGui::SameLine() calls no
longer requires a manual numGaps change.
|
✅ A pre-release build is available for this PR: |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/WeatherEditor/EditorWindow.cpp (1)
300-312: Width arithmetic looks correct; consider a comment mapping each addend to its UI element.I verified the 8
SameLine()calls (combo, help, spacer, fav-icon, "Favorites", spacer, flag-icon, "Flagged") matchnumFixedItems = 8and each corresponding width addend infixedW. The formula is correct.A small maintainability suggestion: the
fixedWexpression packs many terms into one line. Naming intermediate sums (or adding inline comments per addend) would make it easier for the next person to verify they're still in sync when items are added/removed—especially given the "Update numFixedItems when adding or removing items" comment.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 300 - 312, The fixed-width calculation in EditorWindow.cpp uses a long expression assigned to fixedW (and related vars comboW, helpW, iconW) that is correct but hard to maintain; refactor by introducing clearly named intermediate variables (e.g., gapWidth = style.ItemSpacing.x * numGaps, previewWidth = comboW, labelFavoritesWidth = ImGui::CalcTextSize("Favorites").x, labelFlaggedWidth = ImGui::CalcTextSize("Flagged").x, spacerWidth = 10.0f) or add inline comments beside each addend so the mapping between numFixedItems/SameLine() items and the terms in fixedW is explicit, then use those intermediates when calling ImGui::SetNextItemWidth to compute the same value. Ensure you update/keep numFixedItems in sync with the named parts (comboW, helpW, iconW, labelFavoritesWidth, labelFlaggedWidth, gapWidth, spacerWidth) so future edits are clearer.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Around line 316-322: The Combo and HelpMarker integration is correct—ensure
the combo width calculation using comboW (which uses FramePadding.x * 2.0f +
GetFrameHeight()) remains and keep the temporary int round-trip around
currentFilterColumn (cast to int for ImGui::Combo then back to FilterColumn) as
shown in the block that updates currentFilterColumn; no functional changes
required other than preserving this pattern in EditorWindow:: (the
combo/HelpMarker snippet) to maintain safe bounds and consistent UI behavior.
---
Nitpick comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Around line 300-312: The fixed-width calculation in EditorWindow.cpp uses a
long expression assigned to fixedW (and related vars comboW, helpW, iconW) that
is correct but hard to maintain; refactor by introducing clearly named
intermediate variables (e.g., gapWidth = style.ItemSpacing.x * numGaps,
previewWidth = comboW, labelFavoritesWidth = ImGui::CalcTextSize("Favorites").x,
labelFlaggedWidth = ImGui::CalcTextSize("Flagged").x, spacerWidth = 10.0f) or
add inline comments beside each addend so the mapping between
numFixedItems/SameLine() items and the terms in fixedW is explicit, then use
those intermediates when calling ImGui::SetNextItemWidth to compute the same
value. Ensure you update/keep numFixedItems in sync with the named parts
(comboW, helpW, iconW, labelFavoritesWidth, labelFlaggedWidth, gapWidth,
spacerWidth) so future edits are clearer.
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
src/WeatherEditor/EditorWindow.cpp (2)
307-311:numFixedItemsandnumGapsare always equal — consolidate into one constant.Two separate
constexprvalues that must be kept in sync add maintenance burden without benefit. A singleconstexpr int numItemsAfterSearchBar = 8(with the existing comment enumerating what those 8 items are) is clearer.♻️ Proposed refactor
-// Each fixed-width item on the row is preceded by one SameLine(). -// Update numFixedItems when adding or removing items from the row. -constexpr int numFixedItems = 8; // combo, help, spacer, fav icon, "Favorites", spacer, flag icon, "Flagged" -constexpr int numGaps = numFixedItems; -const float fixedW = style.ItemSpacing.x * numGaps + comboW + helpW + 10.0f + iconW + +// Items following the search bar (each preceded by one SameLine() gap). +// Update this count and fixedW when adding or removing items from the row. +constexpr int numItemsAfterSearchBar = 8; // combo, help, spacer, fav icon, "Favorites", spacer, flag icon, "Flagged" +const float fixedW = style.ItemSpacing.x * numItemsAfterSearchBar + comboW + helpW + 10.0f + iconW +🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 307 - 311, Replace the two synchronized constants numFixedItems and numGaps with a single constexpr (suggested name numItemsAfterSearchBar) and update fixedW to use that single constant; change references to numFixedItems and numGaps in the block that computes fixedW (and the comment above it) so the meaning is preserved (e.g., keep the comment enumerating the 8 items) and ensure fixedW still uses the single count for calculating style.ItemSpacing.x * count.
153-162: Wrap file-scope declarations in an anonymous namespace.
FilterColumnandkFilterColumnNamesare visible as TU-global symbols. Since they're only used insideShowObjectsWindow, wrapping them in an anonymous namespace or moving them into the function avoids any future name conflicts.♻️ Proposed refactor
+namespace { + // Filter column options for the Objects window search bar. enum class FilterColumn : int { All = 0, EditorID, FormID, File, Status }; constexpr const char* kFilterColumnNames[] = { "All", "Editor ID", "Form ID", "File", "Status" }; + +} // namespace🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 153 - 162, FilterColumn and kFilterColumnNames are currently TU-global; wrap these file-scope declarations in an anonymous namespace (or move them into ShowObjectsWindow) to limit linkage and prevent name collisions. Locate the enum class FilterColumn and the constexpr array kFilterColumnNames and enclose them in "namespace { ... }" (or relocate both inside the ShowObjectsWindow function body) so they become internal linkage; ensure any code in ShowObjectsWindow referencing FilterColumn and kFilterColumnNames still compiles after the move.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Line 322: Update the help text passed to HelpMarker in EditorWindow.cpp so it
documents the Status-column special case: when the Status column is selected and
the search box is non-empty, items without a status marker are hidden. Locate
the HelpMarker(...) call (the string that currently reads "Filter the object
list by the selected column.\nAll: searches Editor ID, Form ID, File, and
Status.\nCtrl+F: Focus search\nEnter: Open selected") and append a short
sentence describing the Status behavior so users know that selecting Status +
non-empty search will hide items with no status marker.
- Around line 191-192: Add a defensive null check at the start of the
matchesFilter lambda used to test Widget* entries: if the passed Widget* (w) is
null, immediately return false so the function never dereferences a null
pointer; update the lambda in EditorWindow.cpp (matchesFilter) to guard against
a null w before accessing filterBuffer or widget properties, leaving the rest of
the filter logic intact so sortedWidgets processing remains unchanged.
---
Nitpick comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Around line 307-311: Replace the two synchronized constants numFixedItems and
numGaps with a single constexpr (suggested name numItemsAfterSearchBar) and
update fixedW to use that single constant; change references to numFixedItems
and numGaps in the block that computes fixedW (and the comment above it) so the
meaning is preserved (e.g., keep the comment enumerating the 8 items) and ensure
fixedW still uses the single count for calculating style.ItemSpacing.x * count.
- Around line 153-162: FilterColumn and kFilterColumnNames are currently
TU-global; wrap these file-scope declarations in an anonymous namespace (or move
them into ShowObjectsWindow) to limit linkage and prevent name collisions.
Locate the enum class FilterColumn and the constexpr array kFilterColumnNames
and enclose them in "namespace { ... }" (or relocate both inside the
ShowObjectsWindow function body) so they become internal linkage; ensure any
code in ShowObjectsWindow referencing FilterColumn and kFilterColumnNames still
compiles after the move.
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
…rubbySkrubInAShrub/skyrim-community-shaders-main into improve-objects-window-filter
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
There was a problem hiding this comment.
🧹 Nitpick comments (4)
src/WeatherEditor/EditorWindow.h (1)
231-246: Optional: add aCount_sentinel to guardkFilterColumnNamessync
kFilterColumnNamesin the.cppanonymous namespace must stay in sync withFilterColumnmanually. A sentinel enum value enables a cheap compile-time check inside anyEditorWindowmember function.♻️ Proposed change
enum class FilterColumn : int { All = 0, EditorID, FormID, File, - Status + Status, + Count_ // sentinel — do not use as a filter value };Then, inside
EditorWindow::MatchesObjectFilterorEditorWindow::ResetObjectsFilterin the.cpp:static_assert(static_cast<int>(FilterColumn::Count_) == IM_ARRAYSIZE(kFilterColumnNames), "kFilterColumnNames must have one entry per FilterColumn value");🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.h` around lines 231 - 246, Add a sentinel value to the FilterColumn enum (e.g., Count_) after Status so the enum size can be checked against kFilterColumnNames; then add a compile-time check (static_assert) in an EditorWindow member function such as MatchesObjectFilter or ResetObjectsFilter that compares static_cast<int>(FilterColumn::Count_) to IM_ARRAYSIZE(kFilterColumnNames) with a clear message like "kFilterColumnNames must have one entry per FilterColumn value" to ensure the arrays stay in sync.src/WeatherEditor/EditorWindow.cpp (3)
583-595: Duplicated three-condition filter blockLines 588–595 are an exact copy of lines 678–685. Extracting a lambda keeps the filter logic in one place and ensures both loops apply the same checks.
♻️ Proposed extraction (before the first loop, after sortedWidgets is built)
auto shouldShowWidget = [&](Widget* w) -> bool { if (!MatchesObjectFilter(w)) return false; if (m_showOnlyFavorites && !IsFavorite(w->GetEditorID())) return false; if (m_showOnlyFlagged && settings.markedRecords.find(w->GetEditorID()) == settings.markedRecords.end()) return false; return true; };Then replace both three-condition blocks with
if (!shouldShowWidget(sortedWidgets[i])) continue;.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 583 - 595, Extract the repeated three-condition filter into a single lambda (e.g., shouldShowWidget) declared after sortedWidgets is built and before both loops; the lambda should accept Widget* w and return false if !MatchesObjectFilter(w), if m_showOnlyFavorites && !IsFavorite(w->GetEditorID()), or if m_showOnlyFlagged && settings.markedRecords.find(w->GetEditorID()) == settings.markedRecords.end(), otherwise return true; then replace the duplicated blocks in the loops that iterate over sortedWidgets and check LightingTemplateWidget* ltWidget (the code around LightingTemplateWidget* ltWidget = dynamic_cast<LightingTemplateWidget*>(sortedWidgets[i]) and the subsequent continues) with a single call if (!shouldShowWidget(sortedWidgets[i])) continue; so both loops use the same centralized filter logic.
296-300:numItemsAfterSearchBar = 8is a fragile coupling pointIf any item is added to or removed from the same-line row without updating this constant and the
fixedWformula, the search bar width will silently break. Consider computingfixedWbottom-up from the actual item widths rather than relying on a separate item count.♻️ Proposed simplification
- constexpr int numItemsAfterSearchBar = 8; // combo, help, spacer, fav icon, "Favorites", spacer, flag icon, "Flagged" - const float fixedW = style.ItemSpacing.x * numItemsAfterSearchBar + comboW + helpW + 10.0f + iconW + - ImGui::CalcTextSize("Favorites").x + 10.0f + iconW + ImGui::CalcTextSize("Flagged").x; + // One ItemSpacing per SameLine that will follow the search bar. + const float fixedW = + style.ItemSpacing.x + comboW + // combo + style.ItemSpacing.x + helpW + // help marker + style.ItemSpacing.x + 10.0f + // spacer dummy + style.ItemSpacing.x + iconW + // fav icon + style.ItemSpacing.x + ImGui::CalcTextSize("Favorites").x +// "Favorites" + style.ItemSpacing.x + 10.0f + // spacer dummy + style.ItemSpacing.x + iconW + // flag icon + style.ItemSpacing.x + ImGui::CalcTextSize("Flagged").x; // "Flagged"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 296 - 300, The hardcoded constant numItemsAfterSearchBar and the computed fixedW are fragile; change the logic in the same scope where fixedW is computed (around the fixedW/numItemsAfterSearchBar usage and the ImGui::SetNextItemWidth call) to calculate fixedW by summing the actual widths of each widget that follows the search bar (e.g., comboW, helpW, iconW, plus ImGui::CalcTextSize("Favorites").x and ImGui::CalcTextSize("Flagged").x, spacers and paddings) instead of multiplying style.ItemSpacing.x by a magic count, then use that computed fixedW when calling ImGui::SetNextItemWidth so adding/removing widgets only requires updating their own width expressions.
342-349: Duplicate category→widget-collection mappings have diverging fallbacksThis chain (for "recent" click-to-open) and the display chain at lines 418–425 encode the same mapping with different defaults — map 1 falls back to
weatherWidgets, map 2 falls back tolightingTemplateWidgets. Adding a new category requires updating both, and forgetting one silently uses the wrong collection.♻️ Proposed helper (add as private method or lambda near line 342)
// Returns a const reference to the widget collection for the given category. // emptyWidgets is a local empty vector for categories with no standalone widgets. auto getWidgetsForCategory = [&](const std::string& category) -> const std::vector<std::unique_ptr<Widget>>& { if (category == "Weather") return weatherWidgets; if (category == "Lighting Template") return lightingTemplateWidgets; if (category == "ImageSpace") return imageSpaceWidgets; if (category == "Volumetric Lighting") return volumetricLightingWidgets; if (category == "Shader Particle Geometry") return precipitationWidgets; if (category == "Lens Flare") return lensFlareWidgets; if (category == "Visual Effect") return referenceEffectWidgets; return emptyWidgets; // Cell Lighting, Interior Only, unknown };Then both call sites become
getWidgetsForCategory(m_selectedCategory), eliminating the divergence.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/WeatherEditor/EditorWindow.cpp` around lines 342 - 349, Replace the duplicated category→widget mapping chains with a single helper (private method or lambda) that accepts a category string and returns a const reference to the appropriate widget collection (use weatherWidgets, lightingTemplateWidgets, imageSpaceWidgets, volumetricLightingWidgets, precipitationWidgets, lensFlareWidgets, referenceEffectWidgets and an emptyWidgets local fallback for unknown/no-standalone categories); then change both call sites that now switch on m_selectedCategory (the recent click-to-open mapping and the display mapping) to call getWidgetsForCategory(m_selectedCategory) so they use the same canonical mapping and fallback.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/WeatherEditor/EditorWindow.cpp`:
- Around line 583-595: Extract the repeated three-condition filter into a single
lambda (e.g., shouldShowWidget) declared after sortedWidgets is built and before
both loops; the lambda should accept Widget* w and return false if
!MatchesObjectFilter(w), if m_showOnlyFavorites &&
!IsFavorite(w->GetEditorID()), or if m_showOnlyFlagged &&
settings.markedRecords.find(w->GetEditorID()) == settings.markedRecords.end(),
otherwise return true; then replace the duplicated blocks in the loops that
iterate over sortedWidgets and check LightingTemplateWidget* ltWidget (the code
around LightingTemplateWidget* ltWidget =
dynamic_cast<LightingTemplateWidget*>(sortedWidgets[i]) and the subsequent
continues) with a single call if (!shouldShowWidget(sortedWidgets[i])) continue;
so both loops use the same centralized filter logic.
- Around line 296-300: The hardcoded constant numItemsAfterSearchBar and the
computed fixedW are fragile; change the logic in the same scope where fixedW is
computed (around the fixedW/numItemsAfterSearchBar usage and the
ImGui::SetNextItemWidth call) to calculate fixedW by summing the actual widths
of each widget that follows the search bar (e.g., comboW, helpW, iconW, plus
ImGui::CalcTextSize("Favorites").x and ImGui::CalcTextSize("Flagged").x, spacers
and paddings) instead of multiplying style.ItemSpacing.x by a magic count, then
use that computed fixedW when calling ImGui::SetNextItemWidth so adding/removing
widgets only requires updating their own width expressions.
- Around line 342-349: Replace the duplicated category→widget mapping chains
with a single helper (private method or lambda) that accepts a category string
and returns a const reference to the appropriate widget collection (use
weatherWidgets, lightingTemplateWidgets, imageSpaceWidgets,
volumetricLightingWidgets, precipitationWidgets, lensFlareWidgets,
referenceEffectWidgets and an emptyWidgets local fallback for
unknown/no-standalone categories); then change both call sites that now switch
on m_selectedCategory (the recent click-to-open mapping and the display mapping)
to call getWidgetsForCategory(m_selectedCategory) so they use the same canonical
mapping and fallback.
In `@src/WeatherEditor/EditorWindow.h`:
- Around line 231-246: Add a sentinel value to the FilterColumn enum (e.g.,
Count_) after Status so the enum size can be checked against kFilterColumnNames;
then add a compile-time check (static_assert) in an EditorWindow member function
such as MatchesObjectFilter or ResetObjectsFilter that compares
static_cast<int>(FilterColumn::Count_) to IM_ARRAYSIZE(kFilterColumnNames) with
a clear message like "kFilterColumnNames must have one entry per FilterColumn
value" to ensure the arrays stay in sync.
Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details.
* fix(weather overrides): ensure json format for features (community-shaders#1748) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * perf(terrain blending): tweak defaults (community-shaders#1771) * fix(lighting): vanilla envcolor mult the correct value (community-shaders#1775) * fix(water): remove final colour saturate (community-shaders#1778) * fix(unified-water): LOD water cache mismatch (community-shaders#1779) * fix(weather editor): override desync with weather transitions (community-shaders#1782) * fix(weather editor): no-override weather file deletion (community-shaders#1777) * fix(weather editor): apply weather settings post-load (community-shaders#1776) * fix(weather editor): handling of weathers without overrides (community-shaders#1773) * feat(UI): feature headings (community-shaders#1786) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(VR): add wand pointing (community-shaders#1790) * chore(UI): theme consistency (community-shaders#1787) * fix(upscaling): warn about max nvidia resolution (community-shaders#1795) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore(linear lighting): UI settings changes (community-shaders#1785) Co-authored-by: Jiaye <l936249247@hotmail.com> * fix(grass-lighting) better basic grass brightness default (community-shaders#1780) * chore(UI): remove settings and about tabs (community-shaders#1794) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(terrain shadows): fix compiler warnings (community-shaders#1798) * fix: fix flickering particles (community-shaders#1791) * fix(terrain blending): disable vr support (community-shaders#1799) * refactor(upscaling): standardize behavior and tune settings (community-shaders#1783) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(UI): add auto-hide featurelist option (community-shaders#1793) * fix: match grass brightness of vanilla (community-shaders#1801) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor(perfoverlay): remove color from "Other" and "Total" (community-shaders#1806) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(unified water): fix for mesh water jitter (community-shaders#1809) * fix: clear shader cache on plugin version change (community-shaders#1739) * feat(filewatcher): add hlsli tracking (community-shaders#1796) * feat(linear lighting): add ambient multiplier (community-shaders#1805) * fix(unified-water): underwater fog flicker (community-shaders#1807) * fix(UI): conflicting esc key on welcome hotkey dialogue (community-shaders#1811) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore(UI): add subtext font to tooltips (community-shaders#1810) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * build: bump streamline to 2.10.3 (community-shaders#1813) * build: resolve shader warnings (community-shaders#1818) * feat(ui): add combo hotkey support (community-shaders#1808) * feat: add feature constraints (community-shaders#1804) * build: update version to 1.4.8 (community-shaders#1802) * fix(VR): apply per eye upscaling (community-shaders#1819) - Split upscaling across each eye for correctness and to avoid DLSS failing over 8k x 8k limit - Changes HMD mask color to black to hide artifacts with fast movement * build: bump common lib to 4.2.0 (community-shaders#1821) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> * fix(grass collision): catch trashed actor pointers (community-shaders#1765) * fix(weather editor): desynced override transitions (community-shaders#1820) * fix(upscaling): fix preset and allocation handling (community-shaders#1824) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * build: remove linear lighting from core whilst in development (community-shaders#1826) * chore: bump version to 1.4.9 (community-shaders#1827) * fix: add back LLF core file and remove LL core file (community-shaders#1828) * fix: dont save shader debug toggles (community-shaders#1831) * fix: remove IBL from core, unfinished (community-shaders#1830) * chore: update version to 1.4.10 (community-shaders#1832) * chore(dynamic cubemaps): lessen normalisation darkening (community-shaders#1833) * chore(llf): remove LightsVisualisationMode settings loading (community-shaders#1834) * revert: "fix: dont save shader debug toggles (community-shaders#1831)" This reverts commit f55f195. * revert: "chore(llf): remove LightsVisualisationMode settings loading (community-shaders#1834)" This reverts commit b3db5a7. * fix: default enabledClasses true * build: bump version * feat(upscaling): custom DLSS preset (community-shaders#1837) * fix(weather editor): sync UI for full transition (community-shaders#1822) * fix(linearlighting): return correct buffer when ll feature off (community-shaders#1838) * fix(PBR): skip IrradianceToLinear on specular in vanilla (community-shaders#1839) * feat(weather editor): adjust slider ranges (community-shaders#1847) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(weather editor): replace volumetric Lighting RGB sliders with color picker (community-shaders#1846) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * fix(grass collision): collision radius math (community-shaders#1849) * chore: move new feature information into docs (community-shaders#1848) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> * fix(ui): background blur with upscaling (community-shaders#1815) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor: move some features to core (community-shaders#1852) * fix: fix blown out water specular (community-shaders#1853) * feat(weather editor): toggle hotkey (community-shaders#1856) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(color picker): add an original color reference to all color pickers (community-shaders#1857) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * perf(emat): alternate tweaks (community-shaders#1850) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather-editor): merge weather picker and editor (community-shaders#1845) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore(llf): remove LLF settings loading (community-shaders#1859) * feat: exponential height fog (community-shaders#1708) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather editor): block editor access in loading screens (community-shaders#1871) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(weather editor): improve weather picker UI and functionality (community-shaders#1863) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather editor): repurpose unsaved changes tracking (community-shaders#1860) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix: sync grass lighting defaults to match ENB (community-shaders#1844) * fix: stop shader compilation on game exit (community-shaders#1867) closes community-shaders#1130 * fix(weather editor): prevent inputs when editor is open (community-shaders#1872) * fix(weather editor): add ctd guards (community-shaders#1864) * feat(weather editor): remove WorldSpace widget and associated code (community-shaders#1878) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(vr): add OpenComposite menu support (community-shaders#1880) * revert: "feat(vr): add OpenComposite VR menu" (community-shaders#1881) * revert: "fix: stop shader compilation on game exit" (community-shaders#1882) * feat(vr): add OpenComposite menu support (community-shaders#1883) * feat(weather editor): add time controls (community-shaders#1877) * feat: add shadowmap rasterizer override (community-shaders#1690) * fix(weather editor): clear feature overrides with revert (community-shaders#1884) * feat(UI): Interior Only (community-shaders#1854) * fix(VR): fix Shadowmap Cascade Rasterizer (community-shaders#1888) * fix(unified water): distance calculation for raindrops & LOD fade (community-shaders#1890) * refactor: clarify core feature version mismatch text (community-shaders#1886) * fix: stop shader compilation on game exit (community-shaders#1885) * build: exclude hlsl tests from packaging (community-shaders#1894) * chore: disable feature constraints in dev mode (community-shaders#1893) * fix(vr): improve stereo UV handling (community-shaders#1899) * fix(weather editor): move esc key to native input system (community-shaders#1897) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * fix: move ResolveMonoUVForEye outside VR guard (community-shaders#1906) * fix(grass collision): validate actor (community-shaders#1905) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> * fix(terrain shadows): height map regression (community-shaders#1911) * fix: util vertical fov math (community-shaders#1904) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> * test: add float4 overload test (community-shaders#1902) * refactor: move all features to globals::game::calendar (community-shaders#1909) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix(UI): resolution based font (community-shaders#1907) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather editor): make objects window be independently scrollable (community-shaders#1908) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(UI): consolidate searchbar to util and add to weather editor (community-shaders#1898) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather editor): add filled star for favourites. (community-shaders#1913) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(weather editor): add delete json button to objects window (community-shaders#1914) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(VR): resolution-based font (community-shaders#1923) * refactor: use depthbuffer helper (community-shaders#1925) * refactor: move TurboColormap into Color.hlsli (community-shaders#1924) * fix(weather editor): expand clickable area of feature override (community-shaders#1921) * feat(weather editor): enable snapping to viewport (community-shaders#1917) * feat(weather editor): highlight enabled cloud layers (community-shaders#1916) * fix(VR): SSGI discrepancies (community-shaders#1926) * feat: volumetric shadows (community-shaders#1874) * ci: enhance feature version audit (community-shaders#1927) * feat(weather editor): add filter options for objects window (community-shaders#1922) * feat(weather editor): sticky headers and scrollable content (community-shaders#1930) * fix(UI): ImGui scaling for borderless mode (community-shaders#1929) * ci: don't fail on feature audits (community-shaders#1934) * fix(pbr): use scrap heap allocation (community-shaders#1928) * chore(UI): add subsurface scattering to Interior Only (community-shaders#1932) * fix(weather editor): align highlights, fix tooltip (community-shaders#1918) * fix(ssgi): guard VR only compilation (community-shaders#1938) * build: update template to avoid extra directory (community-shaders#1812) * style: fix hlsl formatting (community-shaders#1939) * fix(UI): improve theme management UI flow (community-shaders#1933) closes community-shaders#1919 * build(deps): update pre-commit hooks (community-shaders#1768) * feat(UI): delete theme button (community-shaders#1940) * feat(UI): open log file button (community-shaders#1942) * fix(hair): marschner volumetric shadow tint (community-shaders#1944) * fix(VR): screen space shadows desync (community-shaders#1946) closes community-shaders#1840 * fix(VR): depth culling during upscaling/Terrain Blending (community-shaders#1858) * feat(VR): add edge detection for stereo blending (community-shaders#1948) * refactor: allocate trampoline once (community-shaders#1951) * fix(UI): PBR MATO color scale RGB settings corrected (community-shaders#1957) * fix(weather editor): guard against loadorder changes (community-shaders#1953) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: davo0411 <davidkehoe0411@outlook.com> * fix(UI): feature description text wrapping (community-shaders#1960) * fix(VR): exponential height fog stereo mismatch (community-shaders#1961) * chore: pbr consistency changes (community-shaders#1841) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: jiayev <l936249247@hotmail.com> * fix(skylighting): remove PBR lighting scale (community-shaders#1963) * fix(skysync): effect mesh blackout during shadow caster transitions (community-shaders#1965) * ci: fix wiki deletion with buffer update (community-shaders#1967) * feat(weather-editor): option to hide viewport (community-shaders#1970) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * test(shader): fallback to warp on invalidarg (community-shaders#1956) Co-authored-by: LukeFrankio <loren@example.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat: triplanar projected materials (community-shaders#1950) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(ao): better ao calculations (community-shaders#1968) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(pbr): fix improper kD terms (community-shaders#1971) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * perf(emat): tweak fade and shadow intensity (community-shaders#1892) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(ibl): revamp ibl and dalc sh (community-shaders#1947) * build: bump commonlib to 4.7.1 (community-shaders#1977) * fix: upscaling monitor detection fixes (community-shaders#1978) * fix(weather editor): prevent overrides resetting settings (community-shaders#1980) * fix(VR): bad llf offset (community-shaders#1984) * perf: cache frequent ui checks (community-shaders#1985) * fix: preserve vanilla water TAA when no upscaler is active (community-shaders#1986) Co-authored-by: jturnley <jturnley@users.noreply.github.com> * fix(UI): first-time dialog fade affects all overlays (community-shaders#1976) * fix(skysync): remove sunlight fade and volumetric lighting overrides (community-shaders#1966) * refactor(HLSL): standardize epsilon constants (community-shaders#1992) closes community-shaders#1227 * feat(UI): require Shift to dock windows (community-shaders#1989) * fix(UI): input spam after alt-tab (community-shaders#1993) * fix(sky sync): early return for invalid cells (community-shaders#1991) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: jiayev <l936249247@hotmail.com> * fix(sky sync): remove undeclared variable (community-shaders#1994) * refactor(pbr): clear up semantics (community-shaders#1995) * fix(UI): scale layout values for high-DPI (community-shaders#1987) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(water): hdr water taa blend (community-shaders#1988) * refactor(color): clarify gamma conversion functions (community-shaders#1996) * feat(ISL-editor): add light counters and fix filtering (community-shaders#1997) * fix(UI): DPI-aware window layouts (community-shaders#2000) * fix(weather-editor): save color palette window (community-shaders#2001) * refactor: centralize feature category names (community-shaders#2007) closes community-shaders#1265 Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * chore: bump versions (community-shaders#2010) * fix(water): sample history mask from current mask (community-shaders#2011) * chore(wetness-effects): set default MaxPuddleWetness to 1.5 (community-shaders#1981) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(weather-editor): add free camera and play mode (community-shaders#2008) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * build: bump versions and reduce false positives (community-shaders#2013) * fix(VR): LLF cluster building and culling (community-shaders#2012) * build: update to VS 2026 (community-shaders#1990) * ci: fix preset in vs2022 mode (community-shaders#2015) * ci: remove v2022 from shader jobs (community-shaders#2016) * feat(upscaling): integrate Streamline Reflex controls (community-shaders#1958) * fix(unified-water): BSWaterShaderProperty.plane (community-shaders#1998) --------- Co-authored-by: Skrubby Skrub In A Shrub <87662196+SkrubbySkrubInAShrub@users.noreply.github.com> Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> Co-authored-by: jiayev <l936249247@hotmail.com> Co-authored-by: Dlizzio <77717521+Dlizzio@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Alan Tse <alandtse@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Bruce <44987693+brucenguyen@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Dawntic <197450198+Dawntic@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Alan Tse <alandtse@gmail.com> Co-authored-by: Vanni Giachin <vanni.giachin@qlik.com> Co-authored-by: zxcvbn <66063766+zndxcvbn@users.noreply.github.com> Co-authored-by: ParticleTroned <248299730+ParticleTroned@users.noreply.github.com> Co-authored-by: soda <130315225+soda3000@users.noreply.github.com> Co-authored-by: YtzyFvra <59631290+YtzyFvra@users.noreply.github.com> Co-authored-by: LukeFrankio <lorenzogrutzmann@gmail.com> Co-authored-by: LukeFrankio <loren@example.com> Co-authored-by: jturnley <32892261+jturnley@users.noreply.github.com> Co-authored-by: jturnley <jturnley@users.noreply.github.com> Co-authored-by: Igor Alan Albuquerque de Sousa <50077829+IgorAlanAlbuquerque@users.noreply.github.com> Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com> Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(weather overrides): ensure json format for features (community-shaders#1748) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * perf(terrain blending): tweak defaults (community-shaders#1771) * fix(lighting): vanilla envcolor mult the correct value (community-shaders#1775) * fix(water): remove final colour saturate (community-shaders#1778) * fix(unified-water): LOD water cache mismatch (community-shaders#1779) * fix(weather editor): override desync with weather transitions (community-shaders#1782) * fix(weather editor): no-override weather file deletion (community-shaders#1777) * fix(weather editor): apply weather settings post-load (community-shaders#1776) * fix(weather editor): handling of weathers without overrides (community-shaders#1773) * feat(UI): feature headings (community-shaders#1786) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(VR): add wand pointing (community-shaders#1790) * chore(UI): theme consistency (community-shaders#1787) * fix(upscaling): warn about max nvidia resolution (community-shaders#1795) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore(linear lighting): UI settings changes (community-shaders#1785) Co-authored-by: Jiaye <l936249247@hotmail.com> * fix(grass-lighting) better basic grass brightness default (community-shaders#1780) * chore(UI): remove settings and about tabs (community-shaders#1794) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(terrain shadows): fix compiler warnings (community-shaders#1798) * fix: fix flickering particles (community-shaders#1791) * fix(terrain blending): disable vr support (community-shaders#1799) * refactor(upscaling): standardize behavior and tune settings (community-shaders#1783) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(UI): add auto-hide featurelist option (community-shaders#1793) * fix: match grass brightness of vanilla (community-shaders#1801) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor(perfoverlay): remove color from "Other" and "Total" (community-shaders#1806) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(unified water): fix for mesh water jitter (community-shaders#1809) * fix: clear shader cache on plugin version change (community-shaders#1739) * feat(filewatcher): add hlsli tracking (community-shaders#1796) * feat(linear lighting): add ambient multiplier (community-shaders#1805) * fix(unified-water): underwater fog flicker (community-shaders#1807) * fix(UI): conflicting esc key on welcome hotkey dialogue (community-shaders#1811) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore(UI): add subtext font to tooltips (community-shaders#1810) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * build: bump streamline to 2.10.3 (community-shaders#1813) * build: resolve shader warnings (community-shaders#1818) * feat(ui): add combo hotkey support (community-shaders#1808) * feat: add feature constraints (community-shaders#1804) * build: update version to 1.4.8 (community-shaders#1802) * fix(VR): apply per eye upscaling (community-shaders#1819) - Split upscaling across each eye for correctness and to avoid DLSS failing over 8k x 8k limit - Changes HMD mask color to black to hide artifacts with fast movement * build: bump common lib to 4.2.0 (community-shaders#1821) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> * fix(grass collision): catch trashed actor pointers (community-shaders#1765) * fix(weather editor): desynced override transitions (community-shaders#1820) * fix(upscaling): fix preset and allocation handling (community-shaders#1824) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * build: remove linear lighting from core whilst in development (community-shaders#1826) * chore: bump version to 1.4.9 (community-shaders#1827) * fix: add back LLF core file and remove LL core file (community-shaders#1828) * fix: dont save shader debug toggles (community-shaders#1831) * fix: remove IBL from core, unfinished (community-shaders#1830) * chore: update version to 1.4.10 (community-shaders#1832) * chore(dynamic cubemaps): lessen normalisation darkening (community-shaders#1833) * chore(llf): remove LightsVisualisationMode settings loading (community-shaders#1834) * revert: "fix: dont save shader debug toggles (community-shaders#1831)" This reverts commit f55f195. * revert: "chore(llf): remove LightsVisualisationMode settings loading (community-shaders#1834)" This reverts commit b3db5a7. * fix: default enabledClasses true * build: bump version * feat(upscaling): custom DLSS preset (community-shaders#1837) * fix(weather editor): sync UI for full transition (community-shaders#1822) * fix(linearlighting): return correct buffer when ll feature off (community-shaders#1838) * fix(PBR): skip IrradianceToLinear on specular in vanilla (community-shaders#1839) * feat(weather editor): adjust slider ranges (community-shaders#1847) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(weather editor): replace volumetric Lighting RGB sliders with color picker (community-shaders#1846) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * fix(grass collision): collision radius math (community-shaders#1849) * chore: move new feature information into docs (community-shaders#1848) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> * fix(ui): background blur with upscaling (community-shaders#1815) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * refactor: move some features to core (community-shaders#1852) * fix: fix blown out water specular (community-shaders#1853) * feat(weather editor): toggle hotkey (community-shaders#1856) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(color picker): add an original color reference to all color pickers (community-shaders#1857) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * perf(emat): alternate tweaks (community-shaders#1850) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather-editor): merge weather picker and editor (community-shaders#1845) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * chore(llf): remove LLF settings loading (community-shaders#1859) * feat: exponential height fog (community-shaders#1708) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather editor): block editor access in loading screens (community-shaders#1871) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(weather editor): improve weather picker UI and functionality (community-shaders#1863) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather editor): repurpose unsaved changes tracking (community-shaders#1860) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix: sync grass lighting defaults to match ENB (community-shaders#1844) * fix: stop shader compilation on game exit (community-shaders#1867) closes community-shaders#1130 * fix(weather editor): prevent inputs when editor is open (community-shaders#1872) * fix(weather editor): add ctd guards (community-shaders#1864) * feat(weather editor): remove WorldSpace widget and associated code (community-shaders#1878) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(vr): add OpenComposite menu support (community-shaders#1880) * revert: "feat(vr): add OpenComposite VR menu" (community-shaders#1881) * revert: "fix: stop shader compilation on game exit" (community-shaders#1882) * feat(vr): add OpenComposite menu support (community-shaders#1883) * feat(weather editor): add time controls (community-shaders#1877) * feat: add shadowmap rasterizer override (community-shaders#1690) * fix(weather editor): clear feature overrides with revert (community-shaders#1884) * feat(UI): Interior Only (community-shaders#1854) * fix(VR): fix Shadowmap Cascade Rasterizer (community-shaders#1888) * fix(unified water): distance calculation for raindrops & LOD fade (community-shaders#1890) * refactor: clarify core feature version mismatch text (community-shaders#1886) * fix: stop shader compilation on game exit (community-shaders#1885) * build: exclude hlsl tests from packaging (community-shaders#1894) * chore: disable feature constraints in dev mode (community-shaders#1893) * fix(vr): improve stereo UV handling (community-shaders#1899) * fix(weather editor): move esc key to native input system (community-shaders#1897) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * fix: move ResolveMonoUVForEye outside VR guard (community-shaders#1906) * fix(grass collision): validate actor (community-shaders#1905) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> * fix(terrain shadows): height map regression (community-shaders#1911) * fix: util vertical fov math (community-shaders#1904) Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> * test: add float4 overload test (community-shaders#1902) * refactor: move all features to globals::game::calendar (community-shaders#1909) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix(UI): resolution based font (community-shaders#1907) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather editor): make objects window be independently scrollable (community-shaders#1908) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(UI): consolidate searchbar to util and add to weather editor (community-shaders#1898) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(weather editor): add filled star for favourites. (community-shaders#1913) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(weather editor): add delete json button to objects window (community-shaders#1914) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(VR): resolution-based font (community-shaders#1923) * refactor: use depthbuffer helper (community-shaders#1925) * refactor: move TurboColormap into Color.hlsli (community-shaders#1924) * fix(weather editor): expand clickable area of feature override (community-shaders#1921) * feat(weather editor): enable snapping to viewport (community-shaders#1917) * feat(weather editor): highlight enabled cloud layers (community-shaders#1916) * fix(VR): SSGI discrepancies (community-shaders#1926) * feat: volumetric shadows (community-shaders#1874) * ci: enhance feature version audit (community-shaders#1927) * feat(weather editor): add filter options for objects window (community-shaders#1922) * feat(weather editor): sticky headers and scrollable content (community-shaders#1930) * fix(UI): ImGui scaling for borderless mode (community-shaders#1929) * ci: don't fail on feature audits (community-shaders#1934) * fix(pbr): use scrap heap allocation (community-shaders#1928) * chore(UI): add subsurface scattering to Interior Only (community-shaders#1932) * fix(weather editor): align highlights, fix tooltip (community-shaders#1918) * fix(ssgi): guard VR only compilation (community-shaders#1938) * build: update template to avoid extra directory (community-shaders#1812) * style: fix hlsl formatting (community-shaders#1939) * fix(UI): improve theme management UI flow (community-shaders#1933) closes community-shaders#1919 * build(deps): update pre-commit hooks (community-shaders#1768) * feat(UI): delete theme button (community-shaders#1940) * feat(UI): open log file button (community-shaders#1942) * fix(hair): marschner volumetric shadow tint (community-shaders#1944) * fix(VR): screen space shadows desync (community-shaders#1946) closes community-shaders#1840 * fix(VR): depth culling during upscaling/Terrain Blending (community-shaders#1858) * feat(VR): add edge detection for stereo blending (community-shaders#1948) * refactor: allocate trampoline once (community-shaders#1951) * fix(UI): PBR MATO color scale RGB settings corrected (community-shaders#1957) * fix(weather editor): guard against loadorder changes (community-shaders#1953) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: davo0411 <davidkehoe0411@outlook.com> * fix(UI): feature description text wrapping (community-shaders#1960) * fix(VR): exponential height fog stereo mismatch (community-shaders#1961) * chore: pbr consistency changes (community-shaders#1841) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: jiayev <l936249247@hotmail.com> * fix(skylighting): remove PBR lighting scale (community-shaders#1963) * fix(skysync): effect mesh blackout during shadow caster transitions (community-shaders#1965) * ci: fix wiki deletion with buffer update (community-shaders#1967) * feat(weather-editor): option to hide viewport (community-shaders#1970) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * test(shader): fallback to warp on invalidarg (community-shaders#1956) Co-authored-by: LukeFrankio <loren@example.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat: triplanar projected materials (community-shaders#1950) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(ao): better ao calculations (community-shaders#1968) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(pbr): fix improper kD terms (community-shaders#1971) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * perf(emat): tweak fade and shadow intensity (community-shaders#1892) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(ibl): revamp ibl and dalc sh (community-shaders#1947) * build: bump commonlib to 4.7.1 (community-shaders#1977) * fix: upscaling monitor detection fixes (community-shaders#1978) * fix(weather editor): prevent overrides resetting settings (community-shaders#1980) * fix(VR): bad llf offset (community-shaders#1984) * perf: cache frequent ui checks (community-shaders#1985) * fix: preserve vanilla water TAA when no upscaler is active (community-shaders#1986) Co-authored-by: jturnley <jturnley@users.noreply.github.com> * fix(UI): first-time dialog fade affects all overlays (community-shaders#1976) * fix(skysync): remove sunlight fade and volumetric lighting overrides (community-shaders#1966) * refactor(HLSL): standardize epsilon constants (community-shaders#1992) closes community-shaders#1227 * feat(UI): require Shift to dock windows (community-shaders#1989) * fix(UI): input spam after alt-tab (community-shaders#1993) * fix(sky sync): early return for invalid cells (community-shaders#1991) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: jiayev <l936249247@hotmail.com> * fix(sky sync): remove undeclared variable (community-shaders#1994) * refactor(pbr): clear up semantics (community-shaders#1995) * fix(UI): scale layout values for high-DPI (community-shaders#1987) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix(water): hdr water taa blend (community-shaders#1988) * refactor(color): clarify gamma conversion functions (community-shaders#1996) * feat(ISL-editor): add light counters and fix filtering (community-shaders#1997) * fix(UI): DPI-aware window layouts (community-shaders#2000) * fix(weather-editor): save color palette window (community-shaders#2001) * refactor: centralize feature category names (community-shaders#2007) closes community-shaders#1265 Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * chore: bump versions (community-shaders#2010) * fix(water): sample history mask from current mask (community-shaders#2011) * chore(wetness-effects): set default MaxPuddleWetness to 1.5 (community-shaders#1981) Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> * feat(weather-editor): add free camera and play mode (community-shaders#2008) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * build: bump versions and reduce false positives (community-shaders#2013) * fix(VR): LLF cluster building and culling (community-shaders#2012) * build: update to VS 2026 (community-shaders#1990) * ci: fix preset in vs2022 mode (community-shaders#2015) * ci: remove v2022 from shader jobs (community-shaders#2016) * feat(upscaling): integrate Streamline Reflex controls (community-shaders#1958) * fix(unified-water): BSWaterShaderProperty.plane (community-shaders#1998) --------- Co-authored-by: Skrubby Skrub In A Shrub <87662196+SkrubbySkrubInAShrub@users.noreply.github.com> Co-authored-by: SkrubbySkrubInAShrub <skrubbyskrubinashrub@gmail.com> Co-authored-by: doodlum <15017472+doodlum@users.noreply.github.com> Co-authored-by: jiayev <l936249247@hotmail.com> Co-authored-by: Dlizzio <77717521+Dlizzio@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Alan Tse <alandtse@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Bruce <44987693+brucenguyen@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Dawntic <197450198+Dawntic@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Alan Tse <alandtse@gmail.com> Co-authored-by: Vanni Giachin <vanni.giachin@qlik.com> Co-authored-by: zxcvbn <66063766+zndxcvbn@users.noreply.github.com> Co-authored-by: ParticleTroned <248299730+ParticleTroned@users.noreply.github.com> Co-authored-by: soda <130315225+soda3000@users.noreply.github.com> Co-authored-by: YtzyFvra <59631290+YtzyFvra@users.noreply.github.com> Co-authored-by: LukeFrankio <lorenzogrutzmann@gmail.com> Co-authored-by: LukeFrankio <loren@example.com> Co-authored-by: jturnley <32892261+jturnley@users.noreply.github.com> Co-authored-by: jturnley <jturnley@users.noreply.github.com> Co-authored-by: Igor Alan Albuquerque de Sousa <50077829+IgorAlanAlbuquerque@users.noreply.github.com> Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com> Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…y-shaders#1922) (cherry picked from commit 71d0702)
Summary by CodeRabbit