|
1 /* |
|
2 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. |
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 * |
|
5 * This code is free software; you can redistribute it and/or modify it |
|
6 * under the terms of the GNU General Public License version 2 only, as |
|
7 * published by the Free Software Foundation. Oracle designates this |
|
8 * particular file as subject to the "Classpath" exception as provided |
|
9 * by Oracle in the LICENSE file that accompanied this code. |
|
10 * |
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 * version 2 for more details (a copy is included in the LICENSE file that |
|
15 * accompanied this code). |
|
16 * |
|
17 * You should have received a copy of the GNU General Public License version |
|
18 * 2 along with this work; if not, write to the Free Software Foundation, |
|
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 * |
|
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
22 * or visit www.oracle.com if you need additional information or have any |
|
23 * questions. |
|
24 */ |
|
25 package sun.java2d.metal; |
|
26 |
|
27 import sun.java2d.InvalidPipeException; |
|
28 import sun.java2d.SunGraphics2D; |
|
29 import sun.java2d.loops.GraphicsPrimitive; |
|
30 import sun.java2d.pipe.BufferedRenderPipe; |
|
31 import sun.java2d.pipe.ParallelogramPipe; |
|
32 import sun.java2d.pipe.RenderQueue; |
|
33 import sun.java2d.pipe.SpanIterator; |
|
34 |
|
35 import java.awt.*; |
|
36 import java.awt.geom.Path2D; |
|
37 |
|
38 import static sun.java2d.pipe.BufferedOpCodes.COPY_AREA; |
|
39 |
|
40 class MTLRenderer extends BufferedRenderPipe { |
|
41 |
|
42 MTLRenderer(RenderQueue rq) { |
|
43 super(rq); |
|
44 } |
|
45 |
|
46 @Override |
|
47 protected void validateContext(SunGraphics2D sg2d) { |
|
48 int ctxflags = |
|
49 sg2d.paint.getTransparency() == Transparency.OPAQUE ? |
|
50 MTLContext.SRC_IS_OPAQUE : MTLContext.NO_CONTEXT_FLAGS; |
|
51 MTLSurfaceData dstData; |
|
52 try { |
|
53 dstData = (MTLSurfaceData)sg2d.surfaceData; |
|
54 } catch (ClassCastException e) { |
|
55 throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData); |
|
56 } |
|
57 MTLContext.validateContext(dstData, dstData, |
|
58 sg2d.getCompClip(), sg2d.composite, |
|
59 null, sg2d.paint, sg2d, ctxflags); |
|
60 } |
|
61 |
|
62 @Override |
|
63 protected void validateContextAA(SunGraphics2D sg2d) { |
|
64 int ctxflags = MTLContext.NO_CONTEXT_FLAGS; |
|
65 MTLSurfaceData dstData; |
|
66 try { |
|
67 dstData = (MTLSurfaceData)sg2d.surfaceData; |
|
68 } catch (ClassCastException e) { |
|
69 throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData); |
|
70 } |
|
71 MTLContext.validateContext(dstData, dstData, |
|
72 sg2d.getCompClip(), sg2d.composite, |
|
73 null, sg2d.paint, sg2d, ctxflags); |
|
74 } |
|
75 |
|
76 void copyArea(SunGraphics2D sg2d, |
|
77 int x, int y, int w, int h, int dx, int dy) |
|
78 { |
|
79 rq.lock(); |
|
80 try { |
|
81 int ctxflags = |
|
82 sg2d.surfaceData.getTransparency() == Transparency.OPAQUE ? |
|
83 MTLContext.SRC_IS_OPAQUE : MTLContext.NO_CONTEXT_FLAGS; |
|
84 MTLSurfaceData dstData; |
|
85 try { |
|
86 dstData = (MTLSurfaceData)sg2d.surfaceData; |
|
87 } catch (ClassCastException e) { |
|
88 throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData); |
|
89 } |
|
90 MTLContext.validateContext(dstData, dstData, |
|
91 sg2d.getCompClip(), sg2d.composite, |
|
92 null, null, null, ctxflags); |
|
93 |
|
94 rq.ensureCapacity(28); |
|
95 buf.putInt(COPY_AREA); |
|
96 buf.putInt(x).putInt(y).putInt(w).putInt(h); |
|
97 buf.putInt(dx).putInt(dy); |
|
98 } finally { |
|
99 rq.unlock(); |
|
100 } |
|
101 } |
|
102 |
|
103 @Override |
|
104 protected native void drawPoly(int[] xPoints, int[] yPoints, |
|
105 int nPoints, boolean isClosed, |
|
106 int transX, int transY); |
|
107 |
|
108 MTLRenderer traceWrap() { |
|
109 return new Tracer(this); |
|
110 } |
|
111 |
|
112 private class Tracer extends MTLRenderer { |
|
113 private MTLRenderer mtlr; |
|
114 Tracer(MTLRenderer mtlr) { |
|
115 super(mtlr.rq); |
|
116 this.mtlr = mtlr; |
|
117 } |
|
118 public ParallelogramPipe getAAParallelogramPipe() { |
|
119 final ParallelogramPipe realpipe = mtlr.getAAParallelogramPipe(); |
|
120 return new ParallelogramPipe() { |
|
121 public void fillParallelogram(SunGraphics2D sg2d, |
|
122 double ux1, double uy1, |
|
123 double ux2, double uy2, |
|
124 double x, double y, |
|
125 double dx1, double dy1, |
|
126 double dx2, double dy2) |
|
127 { |
|
128 GraphicsPrimitive.tracePrimitive("MTLFillAAParallelogram"); |
|
129 realpipe.fillParallelogram(sg2d, |
|
130 ux1, uy1, ux2, uy2, |
|
131 x, y, dx1, dy1, dx2, dy2); |
|
132 } |
|
133 public void drawParallelogram(SunGraphics2D sg2d, |
|
134 double ux1, double uy1, |
|
135 double ux2, double uy2, |
|
136 double x, double y, |
|
137 double dx1, double dy1, |
|
138 double dx2, double dy2, |
|
139 double lw1, double lw2) |
|
140 { |
|
141 GraphicsPrimitive.tracePrimitive("MTLDrawAAParallelogram"); |
|
142 realpipe.drawParallelogram(sg2d, |
|
143 ux1, uy1, ux2, uy2, |
|
144 x, y, dx1, dy1, dx2, dy2, |
|
145 lw1, lw2); |
|
146 } |
|
147 }; |
|
148 } |
|
149 protected void validateContext(SunGraphics2D sg2d) { |
|
150 mtlr.validateContext(sg2d); |
|
151 } |
|
152 public void drawLine(SunGraphics2D sg2d, |
|
153 int x1, int y1, int x2, int y2) |
|
154 { |
|
155 GraphicsPrimitive.tracePrimitive("MTLDrawLine"); |
|
156 mtlr.drawLine(sg2d, x1, y1, x2, y2); |
|
157 } |
|
158 public void drawRect(SunGraphics2D sg2d, int x, int y, int w, int h) { |
|
159 GraphicsPrimitive.tracePrimitive("MTLDrawRect"); |
|
160 mtlr.drawRect(sg2d, x, y, w, h); |
|
161 } |
|
162 protected void drawPoly(SunGraphics2D sg2d, |
|
163 int[] xPoints, int[] yPoints, |
|
164 int nPoints, boolean isClosed) |
|
165 { |
|
166 GraphicsPrimitive.tracePrimitive("MTLDrawPoly"); |
|
167 mtlr.drawPoly(sg2d, xPoints, yPoints, nPoints, isClosed); |
|
168 } |
|
169 public void fillRect(SunGraphics2D sg2d, int x, int y, int w, int h) { |
|
170 GraphicsPrimitive.tracePrimitive("MTLFillRect"); |
|
171 mtlr.fillRect(sg2d, x, y, w, h); |
|
172 } |
|
173 protected void drawPath(SunGraphics2D sg2d, |
|
174 Path2D.Float p2df, int transx, int transy) |
|
175 { |
|
176 GraphicsPrimitive.tracePrimitive("MTLDrawPath"); |
|
177 mtlr.drawPath(sg2d, p2df, transx, transy); |
|
178 } |
|
179 protected void fillPath(SunGraphics2D sg2d, |
|
180 Path2D.Float p2df, int transx, int transy) |
|
181 { |
|
182 GraphicsPrimitive.tracePrimitive("MTLFillPath"); |
|
183 mtlr.fillPath(sg2d, p2df, transx, transy); |
|
184 } |
|
185 protected void fillSpans(SunGraphics2D sg2d, SpanIterator si, |
|
186 int transx, int transy) |
|
187 { |
|
188 GraphicsPrimitive.tracePrimitive("MTLFillSpans"); |
|
189 mtlr.fillSpans(sg2d, si, transx, transy); |
|
190 } |
|
191 public void fillParallelogram(SunGraphics2D sg2d, |
|
192 double ux1, double uy1, |
|
193 double ux2, double uy2, |
|
194 double x, double y, |
|
195 double dx1, double dy1, |
|
196 double dx2, double dy2) |
|
197 { |
|
198 GraphicsPrimitive.tracePrimitive("MTLFillParallelogram"); |
|
199 mtlr.fillParallelogram(sg2d, |
|
200 ux1, uy1, ux2, uy2, |
|
201 x, y, dx1, dy1, dx2, dy2); |
|
202 } |
|
203 public void drawParallelogram(SunGraphics2D sg2d, |
|
204 double ux1, double uy1, |
|
205 double ux2, double uy2, |
|
206 double x, double y, |
|
207 double dx1, double dy1, |
|
208 double dx2, double dy2, |
|
209 double lw1, double lw2) |
|
210 { |
|
211 GraphicsPrimitive.tracePrimitive("MTLDrawParallelogram"); |
|
212 mtlr.drawParallelogram(sg2d, |
|
213 ux1, uy1, ux2, uy2, |
|
214 x, y, dx1, dy1, dx2, dy2, lw1, lw2); |
|
215 } |
|
216 public void copyArea(SunGraphics2D sg2d, |
|
217 int x, int y, int w, int h, int dx, int dy) |
|
218 { |
|
219 GraphicsPrimitive.tracePrimitive("MTLCopyArea"); |
|
220 mtlr.copyArea(sg2d, x, y, w, h, dx, dy); |
|
221 } |
|
222 } |
|
223 } |