jdk/src/java.desktop/share/classes/sun/java2d/pipe/AAShapePipe.java
author lbourges
Wed, 15 Jun 2016 21:43:39 +0200
changeset 39519 21bfc4452441
parent 36902 bb30d89aa00e
permissions -rw-r--r--
8159093: Fix coding conventions in Marlin renderer Summary: capital letters for constants and use rdrCtx.stats (field) Reviewed-by: flar, prr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
     2
 * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    23
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
package sun.java2d.pipe;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
import java.awt.BasicStroke;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
import java.awt.Rectangle;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
import java.awt.Shape;
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
    30
import java.awt.geom.Rectangle2D;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
import sun.awt.SunHints;
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    32
import sun.java2d.ReentrantContext;
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    33
import sun.java2d.ReentrantContextProvider;
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    34
import sun.java2d.ReentrantContextProviderTL;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
import sun.java2d.SunGraphics2D;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
/**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
 * This class is used to convert raw geometry into 8-bit alpha tiles
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
 * using an AATileGenerator for application by the next stage of
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
 * the pipeline.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
 * This class sets up the Generator and computes the alpha tiles
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
 * and then passes them on to a CompositePipe object for painting.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
 */
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    44
public final class AAShapePipe
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
    45
    implements ShapeDrawPipe, ParallelogramPipe
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
    46
{
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
    47
    static final RenderingEngine RDR_ENGINE = RenderingEngine.getInstance();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
    49
    // Per-thread TileState (~1K very small so do not use any Weak Reference)
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
    50
    private static final ReentrantContextProvider<TileState> TILE_STATE_PROVIDER =
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    51
            new ReentrantContextProviderTL<TileState>(
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    52
                    ReentrantContextProvider.REF_HARD)
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    53
            {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    54
                @Override
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    55
                protected TileState newContext() {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    56
                    return new TileState();
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    57
                }
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    58
            };
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
    59
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    60
    final CompositePipe outpipe;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
    public AAShapePipe(CompositePipe pipe) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
        outpipe = pipe;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    64
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    66
    @Override
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
    public void draw(SunGraphics2D sg, Shape s) {
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    68
        final BasicStroke bs;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
        if (sg.stroke instanceof BasicStroke) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    71
            bs = (BasicStroke) sg.stroke;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
            s = sg.stroke.createStrokedShape(s);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
            bs = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    75
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
        renderPath(sg, s, bs);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    80
    @Override
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
    public void fill(SunGraphics2D sg, Shape s) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
        renderPath(sg, s, null);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    85
    @Override
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
    86
    public void fillParallelogram(SunGraphics2D sg,
9653
6a1eff16874d 7043054: REGRESSION: JDK 7 b126 : Wrong userBounds in Paint.createContext()
flar
parents: 9035
diff changeset
    87
                                  double ux1, double uy1,
6a1eff16874d 7043054: REGRESSION: JDK 7 b126 : Wrong userBounds in Paint.createContext()
flar
parents: 9035
diff changeset
    88
                                  double ux2, double uy2,
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
    89
                                  double x, double y,
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
    90
                                  double dx1, double dy1,
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
    91
                                  double dx2, double dy2)
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
    92
    {
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
    93
        final TileState ts = TILE_STATE_PROVIDER.acquire();
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    94
        try {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    95
            final int[] abox = ts.abox;
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
    96
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    97
            final AATileGenerator aatg =
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
    98
                RDR_ENGINE.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, 0, 0,
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
    99
                                                sg.getCompClip(), abox);
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   100
            if (aatg != null) {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   101
                renderTiles(sg, ts.computeBBox(ux1, uy1, ux2, uy2),
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   102
                            aatg, abox, ts);
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   103
            }
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   104
        } finally {
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
   105
            TILE_STATE_PROVIDER.release(ts);
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   106
        }
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   107
    }
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   108
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   109
    @Override
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   110
    public void drawParallelogram(SunGraphics2D sg,
9653
6a1eff16874d 7043054: REGRESSION: JDK 7 b126 : Wrong userBounds in Paint.createContext()
flar
parents: 9035
diff changeset
   111
                                  double ux1, double uy1,
6a1eff16874d 7043054: REGRESSION: JDK 7 b126 : Wrong userBounds in Paint.createContext()
flar
parents: 9035
diff changeset
   112
                                  double ux2, double uy2,
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   113
                                  double x, double y,
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   114
                                  double dx1, double dy1,
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   115
                                  double dx2, double dy2,
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   116
                                  double lw1, double lw2)
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   117
    {
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
   118
        final TileState ts = TILE_STATE_PROVIDER.acquire();
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   119
        try {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   120
            final int[] abox = ts.abox;
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   121
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   122
            final AATileGenerator aatg =
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
   123
                RDR_ENGINE.getAATileGenerator(x, y, dx1, dy1, dx2, dy2, lw1,
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   124
                                                lw2, sg.getCompClip(), abox);
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   125
            if (aatg != null) {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   126
                // Note that bbox is of the original shape, not the wide path.
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   127
                // This is appropriate for handing to Paint methods...
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   128
                renderTiles(sg, ts.computeBBox(ux1, uy1, ux2, uy2),
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   129
                            aatg, abox, ts);
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   130
            }
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   131
        } finally {
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
   132
            TILE_STATE_PROVIDER.release(ts);
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   133
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   134
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   135
90ce3da70b43 Initial load
duke
parents:
diff changeset
   136
    public void renderPath(SunGraphics2D sg, Shape s, BasicStroke bs) {
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   137
        final boolean adjust = (bs != null &&
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   138
                          sg.strokeHint != SunHints.INTVAL_STROKE_PURE);
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   139
        final boolean thin = (sg.strokeState <= SunGraphics2D.STROKE_THINDASHED);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
   141
        final TileState ts = TILE_STATE_PROVIDER.acquire();
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   142
        try {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   143
            final int[] abox = ts.abox;
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   144
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   145
            final AATileGenerator aatg =
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
   146
                RDR_ENGINE.getAATileGenerator(s, sg.transform, sg.getCompClip(),
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   147
                                                bs, thin, adjust, abox);
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   148
            if (aatg != null) {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   149
                renderTiles(sg, s, aatg, abox, ts);
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   150
            }
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   151
        } finally {
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36902
diff changeset
   152
            TILE_STATE_PROVIDER.release(ts);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   153
        }
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   154
    }
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   155
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   156
    public void renderTiles(SunGraphics2D sg, Shape s,
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   157
                            final AATileGenerator aatg,
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   158
                            final int[] abox, final TileState ts)
7745
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   159
    {
ebd6382e93fd 6766342: Improve performance of Ductus rasterizer
flar
parents: 5506
diff changeset
   160
        Object context = null;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
        try {
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   162
            // reentrance: outpipe may also use AAShapePipe:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   163
            context = outpipe.startSequence(sg, s,
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   164
                                            ts.computeDevBox(abox),
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   165
                                            abox);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   166
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   167
            // copy of int[] abox as local variables for performance:
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   168
            final int x0 = abox[0];
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   169
            final int y0 = abox[1];
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   170
            final int x1 = abox[2];
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   171
            final int y1 = abox[3];
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   172
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   173
            final int tw = aatg.getTileWidth();
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   174
            final int th = aatg.getTileHeight();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   175
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   176
            // get tile from thread local storage:
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   177
            final byte[] alpha = ts.getAlphaTile(tw * th);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   178
            byte[] atile;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   179
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   180
            for (int y = y0; y < y1; y += th) {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   181
                final int h = Math.min(th, y1 - y);
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   182
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   183
                for (int x = x0; x < x1; x += tw) {
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   184
                    final int w = Math.min(tw, x1 - x);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   185
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   186
                    final int a = aatg.getTypicalAlpha();
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   187
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   188
                    if (a == 0x00 || !outpipe.needTile(context, x, y, w, h)) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   189
                        aatg.nextTile();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   190
                        outpipe.skipTile(context, x, y);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   191
                        continue;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   192
                    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   193
                    if (a == 0xff) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   194
                        atile = null;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   195
                        aatg.nextTile();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   196
                    } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   197
                        atile = alpha;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   198
                        aatg.getAlpha(alpha, 0, tw);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   199
                    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   200
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   201
                    outpipe.renderPathTile(context, atile, 0, tw, x, y, w, h);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   202
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   203
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   204
        } finally {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   205
            aatg.dispose();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   206
            if (context != null) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   207
                outpipe.endSequence(context);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   208
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   209
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   210
    }
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   211
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   212
    // Tile state used by AAShapePipe
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 34419
diff changeset
   213
    static final class TileState extends ReentrantContext {
34419
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   214
        // cached tile (32 x 32 tile by default)
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   215
        private byte[] theTile = new byte[32 * 32];
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   216
        // dirty aabox array
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   217
        final int[] abox = new int[4];
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   218
        // dirty bbox rectangle
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   219
        private final Rectangle dev = new Rectangle();
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   220
        // dirty bbox rectangle2D.Double
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   221
        private final Rectangle2D.Double bbox2D = new Rectangle2D.Double();
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   222
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   223
        byte[] getAlphaTile(int len) {
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   224
            byte[] t = theTile;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   225
            if (t.length < len) {
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   226
                // create a larger tile and may free current theTile (too small)
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   227
                theTile = t = new byte[len];
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   228
            }
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   229
            return t;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   230
        }
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   231
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   232
        Rectangle computeDevBox(final int[] abox) {
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   233
            final Rectangle box = this.dev;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   234
            box.x = abox[0];
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   235
            box.y = abox[1];
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   236
            box.width = abox[2] - abox[0];
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   237
            box.height = abox[3] - abox[1];
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   238
            return box;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   239
        }
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   240
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   241
        Rectangle2D computeBBox(double ux1, double uy1,
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   242
                                double ux2, double uy2)
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   243
        {
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   244
            if ((ux2 -= ux1) < 0.0) {
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   245
                ux1 += ux2;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   246
                ux2 = -ux2;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   247
            }
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   248
            if ((uy2 -= uy1) < 0.0) {
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   249
                uy1 += uy2;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   250
                uy2 = -uy2;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   251
            }
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   252
            final Rectangle2D.Double box = this.bbox2D;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   253
            box.x = ux1;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   254
            box.y = uy1;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   255
            box.width = ux2;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   256
            box.height = uy2;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   257
            return box;
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   258
        }
14108cfd0823 8143849: Integrate Marlin renderer per JEP 265
lbourges
parents: 34418
diff changeset
   259
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   260
}