The code starts with a single agent and then iterates with this agent. Each iteration the agent can split into one or more child agents, die, change direction, grow a leaf, the positions are then merged into a buffer geometry, creating a 3D tree.
Each initial agent has a set of parameters that will define the subsequent behaviour of the tree's growth, it's leaves and it's overall shapes.
The "growing" is animated by moving the gl drawRange on each frame, giving the impression of the tree growing.
Hopefully I don't need to tell you that these trees don't really exist in the real world?
You can view the full version here.