Skip to content

Releases: shanevbg/MDropDX12

MDropDX12 v2.8.0

Choose a tag to compare

@shanevbg shanevbg released this 15 Jun 19:39

MilkRemote connectivity, Shadertoy import fixes, and FPS cap cleanup.

MilkRemote / TCP

  • TCP reconnect handling: Evicts stale sockets from the same device ID and client IP on reconnect; sends AUTH_REQUIRED when commands arrive before re-auth.
  • Split connection timeouts: 15s for unauthenticated clients, 120s for authenticated sessions.

Shadertoy Import

  • Cross-line matrix multiply: GLSL→HLSL converter no longer emits mul(matN(...), ) with an empty operand when * spans lines.
  • Matrix macro detection: #define R(a) mat2(...) style macros are converted to mul() correctly.
  • .json preset loading: LoadPreset() routes .json files through ShaderImportWindow::ImportFromFile().

UI / Controls

  • FPS cap table: All FPS options (Visual combo, F3 hotkey, SetFPSCap sync) use a single kFpsCapOptions table in fps_caps.h.
  • 40 fps cap: Added to the FPS cap list; F3 cycles in the same order as the Visual window combo.

Other

  • Manifest trustInfo: Explicit asInvoker execution level in manifest.xml.

MDropDX12 v2.7.0

Choose a tag to compare

@shanevbg shanevbg released this 20 Mar 15:59

MDropDX12 v2.7.0

Stability, rendering fixes, and quality-of-life improvements. Adds SEH crash recovery, baked lock icon, normalize whitespace fix, and TCP server default-off for clean first launch.

Special thanks to IkeC for Milkwave — the reference visualizer and tireless collaboration partner. Thanks to Incubo_ for BeatDrop testing and comparison reports (#30).

Stability

  • SEH crash recovery: Render loop no longer hangs on GPU faults. After 3 consecutive exceptions, auto-skips to the next preset and flags the crashing preset in annotations. After 10 skipped presets, enters safe mode (black screen, commands only). Safe mode exits when user manually loads a preset.
  • TCP server off by default: No Windows Defender firewall prompt on first launch. Users who want MilkRemote Android control enable it in Settings or settings.ini.

Rendering Fixes

  • Normalize whitespace fix: Presets with normalize ( (space before parenthesis) now correctly get the _safe_normalize replacement, preventing NaN from zero-length vectors on DX12.

UI Improvements

  • Baked lock icon: Preset lock indicator is now a pixel-art padlock drawn directly in the font atlas, replacing the barely-visible bullet dot. Appears before the preset name when locked.

Related Apps

Installation

Download the portable zip below, extract to any folder with write access, and run MDropDX12.exe. No installer or admin privileges required. No VC++ Redistributable needed.

Press F8 to open Settings. Press F1 for keyboard shortcuts.

Full Changelog

See docs/Changes.md for the complete list of changes across all releases.

MDropDX12 v2.6.0

Choose a tag to compare

@shanevbg shanevbg released this 19 Mar 00:23

MDropDX12 v2.6.0

Shader compatibility, rendering quality, and .milk2 blend improvements. Adds anisotropic filtering toggle, safe division for DX9-to-DX12 NaN prevention, and improved .milk2 double-preset blending patterns.

Special thanks to IkeC for Milkwave — the reference visualizer and tireless collaboration partner. Thanks to Incubo_ for BeatDrop testing and comparison reports (#30).

New Features

  • Anisotropic Filtering (Visual window): Checkbox to enable 16x anisotropic filtering on the two linear DX12 samplers. Improves texture sharpness on warped/stretched surfaces. Off by default.

Preset Rendering Fixes

  • Safe division for DX9 compatibility: DX9 returns 0 for 0/0; DX12 returns NaN which propagates through the feedback loop. Added _safe_denom() wrapper applied to divisions inside shader bodies — fixes presets that produce NaN from zero-denominator expressions (e.g. flash effects with unused q-variables).
  • Initialize comp quad Diffuse: Fixed uninitialized vertex diffuse color on the fullscreen comp quad, ensuring consistent alpha and color values for comp shader presets.

.milk2 Blend Improvements

  • Fixed wipe patterns for horizontal/vertical: .milk2 double-preset files with blending_pattern=horizontal or blending_pattern=vertical now use dedicated fixed-position wipe shaders instead of recycling animated wipe types.

Related Apps

Installation

Download the portable zip below, extract to any folder with write access, and run MDropDX12.exe. No installer or admin privileges required. No VC++ Redistributable needed.

Press F8 to open Settings. Press F1 for keyboard shortcuts.

Full Changelog

See docs/Changes.md for the complete list of changes across all releases.

MDropDX12 v2.5.0

Choose a tag to compare

@shanevbg shanevbg released this 17 Mar 15:26

Rendering accuracy, quality controls, and stability release. Adds NaN-safe atan2, UI-accessible mesh size and texture precision controls, media key support, Windows volume control via IPC, and resize crash fixes from community PRs.

Special thanks to IkeC for all his brilliant work on Milkwave — the reference visualizer, testing feedback, and tireless collaboration that continues to drive MDropDX12 forward.

Preset Rendering Fixes

  • NaN-safe atan2: atan2(0, 0) returns NaN on DX12 (DX9 NVIDIA returns 0). Added _safe_atan2(y, x) wrapper that prevents NaN at the origin — fixes persistent black holes in tunnel/radial presets.
  • Safe denominator intrinsics: Added _safe_normalize() overloads that guard against zero-length vectors, preventing NaN propagation in raymarching and particle presets.
  • Fix message SIZE parameter: Messages with explicit SIZE=N parameter now respect the specified size instead of always autosizing.

New Features

  • Mesh Size control (Visual window): Slider to adjust warp/shape mesh vertex density (8–192, step 8). Higher values produce smoother curves and distortion effects. Previously only changeable via settings.ini.
  • Texture Precision control (Visual window): Combo box to select internal render target bit depth — 8-bit (default), 16-bit float, or 32-bit float. Higher precision reduces color banding and improves feedback loop accuracy.
  • Media key routing: Media keys (play/pause, next, previous, stop) now route through keybd_event for system-level handling, fixing media control when the visualizer has focus.
  • Windows volume control via IPC: New SET_VOLUME / GET_VOLUME / SET_MUTE / GET_MUTE IPC commands for controlling system audio device volume and mute state.
  • Audio gain attenuation: Audio sensitivity can now be set below 1.0 for attenuation (previously clamped to 1.0 minimum).

Stability Fixes

  • Fix resize crash (PR #32): Restore DX12 command infrastructure after ResizeBuffers failure so the render loop doesn't crash accessing null objects during recovery.
  • Fix display output cleanup: Release display mirror Spout wrapped backbuffers during device cleanup to prevent crashes on resize.
  • Fix preset startup default (PR #31): m_bEnablePresetStartup now defaults to true for expected out-of-box behavior with fresh settings.ini.

Installation

Download the portable zip below, extract to any folder with write access, and run MDropDX12.exe. No installer or admin privileges required. No VC++ Redistributable needed.

Press F8 to open Settings. Press F1 for keyboard shortcuts.

Full Changelog

See docs/Changes.md for the complete list of changes across all releases.

MDropDX12 v2.4.0

Choose a tag to compare

@shanevbg shanevbg released this 15 Mar 09:29

MDropDX12 v2.4.0

Preset compatibility and visual accuracy release. Fixes two rendering bugs that caused presets to render differently from the reference Milkwave Visualizer, and adds a visual comparison document with side-by-side screenshots.

Special thanks to IkeC for all his brilliant work on Milkwave — the reference visualizer, testing feedback, and tireless collaboration that continues to drive MDropDX12 forward.

Preset Rendering Fixes

  • Fix alpha blend feedback amplification in textured shapes: SPRITEVERTEX PSOs used SrcBlendAlpha=ONE instead of SRC_ALPHA, causing textured shapes to write excess alpha that compounded through the feedback loop. DX9 has no separate alpha blend, so alpha uses the same factors as color. Fixes "BrainStain - re entry" and other presets with textured shapes appearing much brighter than reference.
  • Fix HLSL variable shadowing user-defined functions: Added FixShadowedUserFunctions() to rename local variables that reuse user-defined function names (valid in GLSL, rejected by HLSL with error X3005). The existing FixShadowedBuiltins only handled intrinsic functions. Fixes "Marex + IkeC - Shadow Party Shader Jam 2025" rendering as black screen.

Documentation

  • Visual comparison document: New docs/comparison.md with side-by-side screenshots of 11 presets rendered on both MDropDX12 and Milkwave Visualizer. All 11 presets now render equivalently.

Installation

Download the portable zip below, extract to any folder with write access, and run MDropDX12.exe. No installer or admin privileges required. No VC++ Redistributable needed.

Press F8 to open Settings. Press F1 for keyboard shortcuts.

Full Changelog

See docs/Changes.md for the complete list of changes across all releases.

MDropDX12 v2.3.0

Choose a tag to compare

@shanevbg shanevbg released this 14 Mar 23:31

MDropDX12 v2.3.0

Shader compatibility and rendering completeness release. Fixes preset rendering failures, adds missing DX12 motion vector rendering, and improves shader compilation compatibility for complex raymarching presets.

Special thanks to IkeC for all his brilliant work on Milkwave — the reference visualizer, testing feedback, and tireless collaboration that continues to drive MDropDX12 forward.

Preset Rendering Fixes

  • Fix _safe_sqrt to return always-positive values: Changed from sign(x)*sqrt(abs(x)) to sqrt(abs(x)), matching DX9 SM3.0 native sqrt behavior. The sign-preserving form created singularities in presets like "martin - axon3" where sqrt(negative_uv)+offset crossed zero, producing infinity that blew out to white through the feedback loop.
  • Implement DX12 motion vector rendering: Ported DrawMotionVectors() to DX12 using PSO_LINE_ALPHABLEND_WFVERTEX. Motion vectors are now drawn into VS[0] before the warp pass, entering the feedback loop as persistent colored traces. Fixes presets like "Illusion & Rovastar - Clouded Bottle" which appeared too dark because their motion vector lines (the primary light source) were missing.
  • Fix [loop] attribute injection for shader compatibility: Inject [loop] only on while loops (raymarching constructs), not for loops. Small fixed-count for loops caused error X3531 when marked [loop] because the compiler insists on unrolling them. Fixes "LamersAss - The Vortex 2077rmx" and "lara - Flexi ate a magical broccoli" presets which had black screens.

Shader Compilation Improvements

  • Add D3DCOMPILE_PARTIAL_PRECISION flag: Hints to the SM5.0 compiler that lower precision is acceptable, nudging instruction selection closer to SM3.0 hardware behavior for complex raymarching presets.
  • Add D3DCOMPILE_PREFER_FLOW_CONTROL flag: Hints compiler to prefer dynamic branching over predication, reinforcing [loop] injection for SM3.0-like codegen in branching shaders.
  • Fix D3DXCompileShader flag passthrough: All caller flags now pass through to D3DCompile instead of only mapping DEBUG and SKIPVALIDATION.
  • Replace i = I_MAX break hack with native break: SM3.0+ supports break natively; the transpiler hack caused incorrect loop behavior with some D3DCompile optimization paths.

Diagnostics

  • Bytecode disassembly dump: At verbose log level, writes SM5.0 instruction listing to log/diag_asm_warp.txt / log/diag_asm_comp.txt via D3DDisassemble() for diagnosing codegen differences.

Installation

Download the portable zip below, extract to any folder with write access, and run MDropDX12.exe. No installer or admin privileges required. No VC++ Redistributable needed.

Press F8 to open Settings. Press F1 for keyboard shortcuts.

Full Changelog

See docs/Changes.md for the complete list of changes across all releases.

v2.2.0

Choose a tag to compare

@shanevbg shanevbg released this 14 Mar 09:06

Preset Rendering Accuracy Release

Fixes long-standing math and shader issues that caused many presets to render darker, incorrectly filtered, or visually different compared to the reference Milkwave Visualizer.

Special thanks to IkeC for all his brilliant work on Milkwave — the reference visualizer, testing feedback, and tireless collaboration that continues to drive MDropDX12 forward.

Preset Rendering Fixes

  • Fix sqrt() emulation to match DX9 hardware behavior: DX9 compiles sqrt(x) as x * rsq(x), returning sign(x) * sqrt(|x|) for negative inputs. Previous sqrt(abs(x)) shifted feedback equilibria causing darkness/brightness issues across many presets. Now matches DX9 exactly.
  • Fix sampler addressing for prefixed noise/random textures: sampler_pw_*, sampler_fc_*, sampler_pc_* prefixed samplers fell through to default LINEAR+WRAP instead of POINT+WRAP, LINEAR+CLAMP, or POINT+CLAMP. Added 36 entries for all prefixed noise, noisevol, and random texture variants. Fixes excessive glow and incorrect filtering.
  • Fix vertex decay color for custom warp shader presets: Custom warp shader presets now receive white vertices (shader handles decay internally), matching Milkwave. Was incorrectly applying cDecay causing premature darkening.
  • Add NaN-safe shader intrinsics for DX12 IEEE 754 compliance: Safe wrappers (_safe_sqrt, _safe_tan, _safe_pow, _safe_asin, _safe_acos, _safe_normalize) prevent NaN propagation through the feedback loop.
  • Fix comp vertex shader uv_orig binding: Correct separate TEXCOORD0/1/2 inputs matching vertex layout.

Other Fixes

  • Fix screenshot red/blue channel swap in PNG output
  • Increase default ToolWindow font size (20px default, 32px max)
  • DIAG_DISPLAY_MODE IPC command for raw render target inspection

Installation

Download the portable zip below, extract to any folder with write access, and run MDropDX12.exe. No installer or admin privileges required.

See docs/Changes.md for the complete changelog.

MDropDX12 v2.1.0

Choose a tag to compare

@shanevbg shanevbg released this 13 Mar 11:57

MDropDX12 v2.1.0

Bug Fixes

  • Fixed display loss when cycling between mirroring and fullscreen modes — display enumeration no longer skips the render monitor; mirrors survive mode transitions
  • Fixed watermark-to-mirror transition bugs — mirrors no longer stuck at 30% opacity with click-through after switching from watermark mirror to regular mirror via hotkey
  • Fixed opacity persistence — watermark mode's temporary opacity no longer leaks into the INI file
  • Fixed mirror re-creation hang — added GPU sync before swap chain creation to prevent device removal errors

New Features

  • Mirror Watermark mode — all displays get visualization with click-through + low opacity for desktop overlay use (hotkey action + Displays window button)
  • Mirror/Display IPC commandsSET_MIRROR_OPACITY, SET_MIRROR_CLICKTHRU, MOVE_TO_DISPLAY, SET_WINDOW, DIAG_MIRRORS
  • Window mode signalsFULLSCREEN, WATERMARK, BORDERLESS_FS, STRETCH, MIRROR, MIRROR_WM via SIGNAL| IPC
  • Track info IPCTRACK| outgoing message broadcasts current track info to pipe clients
  • Hotkey reset — moved to Hotkeys window only, with confirmation dialog

Download

Extract the zip anywhere and run MDropDX12.exe. No installation required.

MDropDX12 v2.0.0

Choose a tag to compare

@shanevbg shanevbg released this 12 Mar 11:19

Major milestone release. MDropDX12 v2.0 marks the point where the engine has been fully rebuilt on DirectX 12 with a comprehensive feature set that goes well beyond the original MilkDrop2 visualizer.

Special thanks to IkeC for all his hard work on Milkwave -- the inspiration, testing, feedback, and collaboration that made this project possible.

Shadertoy Import & GLSL-to-HLSL Converter

  • Full Shadertoy rendering pipeline with .milk3 JSON preset format
  • Multi-pass rendering: Buffer A -> Buffer B -> Buffer C -> Buffer D -> Image, with Common shared code
  • SM5.0 (ps_5_0) shader compilation for all Shadertoy presets
  • FLOAT32 ping-pong feedback buffers for temporal accumulation effects
  • Comprehensive GLSL-to-HLSL converter handling matrices, structs, vector comparisons, array params, over-specified constructors, and more
  • Shader Import window with two-panel editor, per-pass channel combos, Convert & Apply, and Save .milk3 export
  • Channel auto-detection: self-feedback, audio, noise textures, and JSON channel names
  • Shadertoy-compatible iMouse, iDate, iResolution, iTime, iChannel0-3 uniforms
  • sRGB gamma correction for Shadertoy-accurate color output
  • 17+ converter fixes since initial release (variable shadowing, matrix chains, precision strips, texture bias, and more)

Named Pipe IPC

  • Replaced WM_COPYDATA / hidden window IPC with Named Pipes (\.\pipe\Milkwave_<PID>)
  • PID-based discovery eliminates fragile window-title matching
  • Multi-instance pipe server: concurrent client connections (Milkwave Remote + MCP simultaneously)
  • Duplex message-mode communication with non-blocking outgoing messages
  • 32 of 34 Milkwave commands handled natively
  • Signal messages (SIGNAL|NAME=VALUE) for extensible event notification
  • MCP server (tools/mdrop-mcp/) for AI-assisted visualizer control

ToolWindow System

  • 20+ standalone windows running on their own threads with independent always-on-top, sticky positions, and tab memory
  • Windows: Visual, Colors, Controller, Displays, Song Info, Hotkeys, MIDI, Presets, Sprites, Messages, Remote, Script, Shader Import, Video Effects, VFX Profiles, Text Animations, Button Board, Workspace Layout, Error Display, Annotations
  • Dark-themed popup context menus using uxtheme dark mode APIs
  • ModalDialog base class for themed popup dialogs with shared font/theme/DPI support

Configurable Hotkeys & Input

  • Dedicated Hotkeys window (Ctrl+F7) with per-binding local/global scope
  • Mouse button bindings (Left, Right, Middle, X1, X2)
  • Dynamic Script and Launch App hotkey slots with unlimited entries
  • Conflict detection and Reset to Defaults
  • Native MIDI input with 50 mapping slots, learn mode, button/knob actions
  • Game controller support with JSON config and IPC command binding

Preset Annotations

  • Persistent per-preset ratings (0-5), flags (favorite/error/skip/broken), notes
  • Auto-captured shader error text in presets.json
  • Annotations ToolWindow with filter, import, scan, and detail dialogs
  • Right-click context menu on Presets window

Video & Display

  • Native webcam and video file input mixing (background/overlay compositing with luma key)
  • Spout video input mixing via D3D11On12
  • Video Effects window with transform, color, and audio-reactive controls
  • VFX JSON profiles for saving/loading effect presets
  • Monitor mirroring with per-display opacity, click-through, and safety controls
  • Workspace Layout window for tiling tool windows across the screen
  • Two-pass shader blending for preset transitions

Audio & FFT

  • FFT EQ smoothing with configurable attack/decay and peak hold
  • Audio texture 512x2 R32_FLOAT (smoothed spectrum + peak values)
  • Shader functions: get_fft(), get_fft_hz(), get_fft_peak(), get_fft_peak_hz()
  • Separate clean FFT for shader audio texture (Hann3 window, no EQ)

UI & Settings

  • In-app Settings window (F8) with tri-mode theme (Dark/Light/Follow System)
  • 5-tab UI (General, Tools, System, Files, About) with preset browser and resource viewer
  • Button Board with slot images, hotkeys, JSON layouts, drag-drop
  • Text Animations window with DX12 warped text, color/font pickers, animation profiles
  • Cover art sprite system with IPC signal
  • File association registration for .milk/.milk2 (Settings -> About, no admin required)
  • Command-line preset loading (double-click .milk/.milk2/.milk3 in Explorer)
  • Welcome window with first-run setup options

Fixed Issues (since v1.0)

  • Fixed fullscreen black rendering for dot-based presets (DX12 point size emulation)
  • Fixed dark/incorrect blur presets (removed DX9 half-texel UV offsets)
  • Fixed non-shader preset rendering (comp shader binding, shape alpha blend, warp decay)
  • Fixed pre-MilkDrop2 preset rendering (clamp sampler, Y-flip)
  • Fixed ns-eel2 regNN * regNN multiply bug (optimizer treated different regs as identical)
  • Fixed ps_2_a silently dropping texture bindings on complex shaders (raised to ps_3_0 minimum)
  • Fixed comp shader reading post-warp darkened texture instead of pre-warp input
  • Fixed TDR crash when disabling mirror outputs (GPU flush before resource release)
  • Fixed HUD text overflow on portrait/large displays
  • Fixed render hang on display mode switching (swap chain recovery)
  • Fixed mirror window deadlock (cross-thread message pumping)
  • Fixed global hotkeys not dispatching most actions
  • Fixed sampler_rand black screen and random texture directory search
  • Fixed 17+ GLSL converter issues (variable shadowing, matrix chains, precision strips, texture bias, and more)
  • Fixed channel auto-detection false positives
  • Fixed screenshot filename after shader import
  • Fixed notification overlay persisting across preset changes

Installation

Download the portable zip below, extract to any folder with write access, and run MDropDX12.exe. No installer or admin privileges required. No VC++ Redistributable needed.

Press F8 to open Settings. Press F1 for keyboard shortcuts.

Full Changelog

See docs/Changes.md for the complete list of changes across all releases.

MDropDX12 v1.7.7

Choose a tag to compare

@shanevbg shanevbg released this 11 Mar 13:28

Rendering Fixes

  • Fixed fullscreen black rendering for dot-based presets — DX12 custom wave dots were always 1px instead of emulating DX9 point size (2-3px squares at high resolution). Sparse additive dots couldn't accumulate enough brightness in the feedback loop to overcome comp shader darken effects.
  • Fixed dark/incorrect blur presets (e.g., Flexi) — removed leftover DX9 half-texel UV offsets from blur shaders that shifted blur by 1 texel, compounding through the feedback loop
  • Fixed non-shader preset rendering — auto-gen comp shader now correctly binds VS[1] (post-warp+shapes), custom shapes use proper alpha blending PSO
  • Fixed comp shader input — user-written comp shaders now read pre-warp input instead of post-warp darkened texture
  • Fixed pre-MilkDrop2 preset rendering — clamp sampler, Y-flip, and warp decay via vertex diffuse color

Hotkeys & Input

  • Added separate Mirror and Stretch hotkey actions (unbound by default)
  • Fixed global hotkeys not dispatching most actions
  • Guard mirror prompt against re-entry with auto-accept after 5 seconds

Installation

Download MDropDX12-v1.7.7-Portable.zip, extract to any folder, and run MDropDX12.exe. No installer or admin privileges required.

Press F8 to open Settings. Press F1 for keyboard shortcuts.

Full changelog: docs/Changes.md