github suprepupre/wow-optimize v3.17.0
wow-optimize v3.17.0

3 hours ago

A bug fix release, driven mostly by issue #46.

Most of what is fixed below started as an issue filed by txtsd,
who then ran the testing rounds that confirmed each fix and caught the ones that
were not fixed yet. This release exists because of that. Thank you.

Fixed

  • Loading screen no longer stays up after the world has finished loading
  • Fatal ERROR #134 Invalid function pointer at login on clients that don't load a third-party Lua extension library
  • Multi-second freezes during addon loading and /reload
  • Async frustum culling no longer makes objects pop in and out at the wrong distance, or models flicker at the draw distance, above ~125 fps
  • Loading-screen detection no longer requires the !LuaBoost addon — it now works on any install, and the initial login load is covered too
  • Screen flicker and darkening with an overlay running (RTSS, Afterburner, Steam) above ~120 fps. The D3D9 render-state cache was cleared on a timer capped near 125 times a second instead of once per frame, so past that frame rate it stopped keeping up and the device held whatever state the overlay left behind
  • Addon list rendering with overlapping text after a /reload, and those entries refusing to toggle
  • The end of the session log is no longer lost when the game exits

Faster

  • The SSE2 memset replacement now actually delivers its win. Its own two diagnostic counters were costing more than the work they measured; the function is about 2.3x faster than the client's rep stosd instead of 3%.

Removed

Three features shipped on the same assumption — that skipping an engine call per frame only skips work — and all three were wrong about what that call does. Each was reported as visual corruption by testers before it was understood:

  • Animation LOD. The bone-update call it skipped also applies each model's placement, so throttled models held stale positions and juddered whenever the camera moved.
  • Async Frustum Culling. It precomputed visibility on worker threads against a frustum the frame had not established yet, so objects popped in and out at the wrong distance and models flickered at the draw distance — above about 125 fps, where several frames shared one cache generation.
  • Nameplate Throttle. The call it skipped drives shared UI and render state rather than one nameplate's cosmetics, which is how it managed to break Skada as well as make nameplates blink.

And a set of features that never did anything at all. Some had a switch the DLL never read; some hooked an address that was not the start of the function they meant; one printed "Subsystem Active" in every log while never installing its hook:

  • Camera Collision Raycast Throttle, Floating Combat Text Coalescer, Addon Message Coalescing, plus internal modules for aura coalescing, mesh skinning (three separate ones) and the SavedVariables serializer.

Every hook address in the DLL has since been verified against the binary, every launcher switch is now read by the code behind it, and a build-time check keeps it that way.

Restored

  • Lua C-API inline cache suite and adaptive Lua GC governor, both removed by mistake in an earlier audit (both still opt-in).

Diagnostics

This release adds the thing the project never had: a way to tell whether a change helped.

  • Frame-time benchmark. Every presented frame is measured at IDirect3DDevice9::Present and reported as a distribution, not an average — an average hides exactly the stutters players report:

    73581 frames over 183.5s, source: D3D9 Present, config CDFBB03D, build 3.17.0
    avg 2.49 ms (401.0 fps)   p50 2.40   p95 3.50   p99 4.20   p99.9 17.40   max 1975.45
    janky frames: >33ms 38 (0.05%)  >50ms 25 (0.03%)  >100ms 15 (0.02%)
    

    The report carries a fingerprint of your settings, so two runs can be compared and each proven to have used the configuration it claims.

  • Slow frames explain themselves. A frame that runs far past the session's own median pulls the recent event trace, so a hitch comes with what happened during it — a device reset, a UI reload, a cache invalidation.

  • Crash reports, Lua error dumps and stutter dumps all open with that same event trace, instead of ~70 lines of unused counters.

  • The sampling profiler resolves hot code to individual functions rather than 4 KB pages, for both the client and this DLL.

  • The startup banner reports the exact build a log came from.

Upgrading

Settings carry over. Nothing needs to be reset — keys for removed features are simply ignored from now on.

One rename is worth knowing about: LuaFileCache gated a module-handle cache rather than anything to do with Lua files, and is now ModuleHandleCache. If you had it on, turn the new one on.

If you had Animation LOD, Async Frustum Culling (previously "Spatial Culling & Parallel Frustum Culler") or Nameplate Throttle enabled, those are gone; the artifacts they caused go with them and there is nothing to re-enable.

Still open: a crash reported a while after alt+F4. If you hit it, please attach Crashes\wow_crash_*.dmp and the timestamped Logs\wow_optimize_<date>_<time>.log.

Don't miss a new wow-optimize release

NewReleases is sending notifications on new releases.