| Index: src/gpu/gl/GrGpuGL.cpp
|
| diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
|
| index 404e7abdbddf20caa5e9a2c5db507e2b24ad1794..d079c2e23a7af04a09083d50056c3ec326f8816c 100644
|
| --- a/src/gpu/gl/GrGpuGL.cpp
|
| +++ b/src/gpu/gl/GrGpuGL.cpp
|
| @@ -1899,9 +1899,9 @@ void GrGpuGL::onGpuDrawPath(const GrPath* path, SkPath::FillType fill) {
|
| if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
|
| GL_CALL(StencilFillPath(id, fillMode, writeMask));
|
| }
|
| - GL_CALL(StencilThenCoverStrokePath(id, 0xffff, writeMask, GR_GL_BOUNDING_BOX));
|
| + this->stencilThenCoverStrokePath(id, 0xffff, writeMask, GR_GL_BOUNDING_BOX);
|
| } else {
|
| - GL_CALL(StencilThenCoverFillPath(id, fillMode, writeMask, GR_GL_BOUNDING_BOX));
|
| + this->stencilThenCoverFillPath(id, fillMode, writeMask, GR_GL_BOUNDING_BOX);
|
| }
|
| } else {
|
| if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
|
| @@ -1964,15 +1964,15 @@ void GrGpuGL::onGpuDrawPaths(const GrPathRange* pathRange,
|
| writeMask, gXformType2GLType[transformsType],
|
| transforms));
|
| }
|
| - GL_CALL(StencilThenCoverStrokePathInstanced(
|
| + this->stencilThenCoverStrokePathInstanced(
|
| count, GR_GL_UNSIGNED_INT, indices, baseID, 0xffff, writeMask,
|
| GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES,
|
| - gXformType2GLType[transformsType], transforms));
|
| + gXformType2GLType[transformsType], transforms);
|
| } else {
|
| - GL_CALL(StencilThenCoverFillPathInstanced(
|
| + this->stencilThenCoverFillPathInstanced(
|
| count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode, writeMask,
|
| GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES,
|
| - gXformType2GLType[transformsType], transforms));
|
| + gXformType2GLType[transformsType], transforms);
|
| }
|
| } else {
|
| if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
|
| @@ -2681,6 +2681,62 @@ void GrGpuGL::setTextureUnit(int unit) {
|
| }
|
| }
|
|
|
| +void GrGpuGL::stencilThenCoverFillPath(GrGLuint path, GrGLenum fillMode,
|
| + GrGLuint mask, GrGLenum coverMode) {
|
| + SkASSERT(this->caps()->pathRenderingSupport());
|
| + if (!this->caps()->pathRenderingV13Support()) {
|
| + GL_CALL(StencilFillPath(path, fillMode, mask));
|
| + GL_CALL(CoverFillPath(path, coverMode));
|
| + return;
|
| + }
|
| + GL_CALL(StencilThenCoverFillPath(path, fillMode, mask, coverMode));
|
| +}
|
| +
|
| +void GrGpuGL::stencilThenCoverStrokePath(GrGLuint path, GrGLint reference,
|
| + GrGLuint mask, GrGLenum coverMode) {
|
| + SkASSERT(this->caps()->pathRenderingSupport());
|
| + if (!this->caps()->pathRenderingV13Support()) {
|
| + GL_CALL(StencilStrokePath(path, reference, mask));
|
| + GL_CALL(CoverStrokePath(path, coverMode));
|
| + return;
|
| + }
|
| + GL_CALL(StencilThenCoverStrokePath(path, reference, mask, coverMode));
|
| +}
|
| +
|
| +void GrGpuGL::stencilThenCoverFillPathInstanced(GrGLsizei numPaths, GrGLenum pathNameType,
|
| + const GrGLvoid *paths, GrGLuint pathBase,
|
| + GrGLenum fillMode, GrGLuint mask,
|
| + GrGLenum coverMode, GrGLenum transformType,
|
| + const GrGLfloat *transformValues) {
|
| + SkASSERT(this->caps()->pathRenderingSupport());
|
| + if (!this->caps()->pathRenderingV13Support()) {
|
| + GL_CALL(StencilFillPathInstanced(numPaths, pathNameType, paths, pathBase,
|
| + fillMode, mask, transformType, transformValues));
|
| + GL_CALL(CoverFillPathInstanced(numPaths, pathNameType, paths, pathBase,
|
| + coverMode, transformType, transformValues));
|
| + return;
|
| + }
|
| + GL_CALL(StencilThenCoverFillPathInstanced(numPaths, pathNameType, paths, pathBase, fillMode,
|
| + mask, coverMode, transformType, transformValues));
|
| +}
|
| +
|
| +void GrGpuGL::stencilThenCoverStrokePathInstanced(GrGLsizei numPaths, GrGLenum pathNameType,
|
| + const GrGLvoid *paths, GrGLuint pathBase,
|
| + GrGLint reference, GrGLuint mask,
|
| + GrGLenum coverMode, GrGLenum transformType,
|
| + const GrGLfloat *transformValues) {
|
| + SkASSERT(this->caps()->pathRenderingSupport());
|
| + if (!this->caps()->pathRenderingV13Support()) {
|
| + GL_CALL(StencilStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
|
| + reference, mask, transformType, transformValues));
|
| + GL_CALL(CoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
|
| + coverMode, transformType, transformValues));
|
| + return;
|
| + }
|
| + GL_CALL(StencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase, reference,
|
| + mask, coverMode, transformType, transformValues));
|
| +}
|
| +
|
| void GrGpuGL::setScratchTextureUnit() {
|
| // Bind the last texture unit since it is the least likely to be used by GrGLProgram.
|
| int lastUnitIdx = fHWBoundTextureUniqueIDs.count() - 1;
|
|
|