Week 15 + Holidays: January 7 - 11

  • Fixed Bugs: T60342, T60338, T60327, T60282, T60291
  • Started working on a new project called derivedrepo. It's purpose is to generate a new repository based on some (git) repository using some derivation function. The primary goal is keep a repository of compiled Blender builds to make bisecting more efficient. However, the project tries to solve a more general problem.
  • Started working on nodes in Blender. So far I mostly implemented a node compiler that uses LLVM as backend. Will write more documentation this week. The code is currently in two separate repositories on Github: Blender Core and UI.

Week 16: January 14 - 18

  • Testing new ArrayBase data structure as a replacement for ListBase (linked lists should not be used when it can be avoided...) (D4225).
  • Fixed Bugs: T60591, T60383, T60304
  • Unfinished fixes: D4221
  • Started working on making vertices active using box/circle/lasso select, but stopped for UX reasons (D4217).
  • Wrote a wiki page for the Everything Nodes project.

Week 17: January 21 - 25

  • Fixed Bugs: rBA2eb519c, T60816, T58502, T59145, T60791, T60126, T60709
  • Wrote a small addon for the Spring team to copy drivers (Github).
  • Tried to help some new developers to do their first code contribution (Twitter -> D4258, D4260, D4261).
  • Tested a generic interface for function calls. Also learned a lot about C++ this week. Currently, the code is still on Github, but will push the branch to soonish.

Week 18: January 28 - 01

  • Created an initial proposal for a Python Tool API. Many things have to be discussed still (T61105).
  • Removed deprecated ghosting code (D4271).
  • Fix T60996: Dyntopo flood fill fails due to missing ob->imat
  • Fix T60067: some modifiers don't use shape keys correctly
  • Fix T60226: Inset not working well on very small faces
  • Fix: allow curve of driver to be evaluated individually (f4c0dac).
  • Fixed some addons that were broken, because the object color does have an alpha value now (1ceaca7, 4e8ddec, 04dc7f2).
  • Fix: allow removal of addons that are symlinked (e6ba760).
  • Reviewed and merged: 9552d4b, d473d5b, 5348919
  • Started to update the bgl docs (D4280).
  • Committed to the Blender manual repository for the first time (4563).

Week 19: February 04 - 08

  • Fix T61275: recognize values with decimal separator in svg importer
  • Investigated D4312.
  • Cleanup: Remove deprecated ghosting code (4547815).
  • Fix T60935: More numerically stable distance to ray computation.
  • Some improvements/fixes for the Object Scatter addon (f40ec5d, 8e3a51e, 6f0deb3).
  • Don't split groups by default when importing .obj files (899c287).


Besides these things I also continued to work on the functions project. I'm spending quite some time learning how to do certain things in C++ (which I did not use for a serious project yet). I investigated/implemented the following:

  • Managing shared ownership over language boundaries.
  • Using dynamic composition instead of inheritance for some types.
  • How to use const so that it does not get in the way.

I also worked on some data structures that I want to work with. I put those into BLI for now. Feels like a good place for Blenders own C++ data structures. Most of them also have some unit tests already.

  • SmallVector<T>: Similar to std::vector, just that it does not have to allocate memory when it is small.
  • SmallSet<T>: Build on top of SmallVector but supports different operations.
  • SmallMap<K, V>: Similar to SmallSet.
  • SmallSetVector<T>: An vector that supports efficient membership testing.
  • Composition: Can be used in other objects to extend them dynamically. In my case I use it to have generic type and function objects that can be extended with backend specific information.
  • RefCounter<T>: Generic object that wraps another object and extends it with an atomic reference counter.
  • Shared<T>: Similar to std::shared_ptr but wraps a RefCounter object. Having it allows automatic shared ownership within C++, but still makes it possible to pass the RefCounter to C code.

Furthermore, I added a new node tree type, but it doesn't really do anything yet. I hope I'll get to that point next week.

Week 20: February 11 - 15

  • Make marker lines in sequencer and graph editor optional (D4348).
  • Tracked down some bugs I experienced when having references to node trees in a modifier. They were caused by user count problems of nodes (T61506, T61515). The bugs were fixed by Bastien.
  • Fix T61430: invoke_popup() does not respect ui scale.


I took two days off.

Week 21: February 18 - 22

  • Fix T61791: Motion path step is not taken into account
  • Fix T61702: obmat used incorrectly when calculating constant detail size
  • Fix T61707: Use id attribute to initialize object and curve names when importing .svg.
  • Fix T61666: missing NULL_UNIT that stops iteration over units.
  • FCurves: Remember active fcurve when selecting other bone (c598ad9).
  • Reviewed D4320: Port "Import BrushSet" addon to Blender 2.8.
  • Committed marker line patch from last week (3b3eba6).


  • Made some nodes a bit more generic (input/output/math).
  • Added possibility to use a generated function in the Displace modifier to calculate vertex weights.
  • Added a new driver variable that can evaluate a function (and also set-ups dependencies mostly correct).

Week 22: February 25 - 01

  • Fix T62050: Remove non-persistent timers in load-pre callback.
  • Fix T61994: Crash when box selecting instances.
  • Fix T61827: Operator align.selected2xyz was very slow.
  • Fix T61875: Wrong description of normalize node in manual.
  • Fix T61919: Rename "Smooth Vertex" -> "Smooth Vertices"
  • UI: Show marker lines in remaining animation spaces (d541430).
  • Reviewed D4401: Create new temperature unit.


  • Gave a presentation about Everything Nodes in the Studio.
  • Initial LLVM backend.
  • Major file structure cleanup.

Week 23: March 04 - 08

  • Fix T62319: Changing keyframe properties does not trigger update.
  • Fix T62305: Unconnected group vector inputs are mapped incorrectly.
  • Fix T61671: Too strong too dark text shadow in Blender Light theme.
  • Fix T61761: Randomize Transform is an object mode operator.
  • Fix T62112: Wrong curve face count.
  • Fix T62208: Constant detail picker not taking object scale into account.
  • Fix T62163: Duplicating particle system results in crash.
  • Fix T62202: Circle select does not work on hair points.
  • Refactor building the draw string for floats and ints (d617466).
  • Patch that allows displaying factors as percentages (D4462).
  • Found cause for T62210. Unfortunately applied wrong fix.
  • Went over old bug reports and closed 40+ that had too little information to reproduce the issue.


  • Mostly cleanup and small refactorings.
  • Further experiment with how to manage shared ownership.
  • Build LLVM IR for a function graph.
  • Allocate Tuple objects on the stack in C and LLVM IR.
  • Simplify node creation with automatic registration and automatic search menu.
  • New Function Points modifier that uses a function which outputs a list. This is mostly for testing purposes for non-trivial data types.
  • New "Append to List", "Get List Element" and "Combine Lists" node. They only work with Float Lists for now.

Week 24: March 11 - 15

  • Fix truncated text errors (T61300, T62594, T62678).
  • Fix T62614: Copy eevee settings when scene is copied.
  • Fix T58668: Misaligned text when editing multiple values.
  • Fix T61253: Wrong syntax highlighting when @ is used for multiplication.
  • Fix T62059: Driver not updating in Color Ramp.
  • Fix T59928: 'Radius' option does nothing when adding light probe.
  • New Option to display factors as percentages (107c94c3).
  • Remove functions from bgl docs, that don't exist anymore (D4280).
  • Produced a video showing my bug fixing process (YouTube).


Tried to find the right abstractions to allow for more complex socket declarations in nodes. I have a plan now, but still has to be implemented correctly. Examples for behaviors that should be supported:

  • Nodes that operate on lists adapt automatically based on what is connected.
  • Vectorized nodes that can switch between accepting lists and single values automatically.
  • Sockets that can accept any data type, but is still statically typed.
  • Variadic nodes that allow a dynamic amount of sockets (e.g. function input/output, but this is useful in many nodes).

Week 25: March 18 - 22

  • Fix T62587: Particle instances Use Count node saved correctly.
  • Fix T62636: Overlapping scrollbar in driver editor.
  • Fix T61226: Make hair editing (more?) thread safe.
  • Fix T62558: Certain IES file causes crash.
  • Fix T62758: Hair curves with UV mapped textures renders wrong.
  • Fix T62711: Incorrect motion path update.
  • Fix T62678: Better glyph clipping test.
  • Fix T62808: Hair shape cut crash.
  • D4553: Wrong user count after changing gpencil material.
  • D4563: Do not show full action range.
  • D4566: Incorrect context when selecting particles.


  • Unified socket declaration system.
  • More specialized automatic type inferencer.
  • New Pack List node (replaces "Append to List" and "Combine Lists").
  • Initial support for calling "subfunctions".
  • Custom search terms for nodes.
  • Initial body type for lazy input evaluation.
  • New Boolean type.
  • New Switch node that makes use of lazy input evaluation.

Week 26: March 25 - 29

  • Fix T62776: Face maps are initialized incorrectly.
  • Fix T62536: Incorrect context when selecting particles.
  • Fix T62958: Improve exponential easing formula.
  • Fix T62955: Missing panels in workbench engine.
  • Fix T62935: Missing tag when copying constraints.
  • Fix T62901: Bad handling of missing addon category.
  • Fix T63040: Resizing node has offset.
  • Fix T63015: Crash when using circle select tool in lattice edit mode.
  • Fix T63032: Increase camera properties precision in UI.
  • Fix idnames in addons after recent change (0f2207e).


  • Experimental lazy fgraph evaluation.
  • Manage execution stack and keep track of where functions come from.
  • Initial problems panel in node editor.
  • Use Blender's guarded allocator in more places.
  • Initial multipool allocator structure.
  • Wrap LLVM's IRBuilder to allow for cleaner code.
  • Utility functions to optimize and print generated code.
  • Refactor node declaration system.
  • Wrote some technical documentation for the stuff I've been working on in the last couple of weeks. Some topics are still missing, but that should give a good overview of the general architecture as it is right now.

Week 27: April 01 - 05

  • Fix T61830: Remove option to add new keymap item in search mode.
  • Fix T63256: Make Dupli Face was broken since there are collections.
  • Fix T60891: bgl docs still include deprecated opengl functions.
  • Fix T63000: Don't use original file name for autosave.
  • Started implementing a proposal for an Animation Editor Scrubbing Area (D4654).
  • Reviewed D4648: Fix T63227: import vertex colors from .ply file without alpha.
  • Reviewed D4601: Interface: New region type 'Footer', used by text editor.
  • Reviewed D4649: Cleanup: Replace deprecated finite with isfinite.
  • Reviewed D4479: Remember the last display mode in File Browser.
  • Reviewed D4629: Fix T62939: Incorrect cursor position when exiting UI slider.
  • Reviewed D4611: UI: Fix odd behavior in region sizing, simplify code.
  • Reviewed D4617: UI: Collapsed nodes have the same width as uncollapsed nodes.


  • Implement and use actual hash map/set instead of using linear search.
  • Support for vectorized nodes in the UI.
  • Generic automatic vectorization of functions.
  • New Vector Math node.
  • Splitup C API code into multiple files.
  • More robust node tree update after changes.
  • Simple cache to not build the same IR multiple times per module.
  • Support for reroute nodes.
  • Improve UI of Pack List node.
  • Simple operators to create function trees from modifier.

Week 28: April 08 - 12

This week was the "Homestretch Workshop" week, therefore there were a lot of meetings and less time for actual coding work.

  • UI: Do not show full action range (14e1a4e).
  • Refactor View2D number drawing (D4681).
  • Reviewed D4667: Fix add_search node operator to show custom nodes.
  • Reviewed D4479: Remember the last display mode in File Browser.


  • Implement MultiMap and ArrayRef data structure.
  • Experimented with some lazy non-recursive evaluation methods, but this still needs more work.
  • New Float Range node.

Week 29: April 15 - 19

  • Refactor View2D number drawing (7fdffd7).
  • Refactor boundbox handling of event handlers (D4705).
  • Refactor storage usage during fcurve modifier evaluation (81ce380).
  • Avoid autosave name collisions (5461a68).
  • Fix T63673: Wrong API documentation for
  • Reviewed D4697: Incorrect poll methods in node category classes.