Skip to content

feat(weather editor): add filter options for objects window#1922

Merged
alandtse merged 13 commits into
community-shaders:devfrom
SkrubbySkrubInAShrub:improve-objects-window-filter
Feb 22, 2026
Merged

feat(weather editor): add filter options for objects window#1922
alandtse merged 13 commits into
community-shaders:devfrom
SkrubbySkrubInAShrub:improve-objects-window-filter

Conversation

@SkrubbySkrubInAShrub
Copy link
Copy Markdown
Collaborator

@SkrubbySkrubInAShrub SkrubbySkrubInAShrub commented Feb 21, 2026

  • filter by type
  • ensure all UI stays in the window.

Summary by CodeRabbit

  • New Features
    • Enhanced object filtering with column-specific options (EditorID, FormID, File, Status) plus an All mode that searches across fields.
    • Added favorites/flagged toggles to filter visible objects.
  • Refactor
    • Filter and category state now scoped per-window for more reliable category switching, recent lists, and predictable filter resets.
  • UI
    • Improved filter controls and layout: aligned search input, filter-by selector, and updated help text.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Feb 21, 2026

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Replaces 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

Cohort / File(s) Summary
Objects filter implementation
src/WeatherEditor/EditorWindow.cpp, src/WeatherEditor/EditorWindow.h
Adds FilterColumn enum and kFilterColumnNames; introduces instance members (m_selectedCategory, m_previousSelectedCategory, m_filterBuffer, m_currentFilterColumn, m_showOnlyFlagged, m_showOnlyFavorites); adds ResetObjectsFilter() and MatchesObjectFilter(Widget*) const; replaces static globals with members and centralizes filtering logic; updates Objects UI layout (search + filter-by combo) and wiring.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • doodlum

Poem

🐇
I hopped through lists and found a thread,
I tidied filters in my cozy bed,
A search and combo side by side,
Widgets sorted, nothing to hide,
Hopping happy — code well-fed.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(weather editor): add filter options for objects window' accurately reflects the main changes: adding a new FilterColumn enum, filter state members (m_currentFilterColumn, m_filterBuffer, m_showOnlyFlagged, m_showOnlyFavorites), and two new filter methods (ResetObjectsFilter, MatchesObjectFilter) to support filtering in the objects window.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Automated formatting by clang-format, prettier, and other hooks.
See https://pre-commit.ci for details.
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 21, 2026

Using provided base ref: e4c0842
Using base ref: e4c0842
Base commit date: 2026-02-22T09:26:01Z (Sunday, February 22, 2026 09:26 AM)
No actionable suggestions for changed features.

@SkrubbySkrubInAShrub SkrubbySkrubInAShrub marked this pull request as ready for review February 21, 2026 17:15
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/WeatherEditor/EditorWindow.cpp (2)

193-206: GetEditorID() called twice in the All case — cache the result.

Lines 195 and 202 both call w->GetEditorID(). If GetEditorID() returns by value, this constructs two std::string copies per widget per frame in the All path.

♻️ 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.0f spacing multiplier must be manually kept in sync with the UI layout.

The magic constant 8.0f encodes the exact number of SameLine() 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.

Comment thread src/WeatherEditor/EditorWindow.cpp Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

currentFilterColumn not reset on category change may produce an unexpectedly empty list.

If currentFilterColumn is Status and the user switches to a category with no marked records, matchesFilter returns false for every widget, leaving the list blank with no visible explanation. A simple reset to FilterColumn::All whenever selectedCategory changes would prevent the surprise:

🛡️ Suggested guard
+    static std::string prevSelectedCategory;
+    if (prevSelectedCategory != selectedCategory) {
+        prevSelectedCategory = selectedCategory;
+        currentFilterColumn = FilterColumn::All;
+    }

(Place this immediately after the currentFilterColumn static 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 hoisting FilterColumn, kFilterColumnNames, and currentFilterColumn out of the function body.

All three are re-declared inside ShowObjectsWindow() on every call. static ensures they initialize only once, and C++ permits a static local of a local enum class type — 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.cpp private 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: numGaps is a fragile magic constant with no compile-time guard.

The accompanying comment correctly warns that numGaps must be kept in sync with the number of SameLine() 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.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 21, 2026

✅ A pre-release build is available for this PR:
Download

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 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") match numFixedItems = 8 and each corresponding width addend in fixedW. The formula is correct.

A small maintainability suggestion: the fixedW expression 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.

Comment thread src/WeatherEditor/EditorWindow.cpp Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/WeatherEditor/EditorWindow.cpp (2)

307-311: numFixedItems and numGaps are always equal — consolidate into one constant.

Two separate constexpr values that must be kept in sync add maintenance burden without benefit. A single constexpr 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.

FilterColumn and kFilterColumnNames are visible as TU-global symbols. Since they're only used inside ShowObjectsWindow, 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.

Comment thread src/WeatherEditor/EditorWindow.cpp Outdated
Comment thread src/WeatherEditor/EditorWindow.cpp Outdated
SkrubbySkrubInAShrub and others added 5 commits February 22, 2026 15:14
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (4)
src/WeatherEditor/EditorWindow.h (1)

231-246: Optional: add a Count_ sentinel to guard kFilterColumnNames sync

kFilterColumnNames in the .cpp anonymous namespace must stay in sync with FilterColumn manually. A sentinel enum value enables a cheap compile-time check inside any EditorWindow member 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::MatchesObjectFilter or EditorWindow::ResetObjectsFilter in 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 block

Lines 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 = 8 is a fragile coupling point

If any item is added to or removed from the same-line row without updating this constant and the fixedW formula, the search bar width will silently break. Consider computing fixedW bottom-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 fallbacks

This 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 to lightingTemplateWidgets. 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.

SkrubbySkrubInAShrub and others added 2 commits February 22, 2026 15:52
Automated formatting by clang-format, prettier, and other hooks.
See https://pre-commit.ci for details.
@alandtse alandtse merged commit 71d0702 into community-shaders:dev Feb 22, 2026
14 checks passed
davo0411 added a commit to davo0411/skyrim-community-shaders that referenced this pull request Mar 28, 2026
* 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>
davo0411 added a commit to davo0411/skyrim-community-shaders that referenced this pull request Mar 29, 2026
* 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>
ParticleTroned pushed a commit to ParticleTroned/skyrim-community-shaders that referenced this pull request May 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants