paint.net 4.3 alpha (build 7916)

As it turns out, the plugin loading error that @AndrewDavid reported with build 7906 was caused by a much deeper issue in the plugin loading system. I’ve significantly rewritten how plugins are loaded and the result is a much more robust and performant system.

I’ve also greatly optimized the memory usage when custom shapes are installed. Previously, the declarative XAML would result in possibly hundreds of thousands of small boxed objects on the heap (floats, points, etc.) due to how the WPF-based object model. Now the shapes are compiled to a Direct2D-compatible format, reducing the memory used and the number of objects littering the heap (instead of 100’s of thousands, now maybe just a few thousand). I was actually seeing jumps and spikes in paintbrush drawings, presumably due to added GC stress, and this now seems to be eliminated.

Lastly, you can now specify additional directories to load plugins from, which means you can use something like OneDrive to host your plugins which will then be sync’d to all of your systems. For security reasons you must edit some registry entries to enable this feature. See here for more details.

I think we’re finally in the home stretch for 4.3!

Get the update

To get this update, make sure you have "Also check for pre-release (beta) versions" enabled in Settings, and then click on the Check Now button. (Unfortunately alpha/beta releases are not currently available for the Microsoft Store version of the app).

image.png

For direct download links, please visit the forum.

Changes since 4.3 alpha build 7906:

  • New: Additional directories can now be specified for plugin discovery, which enables the use of OneDrive for storing plugins. See here for more info: https://forums.getpaint.net/topic/118583-feature-request-set-custom-app-files-plugins-folder/?do=findComment&comment=586013
    • Note that this does not work with the portable version of the app, but you can install plugins next to the app so it isn’t necessary.
  • Optimized memory use when custom shapes are installed so they don’t litter the heap with hundreds of thousands of boxed value types (e.g. floats and points)
  • Fixed a whole bunch of issues related to plugin loading, such as random OptionBasedLibrary-based plugins not loading (race condition in the loader)
  • Optimized the performance of plugin loading to prioritize "expensive" plugins so they don’t extend the critical path any more than necessary
  • Changed: FileType.IsReflexive() is now deprecated via [Obsolete], and is no longer honored. However, the Save Configuration dialog will no longer try to generate previews for FileTypes that do not specify any file extensions for loading, which is what this method was mostly being used for.

Enjoy!