     @prog.set_uniform('u_canvas_size', 'vec2', [trans.width, trans.height])
     @prog.set_uniform('u_offset', 'vec2', [trans.dx - baked_offset[0], trans.dy - baked_offset[1]])
     @prog.set_uniform('u_scale', 'vec2', [trans.sx, trans.sy])
-    
+
     # Select buffers from main glyph
     # (which may be this glyph but maybe not if this is a (non)selection glyph)
     @prog.set_attribute('a_x', 'float', [mainGlGlyph.vbo_x, 0, 0])

      @prog.set_uniform('u_offset', 'vec2', [trans.dx - baked_offset[0], trans.dy - baked_offset[1]])
      @prog.set_uniform('u_scale_aspect', 'vec2', [sx, sy])
      @prog.set_uniform('u_scale_length', 'float', [scale_length])
      
      if @I_triangles.length < 65535
        # Data is small enough to draw in one pass
        @index_buffer.set_size(@I_triangles.length*2)

    # The main glyph has the data, *this* glyph has the visuals.
    mainGlGlyph = mainGlyph.glglyph
    nvertices = mainGlGlyph.nvertices

    # Upload data if we must. Only happens for main glyph.
    if mainGlGlyph.data_changed
      mainGlGlyph._baked_offset = [trans.dx, trans.dy]  # float32 precision workaround; used in _set_data() and below
      mainGlGlyph._set_data(nvertices)
      mainGlGlyph.data_changed = false
    else if @glyph._radius? and (trans.sx != @last_trans.sx or trans.sy != @last_trans.sy)
      # Keep screen radius up-to-date for circle glyph. Only happens when a radius is given
      @last_trans = trans
      @vbo_s.set_data(0, new Float32Array((s*2 for s in @glyph.sradius)))
