Skip to content

Texture Set Manager — v2.0.0.0

Latest

Choose a tag to compare

@Cubeir Cubeir released this 06 Sep 11:10
· 4 commits to master since this release
213444b

New in this release

This is a large maintenance and feature release. Most of it is work that was developed and battle-tested in the Vanilla RTX App -- which Texture Set Manager was originally forked from -- and has now been brought back across.

texture set manager window screenshot

Added

  • Texture set tools (developer-tools button in the title bar):
    • Analyze texture sets – pick a folder and get a report of every PBR texture that is still pixel-for-pixel identical to its own color texture. Those are almost always template copies that were never painted. Texture sets pointing at files that don't exist are listed too. The report opens in its own dialog with a copy button, and is also written to the log. Read-only; it never touches a file.
    • Strip all texture sets – pick a folder and delete every texture set along with the MER/MERS, normal and heightmap textures they reference, leaving only your color textures. You're asked whether to include subfolders before anything happens, and that prompt doubles as the confirmation (Cancel is its default). It only deletes what a texture set actually resolved to as a PBR layer, so color textures that merely look like normal maps – sandstone_normal and friends – are never at risk.
  • Create New Folders toggle – puts a run's generated texture sets and PBR templates into a new subfolder of each processed folder (Heightmaps-PBR, Normals-PBR or None-PBR, depending on the secondary PBR texture type) instead of writing them alongside your color textures.
  • Crash reporting. Unhandled exceptions on the UI thread, on background threads, and in unobserved tasks are now written to a report – including failures during startup, which previously left nothing behind. On the next launch the report is shown in a dialog with a copy button and links for filing it.
  • A busy indicator, and the window locks while it's working. Generating, analyzing and stripping now show a progress bar at the top of the log and disable the rest of the controls for the duration, so a long run reads as "working" rather than "frozen" and a second tool can't be started against the same folder mid-operation.
  • The title bar buttons now dim when the window loses focus, matching the rest of the title bar.

Fixed

  • Closing the app no longer produces a crash dump. Every exit was leaving a minidump behind. The cause was the theme watcher: it re-subscribed to theme-change notifications on every window activation and nothing ever unsubscribed, so listeners kept firing at a window that had already been torn down. Theme handling was rewritten around a single subscription that is properly removed on close, and the whole shutdown path now stops its timers, cancels in-flight work, unhooks its handlers and releases the mutex – each step isolated so one failure can't abandon the rest.
  • The spinning title bar logo no longer looks off-centre as it speeds up. It now rotates around its own exact centre instead of a hand-computed pixel offset, the bitmap cache was removed from the rotating image (a cached rasterization being transformed is what produced the "sag"), and rotation is integrated against real elapsed time rather than assuming a perfect frame interval, which removes the stutter at higher speeds.
  • Texture sets that declare a PBR texture which doesn't exist are no longer silently ignored, they're reported.
  • Files that are already .tga are no longer needlessly re-encoded when Convert to TGA is on; they're left byte-for-byte untouched, timestamp included.
  • Single-instance handling no longer depends on finding the running process by name and poking its main window handle, which a packaged WinUI app doesn't reliably expose. Launching the app a second time now signals the existing instance directly, and it restores and comes to the front.
  • Trace logging no longer walks the entire buffer on every single line written.

Changed

  • Convert to TGA now behaves as intended. It governs the format the whole set ends up in: with it on, a color texture that isn't already Targa is converted first and the original removed, so the PBR templates copied from it come out as .tga too; with it off, nothing is converted and the templates inherit the color texture's own format.
  • Rewritten logging. Messages are now written to a single thread-safe buffer from anywhere and revealed to the log area by a typewriter that always types the oldest pending message first, start to finish, catching up automatically when messages arrive in bursts. Duplicate consecutive messages are collapsed, and the log trims on message boundaries rather than mid-sentence.
  • Migrated fully from Newtonsoft.Json to System.Text.Json. Everything the app writes goes through a source-generated serializer and everything it reads goes through the DOM, so no part of it needs runtime reflection – a trimmed Release build now produces no more trim warnings, or potential latent bugs for release builds.
  • The bevelled edge beside the Subsurface Scattering button is now driven properly: it takes the accent colour when the toggle is checked, dims when the button is disabled, and follows theme changes. Only the edge belonging to that button is tinted – the one belonging to the secondary PBR dropdown keeps its resting colour, since the dropdown has no active state to represent.
  • Windowing moved to WinUIEx. The hand-rolled window state manager is gone; sizing, minimum size, and saving/restoring the window's position between sessions are now handled by WinUIEx, which is considerably better tested at that job – including DPI scaling and pulling a restored window back onto a monitor that still exists. The window is centred on first launch, and the four settings keys the old manager left behind are swept up on the way past.
  • Title bar appearance and title bar button styling brought in line with the Vanilla RTX App, including icon fonts that now resolve through theme resources instead of being hard-coded, so they fall back correctly on systems without Segoe Fluent Icons.
  • Texture set parsing and resolution now go through a shared, more capable helper that understands inline colour layers (hex strings and RGB/RGBA arrays), validates MER-versus-MERS and normal-versus-heightmap exclusivity, and preserves the exact format of anything it writes back. Smart Filters use it too, so files referenced by an existing texture set are excluded more reliably.
  • Image reading and TGA writing are substantially faster: both used to make one native call per pixel on each side, and now do a single bulk transfer instead.
  • The debug log export now includes system information (architecture, OS, runtime, package identity), and formats collections properly.
  • The "leave a review" prompt's "don't show again" is now remembered per major/minor version, so it can ask once more after a feature update rather than never again.

Removed

  • The online credits/PSA fetcher. The donate button now simply opens Ko-fi – no Ko-fi supporter list is downloaded or maintained for Texture Set Manager. (Though I'd still appreciate it if you ever considering becoming a member!)

README for the full documentation.


Installation

Available on the Microsoft Store for Windows 11 (and Windows 10, May 2020 Update or Later)

Direct Links:

Releases may take up to 48 hours to fully roll out.
Find help, stay updated, and share your suggestions at: https://discord.com/invite/A4wv4wwYud