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 developer.blender.org 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.
- Libs for Functions (quite experimental still): Small Stack, MemPool, Lazy Initialization Macro, ListBase Wrapper
- Functions: Type Inferencer Interface, Type Relations, Gather function dependencies
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 Quaternion.dot(other).
- Reviewed D4697: Incorrect poll methods in node category classes.