private void renderBubble(
    Rendering rendering, Bubble bubble,
    Vec3D flatPoint, boolean fromRight
  ) {
    //
    //  Some of this could be moved to the constants section-
    final float
      x = flatPoint.x + bubble.xoff,
      y = flatPoint.y + bubble.yoff,
      //TW = BUBBLE_TEX.xdim(),
      //TH = BUBBLE_TEX.ydim(),
      //
      //  In the case of bubble from the right, we just flip U values-
      MIN_U = fromRight ? 1 : 0,
      MAX_U = fromRight ? 0 : 1,
      CAP_LU = fromRight ? 0.75f : 0.25f,
      CAP_RU = fromRight ? 0.25f : 0.75f,
      BOT_V = 0,
      TOP_V = BUBBLE_TEX.maxV(),
      
      //pad = 5,
      texHigh = (LINE_HIGH + 10) * 1.5f,
      minY = y - (5 + (texHigh / 3)),
      maxY = minY + texHigh,
      
      texWide = 128 * 40f / texHigh,  //True width/height for the texture.
      minX = x - 10,
      maxX = x + Math.max(bubble.width, 64) + 10,
      capXL = minX + (texWide * 0.25f),
      capXR = maxX - (texWide * 0.25f) ;
    //
    //  Render the three segments of the bubble-
    GL11.glColor4f(1, 1, 1, Math.min(1, bubble.alpha)) ;
    UINode.drawQuad(
      minX , minY,
      capXL, maxY,
      MIN_U, BOT_V, CAP_LU, TOP_V,
      flatPoint.z + bubble.yoff
    ) ;
    UINode.drawQuad(
      capXL, minY,
      capXR, maxY,
      CAP_LU, BOT_V, CAP_RU, TOP_V,
      flatPoint.z + bubble.yoff
    ) ;
    UINode.drawQuad(
      capXR, minY,
      maxX , maxY,
      CAP_RU, BOT_V, MAX_U, TOP_V,
      flatPoint.z + bubble.yoff
    ) ;
  }