jogl
  1. jogl
  2. JOGL-331

Floating-point precision needed in TextRenderer

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: current
    • Fix Version/s: milestone 1
    • Component/s: jogl
    • Labels:
      None
    • Environment:

      Operating System: All
      Platform: PC

    • Issuezilla Id:
      331

      Description

      Patrick Murris from the NASA World Wind Java project has pointed out that for
      high-quality rendering of text it is necessary to use floating-point precision
      rather than integer precision. The Rectangle2D from getBounds() needs to not be
      rounded to an integer size, and draw() needs an overloading taking a
      floating-point x and y.

        Activity

        Hide
        kbr added a comment -

        More details from Patrick on related usage, which may inform changes to the
        Javadoc of the getBounds() method:

        "The trick to get the most accurate advance measurements is:
        1. avoid cumulating text chunks bounds width. They get rounded to int and errors
        sum up. Reevaluate all previous chunks in one getBounds() to eliminate
        cumulative errors.
        2. use the getBounds() rectangle x and y properties to compute advance for one
        chunk. Advance on x is bounds.getWidth() plus bounds.getX(). This way, leading
        spaces are almost correctly accounted for.

        This gives very acceptable results for word by word processing.

        However, the one limitating thing i see here is the rounding to int of all draw
        and getBounds coordinates. Allowing floats or doubles would ease the above point
        one."

        Show
        kbr added a comment - More details from Patrick on related usage, which may inform changes to the Javadoc of the getBounds() method: "The trick to get the most accurate advance measurements is: 1. avoid cumulating text chunks bounds width. They get rounded to int and errors sum up. Reevaluate all previous chunks in one getBounds() to eliminate cumulative errors. 2. use the getBounds() rectangle x and y properties to compute advance for one chunk. Advance on x is bounds.getWidth() plus bounds.getX(). This way, leading spaces are almost correctly accounted for. This gives very acceptable results for word by word processing. However, the one limitating thing i see here is the rounding to int of all draw and getBounds coordinates. Allowing floats or doubles would ease the above point one."

          People

          • Assignee:
            jogl-issues
            Reporter:
            kbr
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated: