Fix up the average-color alpha shaders on alpha==1.0 fragments.  Use the "discard" operation in the fragment shader to render all the alpha==1.0 fragments in the same pass as the geometry that's all-fully-opaque, and drop anything that's partially visible.  (Use discard when rendering the alpha geometry as well, to drop fully-opaque fragments there.)  Let the depth test and normal blending do their jobs for those fragments, and only use the nvidia paper's algorithm on *fragments* that are partially-transparent, instead of on *polygons* that are.  Fixes up the too-high brightness on points where multiple fragments overlap but the frontmost is opaque (so the others should be dropped by the depth test actually).  Biggest change is splitting the geometry-rendering shader programs into two (the vertex shader is the same, but the fragment shader is different).  Adds another level of object to some of the attributes in the "attributes" structure.  Drops a use of gl.getParameter(gl.CURRENT_PROGRAM) now that all programs are in global variables.