author | malenkov |
Tue, 29 Oct 2013 17:01:06 +0400 | |
changeset 21278 | ef8a3a2a72f2 |
parent 14330 | e4cb78065603 |
child 23010 | 6dadb192ad81 |
permissions | -rw-r--r-- |
5579
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
1 |
/* |
6374
e214162c907e
6982137: Rebranding pass 2 - missed copyright changes
ohair
parents:
5579
diff
changeset
|
2 |
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. |
5579
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
4 |
* |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
6374
e214162c907e
6982137: Rebranding pass 2 - missed copyright changes
ohair
parents:
5579
diff
changeset
|
7 |
* published by the Free Software Foundation. Oracle designates this |
5579
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
8 |
* particular file as subject to the "Classpath" exception as provided |
6374
e214162c907e
6982137: Rebranding pass 2 - missed copyright changes
ohair
parents:
5579
diff
changeset
|
9 |
* by Oracle in the LICENSE file that accompanied this code. |
5579
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
10 |
* |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
15 |
* accompanied this code). |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
16 |
* |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
17 |
* You should have received a copy of the GNU General Public License version |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
20 |
* |
6374
e214162c907e
6982137: Rebranding pass 2 - missed copyright changes
ohair
parents:
5579
diff
changeset
|
21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
e214162c907e
6982137: Rebranding pass 2 - missed copyright changes
ohair
parents:
5579
diff
changeset
|
22 |
* or visit www.oracle.com if you need additional information or have any |
e214162c907e
6982137: Rebranding pass 2 - missed copyright changes
ohair
parents:
5579
diff
changeset
|
23 |
* questions. |
5579
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
24 |
*/ |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
25 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
26 |
package sun.java2d.jules; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
27 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
28 |
import java.awt.*; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
29 |
import java.awt.geom.*; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
30 |
import java.util.concurrent.*; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
31 |
import sun.java2d.pipe.*; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
32 |
import sun.java2d.xr.*; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
33 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
34 |
public class JulesAATileGenerator implements AATileGenerator { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
35 |
/* Threading stuff */ |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
36 |
final static ExecutorService rasterThreadPool = |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
37 |
Executors.newCachedThreadPool(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
38 |
final static int CPU_CNT = Runtime.getRuntime().availableProcessors(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
39 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
40 |
final static boolean ENABLE_THREADING = false; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
41 |
final static int THREAD_MIN = 16; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
42 |
final static int THREAD_BEGIN = 16; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
43 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
44 |
IdleTileCache tileCache; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
45 |
TileWorker worker; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
46 |
boolean threaded = false; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
47 |
int rasterTileCnt; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
48 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
49 |
/* Tiling */ |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
50 |
final static int TILE_SIZE = 32; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
51 |
final static int TILE_SIZE_FP = 32 << 16; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
52 |
int left, right, top, bottom, width, height; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
53 |
int leftFP, topFP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
54 |
int tileCnt, tilesX, tilesY; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
55 |
int currTilePos = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
56 |
TrapezoidList traps; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
57 |
TileTrapContainer[] tiledTrapArray; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
58 |
JulesTile mainTile; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
59 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
60 |
public JulesAATileGenerator(Shape s, AffineTransform at, Region clip, |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
61 |
BasicStroke bs, boolean thin, |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
62 |
boolean normalize, int[] bbox) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
63 |
JulesPathBuf buf = new JulesPathBuf(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
64 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
65 |
if (bs == null) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
66 |
traps = buf.tesselateFill(s, at, clip); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
67 |
} else { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
68 |
traps = buf.tesselateStroke(s, bs, thin, false, true, at, clip); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
69 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
70 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
71 |
calculateArea(bbox); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
72 |
bucketSortTraps(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
73 |
calculateTypicalAlpha(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
74 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
75 |
threaded = ENABLE_THREADING && |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
76 |
rasterTileCnt >= THREAD_MIN && CPU_CNT >= 2; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
77 |
if (threaded) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
78 |
tileCache = new IdleTileCache(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
79 |
worker = new TileWorker(this, THREAD_BEGIN, tileCache); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
80 |
rasterThreadPool.execute(worker); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
81 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
82 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
83 |
mainTile = new JulesTile(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
84 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
85 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
86 |
private static native long |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
87 |
rasterizeTrapezoidsNative(long pixmanImagePtr, int[] traps, |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
88 |
int[] trapPos, int trapCnt, |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
89 |
byte[] buffer, int xOff, int yOff); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
90 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
91 |
private static native void freePixmanImgPtr(long pixmanImgPtr); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
92 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
93 |
private void calculateArea(int[] bbox) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
94 |
tilesX = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
95 |
tilesY = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
96 |
tileCnt = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
97 |
bbox[0] = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
98 |
bbox[1] = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
99 |
bbox[2] = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
100 |
bbox[3] = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
101 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
102 |
if (traps.getSize() > 0) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
103 |
left = traps.getLeft(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
104 |
right = traps.getRight(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
105 |
top = traps.getTop(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
106 |
bottom = traps.getBottom(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
107 |
leftFP = left << 16; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
108 |
topFP = top << 16; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
109 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
110 |
bbox[0] = left; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
111 |
bbox[1] = top; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
112 |
bbox[2] = right; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
113 |
bbox[3] = bottom; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
114 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
115 |
width = right - left; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
116 |
height = bottom - top; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
117 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
118 |
if (width > 0 && height > 0) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
119 |
tilesX = (int) Math.ceil(((double) width) / TILE_SIZE); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
120 |
tilesY = (int) Math.ceil(((double) height) / TILE_SIZE); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
121 |
tileCnt = tilesY * tilesX; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
122 |
tiledTrapArray = new TileTrapContainer[tileCnt]; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
123 |
} else { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
124 |
// If there is no area touched by the traps, don't |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
125 |
// render them. |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
126 |
traps.setSize(0); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
127 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
128 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
129 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
130 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
131 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
132 |
private void bucketSortTraps() { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
133 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
134 |
for (int i = 0; i < traps.getSize(); i++) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
135 |
int top = traps.getTop(i) - XRUtils.XDoubleToFixed(this.top); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
136 |
int bottom = traps.getBottom(i) - topFP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
137 |
int p1xLeft = traps.getP1XLeft(i) - leftFP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
138 |
int p2xLeft = traps.getP2XLeft(i) - leftFP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
139 |
int p1xRight = traps.getP1XRight(i) - leftFP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
140 |
int p2xRight = traps.getP2XRight(i) - leftFP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
141 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
142 |
int minLeft = Math.min(p1xLeft, p2xLeft); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
143 |
int maxRight = Math.max(p1xRight, p2xRight); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
144 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
145 |
maxRight = maxRight > 0 ? maxRight - 1 : maxRight; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
146 |
bottom = bottom > 0 ? bottom - 1 : bottom; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
147 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
148 |
int startTileY = top / TILE_SIZE_FP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
149 |
int endTileY = bottom / TILE_SIZE_FP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
150 |
int startTileX = minLeft / TILE_SIZE_FP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
151 |
int endTileX = maxRight / TILE_SIZE_FP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
152 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
153 |
for (int n = startTileY; n <= endTileY; n++) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
154 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
155 |
for (int m = startTileX; m <= endTileX; m++) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
156 |
int trapArrayPos = n * tilesX + m; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
157 |
TileTrapContainer trapTileList = tiledTrapArray[trapArrayPos]; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
158 |
if (trapTileList == null) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
159 |
trapTileList = new TileTrapContainer(new GrowableIntArray(1, 16)); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
160 |
tiledTrapArray[trapArrayPos] = trapTileList; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
161 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
162 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
163 |
trapTileList.getTraps().addInt(i); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
164 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
165 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
166 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
167 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
168 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
169 |
public void getAlpha(byte[] tileBuffer, int offset, int rowstride) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
170 |
JulesTile tile = null; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
171 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
172 |
if (threaded) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
173 |
tile = worker.getPreRasterizedTile(currTilePos); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
174 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
175 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
176 |
if (tile != null) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
177 |
System.arraycopy(tile.getImgBuffer(), 0, |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
178 |
tileBuffer, 0, tileBuffer.length); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
179 |
tileCache.releaseTile(tile); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
180 |
} else { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
181 |
mainTile.setImgBuffer(tileBuffer); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
182 |
rasterizeTile(currTilePos, mainTile); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
183 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
184 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
185 |
nextTile(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
186 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
187 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
188 |
public void calculateTypicalAlpha() { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
189 |
rasterTileCnt = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
190 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
191 |
for (int index = 0; index < tileCnt; index++) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
192 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
193 |
TileTrapContainer trapCont = tiledTrapArray[index]; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
194 |
if (trapCont != null) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
195 |
GrowableIntArray trapList = trapCont.getTraps(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
196 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
197 |
int tileAlpha = 127; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
198 |
if (trapList == null || trapList.getSize() == 0) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
199 |
tileAlpha = 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
200 |
} else if (doTrapsCoverTile(trapList, index)) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
201 |
tileAlpha = 0xff; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
202 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
203 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
204 |
if (tileAlpha == 127 || tileAlpha == 0xff) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
205 |
rasterTileCnt++; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
206 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
207 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
208 |
trapCont.setTileAlpha(tileAlpha); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
209 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
210 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
211 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
212 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
213 |
/* |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
214 |
* Optimization for large fills. Foutunatly cairo does generate an y-sorted |
21278 | 215 |
* list of trapezoids. This makes it quite simple to check whether a tile is |
216 |
* fully covered by traps by: - Checking whether the tile is fully covered by |
|
217 |
* traps vertically (trap 2 starts where trap 1 ended) - Checking whether all |
|
5579
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
218 |
* traps cover the tile horizontally This also works, when a single tile |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
219 |
* coveres the whole tile. |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
220 |
*/ |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
221 |
protected boolean doTrapsCoverTile(GrowableIntArray trapList, int tileIndex) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
222 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
223 |
// Don't bother optimizing tiles with lots of traps, usually it won't |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
224 |
// succeed anyway. |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
225 |
if (trapList.getSize() > TILE_SIZE) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
226 |
return false; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
227 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
228 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
229 |
int tileStartX = getXPos(tileIndex) * TILE_SIZE_FP + leftFP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
230 |
int tileStartY = getYPos(tileIndex) * TILE_SIZE_FP + topFP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
231 |
int tileEndX = tileStartX + TILE_SIZE_FP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
232 |
int tileEndY = tileStartY + TILE_SIZE_FP; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
233 |
|
21278 | 234 |
// Check whether first tile covers the beginning of the tile vertically |
5579
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
235 |
int firstTop = traps.getTop(trapList.getInt(0)); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
236 |
int firstBottom = traps.getBottom(trapList.getInt(0)); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
237 |
if (firstTop > tileStartY || firstBottom < tileStartY) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
238 |
return false; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
239 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
240 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
241 |
// Initialize lastBottom with top, in order to pass the checks for the |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
242 |
// first iteration |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
243 |
int lastBottom = firstTop; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
244 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
245 |
for (int i = 0; i < trapList.getSize(); i++) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
246 |
int trapPos = trapList.getInt(i); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
247 |
if (traps.getP1XLeft(trapPos) > tileStartX || |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
248 |
traps.getP2XLeft(trapPos) > tileStartX || |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
249 |
traps.getP1XRight(trapPos) < tileEndX || |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
250 |
traps.getP2XRight(trapPos) < tileEndX || |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
251 |
traps.getTop(trapPos) != lastBottom) |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
252 |
{ |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
253 |
return false; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
254 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
255 |
lastBottom = traps.getBottom(trapPos); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
256 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
257 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
258 |
// When the last trap covered the tileEnd vertically, the tile is fully |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
259 |
// covered |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
260 |
return lastBottom >= tileEndY; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
261 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
262 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
263 |
public int getTypicalAlpha() { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
264 |
if (tiledTrapArray[currTilePos] == null) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
265 |
return 0; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
266 |
} else { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
267 |
return tiledTrapArray[currTilePos].getTileAlpha(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
268 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
269 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
270 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
271 |
public void dispose() { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
272 |
freePixmanImgPtr(mainTile.getPixmanImgPtr()); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
273 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
274 |
if (threaded) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
275 |
tileCache.disposeConsumerResources(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
276 |
worker.disposeConsumerResources(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
277 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
278 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
279 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
280 |
protected JulesTile rasterizeTile(int tileIndex, JulesTile tile) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
281 |
int tileOffsetX = left + getXPos(tileIndex) * TILE_SIZE; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
282 |
int tileOffsetY = top + getYPos(tileIndex) * TILE_SIZE; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
283 |
TileTrapContainer trapCont = tiledTrapArray[tileIndex]; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
284 |
GrowableIntArray trapList = trapCont.getTraps(); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
285 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
286 |
if (trapCont.getTileAlpha() == 127) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
287 |
long pixmanImgPtr = |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
288 |
rasterizeTrapezoidsNative(tile.getPixmanImgPtr(), |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
289 |
traps.getTrapArray(), |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
290 |
trapList.getArray(), |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
291 |
trapList.getSize(), |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
292 |
tile.getImgBuffer(), |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
293 |
tileOffsetX, tileOffsetY); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
294 |
tile.setPixmanImgPtr(pixmanImgPtr); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
295 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
296 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
297 |
tile.setTilePos(tileIndex); |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
298 |
return tile; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
299 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
300 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
301 |
protected int getXPos(int arrayPos) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
302 |
return arrayPos % tilesX; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
303 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
304 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
305 |
protected int getYPos(int arrayPos) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
306 |
return arrayPos / tilesX; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
307 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
308 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
309 |
public void nextTile() { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
310 |
currTilePos++; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
311 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
312 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
313 |
public int getTileHeight() { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
314 |
return TILE_SIZE; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
315 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
316 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
317 |
public int getTileWidth() { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
318 |
return TILE_SIZE; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
319 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
320 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
321 |
public int getTileCount() { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
322 |
return tileCnt; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
323 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
324 |
|
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
325 |
public TileTrapContainer getTrapContainer(int index) { |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
326 |
return tiledTrapArray[index]; |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
327 |
} |
1a5e995a710b
6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff
changeset
|
328 |
} |