Do average-color order-independent transparency, per the nvidia paper.  Split indices (in the tree Build) into opaque and partially-alpha, to render separately.  Add a param to pushTri and pushQuad to pick which list to add the indices to.  Make all trunk and branch indices opaque, and the foliage and vines alpha.  Add a couple new framebuffers, and a few new shader programs, to handle the different stages of rendering.  Hook up new attributes and uniforms.  Split buffers to match opaque versus alpha.  Create new 1024x1024 textures to hold intermediate values.  Explicitly ask for a stencil buffer on the GL context (not sure if this is needed, but whatever).  Explicitly set the depth and stencil clear values.  Set up blending to "blend" with GL_ONE/GL_ONE, and enable the stencil test.  Clear stencil buffers alongside color/depth.  Set up the framebuffers -- bind to the same renderbuffer for depth/stencil, but different textures for color0.  Turn off the stencil op and function when rendering the opaque indices, and the depth mask (but not the depth test) when rendering alpha indices.  Add debug code to render intermediate textures to a separate canvas.  Set up temporary buffers forpoints and UV coordinates.  Bind framebuffers at appropriate times.  Split second-stage rendering into a pass per stencil value, up to 4, then a pass for "everything else" approximating the total layer count.  Third-stage rendering is one pass.  Still one problem: the depth buffer isn't shared between the opaque and alpha geometry passes.  (Sigh.  Oh well, fix it later.)