Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: src/gpu/gl/GrGLPathRendering.cpp

Issue 746253003: Add IndexType parameter to GrDrawTarget::drawPaths (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/gl/GrGLPathRendering.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "gl/GrGLPathRendering.h" 8 #include "gl/GrGLPathRendering.h"
9 #include "gl/GrGLNameAllocator.h" 9 #include "gl/GrGLNameAllocator.h"
10 #include "gl/GrGLUtil.h" 10 #include "gl/GrGLUtil.h"
11 #include "gl/GrGpuGL.h" 11 #include "gl/GrGpuGL.h"
12 12
13 #include "GrGLPath.h" 13 #include "GrGLPath.h"
14 #include "GrGLPathRange.h" 14 #include "GrGLPathRange.h"
15 #include "GrGLPathRendering.h" 15 #include "GrGLPathRendering.h"
16 16
17 #include "SkStream.h" 17 #include "SkStream.h"
18 #include "SkTypeface.h" 18 #include "SkTypeface.h"
19 19
20 #define GL_CALL(X) GR_GL_CALL(fGpu->glInterface(), X) 20 #define GL_CALL(X) GR_GL_CALL(fGpu->glInterface(), X)
21 #define GL_CALL_RET(RET, X) GR_GL_CALL_RET(fGpu->glInterface(), RET, X) 21 #define GL_CALL_RET(RET, X) GR_GL_CALL_RET(fGpu->glInterface(), RET, X)
22 22
23 23
24 static const GrGLenum gIndexType2GLType[] = {
25 GR_GL_UNSIGNED_BYTE,
26 GR_GL_UNSIGNED_SHORT,
27 GR_GL_UNSIGNED_INT
28 };
29
30 GR_STATIC_ASSERT(0 == GrPathRange::kU8_PathIndexType);
31 GR_STATIC_ASSERT(1 == GrPathRange::kU16_PathIndexType);
32 GR_STATIC_ASSERT(2 == GrPathRange::kU32_PathIndexType);
33 GR_STATIC_ASSERT(GrPathRange::kU32_PathIndexType == GrPathRange::kLast_PathIndex Type);
34
24 static const GrGLenum gXformType2GLType[] = { 35 static const GrGLenum gXformType2GLType[] = {
25 GR_GL_NONE, 36 GR_GL_NONE,
26 GR_GL_TRANSLATE_X, 37 GR_GL_TRANSLATE_X,
27 GR_GL_TRANSLATE_Y, 38 GR_GL_TRANSLATE_Y,
28 GR_GL_TRANSLATE_2D, 39 GR_GL_TRANSLATE_2D,
29 GR_GL_TRANSPOSE_AFFINE_2D 40 GR_GL_TRANSPOSE_AFFINE_2D
30 }; 41 };
31 42
32 GR_STATIC_ASSERT(0 == GrPathRendering::kNone_PathTransformType); 43 GR_STATIC_ASSERT(0 == GrPathRendering::kNone_PathTransformType);
33 GR_STATIC_ASSERT(1 == GrPathRendering::kTranslateX_PathTransformType); 44 GR_STATIC_ASSERT(1 == GrPathRendering::kTranslateX_PathTransformType);
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 if (stroke.needToApply()) { 198 if (stroke.needToApply()) {
188 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) { 199 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
189 GL_CALL(StencilFillPath(id, fillMode, writeMask)); 200 GL_CALL(StencilFillPath(id, fillMode, writeMask));
190 } 201 }
191 this->stencilThenCoverStrokePath(id, 0xffff, writeMask, GR_GL_BOUNDING_B OX); 202 this->stencilThenCoverStrokePath(id, 0xffff, writeMask, GR_GL_BOUNDING_B OX);
192 } else { 203 } else {
193 this->stencilThenCoverFillPath(id, fillMode, writeMask, GR_GL_BOUNDING_B OX); 204 this->stencilThenCoverFillPath(id, fillMode, writeMask, GR_GL_BOUNDING_B OX);
194 } 205 }
195 } 206 }
196 207
197 void GrGLPathRendering::drawPaths(const GrPathRange* pathRange, const uint32_t i ndices[], int count, 208 void GrGLPathRendering::drawPaths(const GrPathRange* pathRange,
198 const float transforms[], PathTransformType tr ansformsType, 209 const void* indices, PathIndexType indexType,
199 const GrStencilSettings& stencilSettings) { 210 const float transformValues[], PathTransformTy pe transformType,
211 int count, const GrStencilSettings& stencilSet tings) {
200 SkASSERT(fGpu->caps()->pathRenderingSupport()); 212 SkASSERT(fGpu->caps()->pathRenderingSupport());
201 213
202 GrGLuint baseID = static_cast<const GrGLPathRange*>(pathRange)->basePathID() ; 214 GrGLuint baseID = static_cast<const GrGLPathRange*>(pathRange)->basePathID() ;
203 215
204 this->flushPathStencilSettings(stencilSettings); 216 this->flushPathStencilSettings(stencilSettings);
205 SkASSERT(!fHWPathStencilSettings.isTwoSided()); 217 SkASSERT(!fHWPathStencilSettings.isTwoSided());
206 218
207 const SkStrokeRec& stroke = pathRange->getStroke(); 219 const SkStrokeRec& stroke = pathRange->getStroke();
208 220
209 GrGLenum fillMode = 221 GrGLenum fillMode =
210 gr_stencil_op_to_gl_path_rendering_fill_mode( 222 gr_stencil_op_to_gl_path_rendering_fill_mode(
211 fHWPathStencilSettings.passOp(GrStencilSettings::kFront_Face)); 223 fHWPathStencilSettings.passOp(GrStencilSettings::kFront_Face));
212 GrGLint writeMask = 224 GrGLint writeMask =
213 fHWPathStencilSettings.writeMask(GrStencilSettings::kFront_Face); 225 fHWPathStencilSettings.writeMask(GrStencilSettings::kFront_Face);
214 226
215 if (stroke.needToApply()) { 227 if (stroke.needToApply()) {
216 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) { 228 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
217 GL_CALL(StencilFillPathInstanced( 229 GL_CALL(StencilFillPathInstanced(
218 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode , 230 count, gIndexType2GLType[indexType], indices, baseID , fillMode,
219 writeMask, gXformType2GLType[transformsType], 231 writeMask, gXformType2GLType[transformType], transfo rmValues));
220 transforms));
221 } 232 }
222 this->stencilThenCoverStrokePathInstanced( 233 this->stencilThenCoverStrokePathInstanced(
223 count, GR_GL_UNSIGNED_INT, indices, baseID, 0xffff, writeMask, 234 count, gIndexType2GLType[indexType], indices, baseID ,
224 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES, 235 0xffff, writeMask, GR_GL_BOUNDING_BOX_OF_BOUNDING_BO XES,
225 gXformType2GLType[transformsType], transforms); 236 gXformType2GLType[transformType], transformValues);
226 } else { 237 } else {
227 this->stencilThenCoverFillPathInstanced( 238 this->stencilThenCoverFillPathInstanced(
228 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode , writeMask, 239 count, gIndexType2GLType[indexType], indices, baseID ,
229 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES, 240 fillMode, writeMask, GR_GL_BOUNDING_BOX_OF_BOUNDING_ BOXES,
230 gXformType2GLType[transformsType], transforms); 241 gXformType2GLType[transformType], transformValues);
231 } 242 }
232 } 243 }
233 244
234 void GrGLPathRendering::enablePathTexGen(int unitIdx, PathTexGenComponents compo nents, 245 void GrGLPathRendering::enablePathTexGen(int unitIdx, PathTexGenComponents compo nents,
235 const GrGLfloat* coefficients) { 246 const GrGLfloat* coefficients) {
236 SkASSERT(components >= kS_PathTexGenComponents && 247 SkASSERT(components >= kS_PathTexGenComponents &&
237 components <= kSTR_PathTexGenComponents); 248 components <= kSTR_PathTexGenComponents);
238 SkASSERT(fGpu->glCaps().maxFixedFunctionTextureCoords() >= unitIdx); 249 SkASSERT(fGpu->glCaps().maxFixedFunctionTextureCoords() >= unitIdx);
239 250
240 if (GR_GL_OBJECT_LINEAR == fHWPathTexGenSettings[unitIdx].fMode && 251 if (GR_GL_OBJECT_LINEAR == fHWPathTexGenSettings[unitIdx].fMode &&
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 reference, mask, coverMode, transformType, 469 reference, mask, coverMode, transformType,
459 transformValues)); 470 transformValues));
460 return; 471 return;
461 } 472 }
462 473
463 GL_CALL(StencilStrokePathInstanced(numPaths, pathNameType, paths, pathBase, 474 GL_CALL(StencilStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
464 reference, mask, transformType, transform Values)); 475 reference, mask, transformType, transform Values));
465 GL_CALL(CoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase, 476 GL_CALL(CoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
466 coverMode, transformType, transformValues)) ; 477 coverMode, transformType, transformValues)) ;
467 } 478 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLPathRendering.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698