Skip to content

Latest commit

 

History

History
56 lines (36 loc) · 2.89 KB

README.md

File metadata and controls

56 lines (36 loc) · 2.89 KB

Figma - 2023-11-09 42@2x

Melatonin Blur is a batteries-included, cross-platform CPU blur and shadow compositing library for the JUCE C++ framework.

Batteries-included means it aims to give you everything out of the box:

  • 👩‍🎨 Figma/CSS-accurate drop and inner shadows on paths
  • 🔠 Drop and Inner Text shadows
  • 💅🏼 Supports both filled and stroked paths
  • 🌇 ARGB image blurs
  • 🚀 Fast! (see benchmarks)
  • 🔎 Retina-friendly (context scale-aware)
  • 🍰 Trivial to layer multiple shadows
  • ⚙️ Behind-the-scenes multi-layer caching
  • 😎 Debug optimized for high quality of life
  • 🤖 Over 1000 correctness tests passing on macOS/windows
  • 🚂 Compatible down to macOS 10.13 (progressive speedups on recent versions)

The goal: modern vector interfaces in JUCE (100s of shadows) without having to resort to deprecated solutions with lower quality of life (looking at you, OpenGL on macOS!).

AudioPluginHost.-.2023-12-11.15-trimmed.mp4

Melatonin Blur provides a 10-30x speedup over using Stack Blur alone.

On macOS, it depends on the built-in Accelerate framework.

On Windows, it optionally depends on the Intel IPP library. If IPP is not present, it will fall back to a JUCE FloatVectorOperations implementation for single channel (shadows, etc) and Gin's Stack Blur for ARGB.

Interested in how the blurring works? I wrote an in-depth article about re-implementing Stack Blur 15+ times.

Installation

The docs have outgrown a README file, visit the new documentation

Usage

There's all the usage information you could want over at the official docs

Acknowledgements

  • Mars, for being my reliable rubber duck! Inner Shadow caching and compositing geometry broke my brain.
  • Roland Rabien for JUCE Stack Blur workhorse via Gin.
  • LukeM1 on the forums for figuring out the drawImageAt optimization.
  • Ecstasy on the Discord for the motivation and feedback around stroked paths and default constructors.