< prev index next >

modules/javafx.graphics/src/main/java/com/sun/marlin/DRenderer.java

Print this page




  26 package com.sun.marlin;
  27 
  28 import static com.sun.marlin.OffHeapArray.SIZE_INT;
  29 import jdk.internal.misc.Unsafe;
  30 
  31 public final class DRenderer implements DMarlinRenderer, MarlinConst {
  32 
  33     static final boolean DISABLE_RENDER = false;
  34 
  35     private static final int ALL_BUT_LSB = 0xFFFFFFFE;
  36     private static final int ERR_STEP_MAX = 0x7FFFFFFF; // = 2^31 - 1
  37 
  38     private static final double POWER_2_TO_32 = 0x1.0p32d;
  39 
  40     // use double to make tosubpix methods faster (no int to double conversion)
  41     static final double SUBPIXEL_SCALE_X = SUBPIXEL_POSITIONS_X;
  42     static final double SUBPIXEL_SCALE_Y = SUBPIXEL_POSITIONS_Y;
  43     static final int SUBPIXEL_MASK_X = SUBPIXEL_POSITIONS_X - 1;
  44     static final int SUBPIXEL_MASK_Y = SUBPIXEL_POSITIONS_Y - 1;
  45 



  46     // common to all types of input path segments.
  47     // OFFSET as bytes
  48     // only integer values:
  49     public static final long OFF_CURX_OR  = 0;
  50     public static final long OFF_ERROR    = OFF_CURX_OR  + SIZE_INT;
  51     public static final long OFF_BUMP_X   = OFF_ERROR    + SIZE_INT;
  52     public static final long OFF_BUMP_ERR = OFF_BUMP_X   + SIZE_INT;
  53     public static final long OFF_NEXT     = OFF_BUMP_ERR + SIZE_INT;
  54     public static final long OFF_YMAX     = OFF_NEXT     + SIZE_INT;
  55 
  56     // size of one edge in bytes
  57     public static final int SIZEOF_EDGE_BYTES = (int)(OFF_YMAX + SIZE_INT);
  58 
  59     // curve break into lines
  60     // cubic error in subpixels to decrement step
  61     private static final double CUB_DEC_ERR_SUBPIX
  62         = MarlinProperties.getCubicDecD2() * (NORM_SUBPIXELS / 8.0d); // 1 pixel
  63     // cubic error in subpixels to increment step
  64     private static final double CUB_INC_ERR_SUBPIX
  65         = MarlinProperties.getCubicIncD1() * (NORM_SUBPIXELS / 8.0d); // 0.4 pixel


 651     public void moveTo(double pix_x0, double pix_y0) {
 652         closePath();
 653         final double sx = tosubpixx(pix_x0);
 654         final double sy = tosubpixy(pix_y0);
 655         this.sx0 = sx;
 656         this.sy0 = sy;
 657         this.x0 = sx;
 658         this.y0 = sy;
 659     }
 660 
 661     @Override
 662     public void lineTo(double pix_x1, double pix_y1) {
 663         final double x1 = tosubpixx(pix_x1);
 664         final double y1 = tosubpixy(pix_y1);
 665         addLine(x0, y0, x1, y1);
 666         x0 = x1;
 667         y0 = y1;
 668     }
 669 
 670     @Override
 671     public void curveTo(double x1, double y1,
 672             double x2, double y2,
 673             double x3, double y3)
 674     {
 675         final double xe = tosubpixx(x3);
 676         final double ye = tosubpixy(y3);
 677         curve.set(x0, y0, tosubpixx(x1), tosubpixy(y1),
 678                           tosubpixx(x2), tosubpixy(y2), xe, ye);
 679         curveBreakIntoLinesAndAdd(x0, y0, curve, xe, ye);
 680         x0 = xe;
 681         y0 = ye;
 682     }
 683 
 684     @Override
 685     public void quadTo(double x1, double y1, double x2, double y2) {
 686         final double xe = tosubpixx(x2);
 687         final double ye = tosubpixy(y2);
 688         curve.set(x0, y0, tosubpixx(x1), tosubpixy(y1), xe, ye);


 689         quadBreakIntoLinesAndAdd(x0, y0, curve, xe, ye);
 690         x0 = xe;
 691         y0 = ye;
 692     }
 693 
 694     @Override
 695     public void closePath() {
 696         addLine(x0, y0, sx0, sy0);
 697         x0 = sx0;
 698         y0 = sy0;


 699     }
 700 
 701     @Override
 702     public void pathDone() {
 703         closePath();
 704 
 705         // call endRendering() to determine the boundaries:
 706         endRendering();
 707     }
 708 
 709     private void _endRendering(final int ymin, final int ymax,
 710                                final MarlinAlphaConsumer ac)
 711     {
 712         if (DISABLE_RENDER) {
 713             return;
 714         }
 715 
 716         // Get X bounds as true pixel boundaries to compute correct pixel coverage:
 717         final int bboxx0 = bbox_spminX;
 718         final int bboxx1 = bbox_spmaxX;


1531     int bboxX0, bboxX1, bboxY0, bboxY1;
1532 
1533     @Override
1534     public int getOutpixMinX() {
1535         return bboxX0;
1536     }
1537 
1538     @Override
1539     public int getOutpixMaxX() {
1540         return bboxX1;
1541     }
1542 
1543     @Override
1544     public int getOutpixMinY() {
1545         return bboxY0;
1546     }
1547 
1548     @Override
1549     public int getOutpixMaxY() {
1550         return bboxY1;










1551     }
1552 }


  26 package com.sun.marlin;
  27 
  28 import static com.sun.marlin.OffHeapArray.SIZE_INT;
  29 import jdk.internal.misc.Unsafe;
  30 
  31 public final class DRenderer implements DMarlinRenderer, MarlinConst {
  32 
  33     static final boolean DISABLE_RENDER = false;
  34 
  35     private static final int ALL_BUT_LSB = 0xFFFFFFFE;
  36     private static final int ERR_STEP_MAX = 0x7FFFFFFF; // = 2^31 - 1
  37 
  38     private static final double POWER_2_TO_32 = 0x1.0p32d;
  39 
  40     // use double to make tosubpix methods faster (no int to double conversion)
  41     static final double SUBPIXEL_SCALE_X = SUBPIXEL_POSITIONS_X;
  42     static final double SUBPIXEL_SCALE_Y = SUBPIXEL_POSITIONS_Y;
  43     static final int SUBPIXEL_MASK_X = SUBPIXEL_POSITIONS_X - 1;
  44     static final int SUBPIXEL_MASK_Y = SUBPIXEL_POSITIONS_Y - 1;
  45 
  46     private static final double RDR_OFFSET_X = 0.501d / SUBPIXEL_SCALE_X;
  47     private static final double RDR_OFFSET_Y = 0.501d / SUBPIXEL_SCALE_Y;
  48 
  49     // common to all types of input path segments.
  50     // OFFSET as bytes
  51     // only integer values:
  52     public static final long OFF_CURX_OR  = 0;
  53     public static final long OFF_ERROR    = OFF_CURX_OR  + SIZE_INT;
  54     public static final long OFF_BUMP_X   = OFF_ERROR    + SIZE_INT;
  55     public static final long OFF_BUMP_ERR = OFF_BUMP_X   + SIZE_INT;
  56     public static final long OFF_NEXT     = OFF_BUMP_ERR + SIZE_INT;
  57     public static final long OFF_YMAX     = OFF_NEXT     + SIZE_INT;
  58 
  59     // size of one edge in bytes
  60     public static final int SIZEOF_EDGE_BYTES = (int)(OFF_YMAX + SIZE_INT);
  61 
  62     // curve break into lines
  63     // cubic error in subpixels to decrement step
  64     private static final double CUB_DEC_ERR_SUBPIX
  65         = MarlinProperties.getCubicDecD2() * (NORM_SUBPIXELS / 8.0d); // 1 pixel
  66     // cubic error in subpixels to increment step
  67     private static final double CUB_INC_ERR_SUBPIX
  68         = MarlinProperties.getCubicIncD1() * (NORM_SUBPIXELS / 8.0d); // 0.4 pixel


 654     public void moveTo(double pix_x0, double pix_y0) {
 655         closePath();
 656         final double sx = tosubpixx(pix_x0);
 657         final double sy = tosubpixy(pix_y0);
 658         this.sx0 = sx;
 659         this.sy0 = sy;
 660         this.x0 = sx;
 661         this.y0 = sy;
 662     }
 663 
 664     @Override
 665     public void lineTo(double pix_x1, double pix_y1) {
 666         final double x1 = tosubpixx(pix_x1);
 667         final double y1 = tosubpixy(pix_y1);
 668         addLine(x0, y0, x1, y1);
 669         x0 = x1;
 670         y0 = y1;
 671     }
 672 
 673     @Override
 674     public void curveTo(double pix_x1, double pix_y1,
 675                         double pix_x2, double pix_y2,
 676                         double pix_x3, double pix_y3)
 677     {
 678         final double xe = tosubpixx(pix_x3);
 679         final double ye = tosubpixy(pix_y3);
 680         curve.set(x0, y0, tosubpixx(pix_x1), tosubpixy(pix_y1),
 681                   tosubpixx(pix_x2), tosubpixy(pix_y2), xe, ye);
 682         curveBreakIntoLinesAndAdd(x0, y0, curve, xe, ye);
 683         x0 = xe;
 684         y0 = ye;
 685     }
 686 
 687     @Override
 688     public void quadTo(double pix_x1, double pix_y1,
 689                        double pix_x2, double pix_y2)
 690     {
 691         final double xe = tosubpixx(pix_x2);
 692         final double ye = tosubpixy(pix_y2);
 693         curve.set(x0, y0, tosubpixx(pix_x1), tosubpixy(pix_y1), xe, ye);
 694         quadBreakIntoLinesAndAdd(x0, y0, curve, xe, ye);
 695         x0 = xe;
 696         y0 = ye;
 697     }
 698 
 699     @Override
 700     public void closePath() {
 701         if (x0 != sx0 || y0 != sy0) {
 702             addLine(x0, y0, sx0, sy0);
 703             x0 = sx0;
 704             y0 = sy0;
 705         }
 706     }
 707 
 708     @Override
 709     public void pathDone() {
 710         closePath();
 711 
 712         // call endRendering() to determine the boundaries:
 713         endRendering();
 714     }
 715 
 716     private void _endRendering(final int ymin, final int ymax,
 717                                final MarlinAlphaConsumer ac)
 718     {
 719         if (DISABLE_RENDER) {
 720             return;
 721         }
 722 
 723         // Get X bounds as true pixel boundaries to compute correct pixel coverage:
 724         final int bboxx0 = bbox_spminX;
 725         final int bboxx1 = bbox_spmaxX;


1538     int bboxX0, bboxX1, bboxY0, bboxY1;
1539 
1540     @Override
1541     public int getOutpixMinX() {
1542         return bboxX0;
1543     }
1544 
1545     @Override
1546     public int getOutpixMaxX() {
1547         return bboxX1;
1548     }
1549 
1550     @Override
1551     public int getOutpixMinY() {
1552         return bboxY0;
1553     }
1554 
1555     @Override
1556     public int getOutpixMaxY() {
1557         return bboxY1;
1558     }
1559 
1560     @Override
1561     public double getOffsetX() {
1562         return RDR_OFFSET_X;
1563     }
1564 
1565     @Override
1566     public double getOffsetY() {
1567         return RDR_OFFSET_Y;
1568     }
1569 }
< prev index next >