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

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

Issue 423173004: Incorporate glStencilThenCover* nvpr methods (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix win7 build Created 6 years, 4 months 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/GrGLInterface.cpp ('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 2011 Google Inc. 2 * Copyright 2011 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 8
9 #include "GrGpuGL.h" 9 #include "GrGpuGL.h"
10 #include "GrGLNameAllocator.h" 10 #include "GrGLNameAllocator.h"
(...skipping 1876 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 1887
1888 flushPathStencilSettings(fill); 1888 flushPathStencilSettings(fill);
1889 const SkStrokeRec& stroke = path->getStroke(); 1889 const SkStrokeRec& stroke = path->getStroke();
1890 1890
1891 SkPath::FillType nonInvertedFill = SkPath::ConvertToNonInverseFillType(fill) ; 1891 SkPath::FillType nonInvertedFill = SkPath::ConvertToNonInverseFillType(fill) ;
1892 SkASSERT(!fHWPathStencilSettings.isTwoSided()); 1892 SkASSERT(!fHWPathStencilSettings.isTwoSided());
1893 GrGLenum fillMode = 1893 GrGLenum fillMode =
1894 gr_stencil_op_to_gl_path_rendering_fill_mode(fHWPathStencilSettings.pass Op(GrStencilSettings::kFront_Face)); 1894 gr_stencil_op_to_gl_path_rendering_fill_mode(fHWPathStencilSettings.pass Op(GrStencilSettings::kFront_Face));
1895 GrGLint writeMask = fHWPathStencilSettings.writeMask(GrStencilSettings::kFro nt_Face); 1895 GrGLint writeMask = fHWPathStencilSettings.writeMask(GrStencilSettings::kFro nt_Face);
1896 1896
1897 if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke.getS tyle()) {
1898 GL_CALL(StencilFillPath(id, fillMode, writeMask));
1899 }
1900 if (stroke.needToApply()) {
1901 GL_CALL(StencilStrokePath(id, 0xffff, writeMask));
1902 }
1903
1904 if (nonInvertedFill == fill) { 1897 if (nonInvertedFill == fill) {
1905 if (stroke.needToApply()) { 1898 if (stroke.needToApply()) {
1906 GL_CALL(CoverStrokePath(id, GR_GL_BOUNDING_BOX)); 1899 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
1900 GL_CALL(StencilFillPath(id, fillMode, writeMask));
1901 }
1902 GL_CALL(StencilThenCoverStrokePath(id, 0xffff, writeMask, GR_GL_BOUN DING_BOX));
1907 } else { 1903 } else {
1908 GL_CALL(CoverFillPath(id, GR_GL_BOUNDING_BOX)); 1904 GL_CALL(StencilThenCoverFillPath(id, fillMode, writeMask, GR_GL_BOUN DING_BOX));
1909 } 1905 }
1910 } else { 1906 } else {
1907 if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke. getStyle()) {
1908 GL_CALL(StencilFillPath(id, fillMode, writeMask));
1909 }
1910 if (stroke.needToApply()) {
1911 GL_CALL(StencilStrokePath(id, 0xffff, writeMask));
1912 }
1913
1911 GrDrawState* drawState = this->drawState(); 1914 GrDrawState* drawState = this->drawState();
1912 GrDrawState::AutoViewMatrixRestore avmr; 1915 GrDrawState::AutoViewMatrixRestore avmr;
1913 SkRect bounds = SkRect::MakeLTRB(0, 0, 1916 SkRect bounds = SkRect::MakeLTRB(0, 0,
1914 SkIntToScalar(drawState->getRenderTarge t()->width()), 1917 SkIntToScalar(drawState->getRenderTarge t()->width()),
1915 SkIntToScalar(drawState->getRenderTarge t()->height())); 1918 SkIntToScalar(drawState->getRenderTarge t()->height()));
1916 SkMatrix vmi; 1919 SkMatrix vmi;
1917 // mapRect through persp matrix may not be correct 1920 // mapRect through persp matrix may not be correct
1918 if (!drawState->getViewMatrix().hasPerspective() && drawState->getViewIn verse(&vmi)) { 1921 if (!drawState->getViewMatrix().hasPerspective() && drawState->getViewIn verse(&vmi)) {
1919 vmi.mapRect(&bounds); 1922 vmi.mapRect(&bounds);
1920 // theoretically could set bloat = 0, instead leave it because of ma trix inversion 1923 // theoretically could set bloat = 0, instead leave it because of ma trix inversion
(...skipping 25 matching lines...) Expand all
1946 SkPath::FillType nonInvertedFill = 1949 SkPath::FillType nonInvertedFill =
1947 SkPath::ConvertToNonInverseFillType(fill); 1950 SkPath::ConvertToNonInverseFillType(fill);
1948 1951
1949 SkASSERT(!fHWPathStencilSettings.isTwoSided()); 1952 SkASSERT(!fHWPathStencilSettings.isTwoSided());
1950 GrGLenum fillMode = 1953 GrGLenum fillMode =
1951 gr_stencil_op_to_gl_path_rendering_fill_mode( 1954 gr_stencil_op_to_gl_path_rendering_fill_mode(
1952 fHWPathStencilSettings.passOp(GrStencilSettings::kFront_Face)); 1955 fHWPathStencilSettings.passOp(GrStencilSettings::kFront_Face));
1953 GrGLint writeMask = 1956 GrGLint writeMask =
1954 fHWPathStencilSettings.writeMask(GrStencilSettings::kFront_Face); 1957 fHWPathStencilSettings.writeMask(GrStencilSettings::kFront_Face);
1955 1958
1956 if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke.getS tyle()) {
1957 GL_CALL(StencilFillPathInstanced(count, GR_GL_UNSIGNED_INT, indices, bas eID, fillMode,
1958 writeMask, gXformType2GLType[transforms Type],
1959 transforms));
1960 }
1961 if (stroke.needToApply()) {
1962 GL_CALL(StencilStrokePathInstanced(count, GR_GL_UNSIGNED_INT, indices, b aseID, 0xffff,
1963 writeMask, gXformType2GLType[transfor msType],
1964 transforms));
1965 }
1966
1967 if (nonInvertedFill == fill) { 1959 if (nonInvertedFill == fill) {
1968 if (stroke.needToApply()) { 1960 if (stroke.needToApply()) {
1969 GL_CALL(CoverStrokePathInstanced( 1961 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
1970 count, GR_GL_UNSIGNED_INT, indices, baseID, 1962 GL_CALL(StencilFillPathInstanced(
1963 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode ,
1964 writeMask, gXformType2GLType[transformsType],
1965 transforms));
1966 }
1967 GL_CALL(StencilThenCoverStrokePathInstanced(
1968 count, GR_GL_UNSIGNED_INT, indices, baseID, 0xffff, writ eMask,
1971 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES, 1969 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES,
1972 gXformType2GLType[transformsType], transforms)); 1970 gXformType2GLType[transformsType], transforms));
1973 } else { 1971 } else {
1974 GL_CALL(CoverFillPathInstanced( 1972 GL_CALL(StencilThenCoverFillPathInstanced(
1975 count, GR_GL_UNSIGNED_INT, indices, baseID, 1973 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode, wr iteMask,
1976 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES, 1974 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES,
1977 gXformType2GLType[transformsType], transforms)); 1975 gXformType2GLType[transformsType], transforms));
1978 } 1976 }
1979 } else { 1977 } else {
1978 if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke. getStyle()) {
1979 GL_CALL(StencilFillPathInstanced(
1980 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode,
1981 writeMask, gXformType2GLType[transformsType],
1982 transforms));
1983 }
1984 if (stroke.needToApply()) {
1985 GL_CALL(StencilStrokePathInstanced(
1986 count, GR_GL_UNSIGNED_INT, indices, baseID, 0xffff,
1987 writeMask, gXformType2GLType[transformsType],
1988 transforms));
1989 }
1990
1980 GrDrawState* drawState = this->drawState(); 1991 GrDrawState* drawState = this->drawState();
1981 GrDrawState::AutoViewMatrixRestore avmr; 1992 GrDrawState::AutoViewMatrixRestore avmr;
1982 SkRect bounds = SkRect::MakeLTRB(0, 0, 1993 SkRect bounds = SkRect::MakeLTRB(0, 0,
1983 SkIntToScalar(drawState->getRenderTarge t()->width()), 1994 SkIntToScalar(drawState->getRenderTarge t()->width()),
1984 SkIntToScalar(drawState->getRenderTarge t()->height())); 1995 SkIntToScalar(drawState->getRenderTarge t()->height()));
1985 SkMatrix vmi; 1996 SkMatrix vmi;
1986 // mapRect through persp matrix may not be correct 1997 // mapRect through persp matrix may not be correct
1987 if (!drawState->getViewMatrix().hasPerspective() && drawState->getViewIn verse(&vmi)) { 1998 if (!drawState->getViewMatrix().hasPerspective() && drawState->getViewIn verse(&vmi)) {
1988 vmi.mapRect(&bounds); 1999 vmi.mapRect(&bounds);
1989 // theoretically could set bloat = 0, instead leave it because of ma trix inversion 2000 // theoretically could set bloat = 0, instead leave it because of ma trix inversion
(...skipping 1028 matching lines...) Expand 10 before | Expand all | Expand 10 after
3018 this->setVertexArrayID(gpu, 0); 3029 this->setVertexArrayID(gpu, 0);
3019 } 3030 }
3020 int attrCount = gpu->glCaps().maxVertexAttributes(); 3031 int attrCount = gpu->glCaps().maxVertexAttributes();
3021 if (fDefaultVertexArrayAttribState.count() != attrCount) { 3032 if (fDefaultVertexArrayAttribState.count() != attrCount) {
3022 fDefaultVertexArrayAttribState.resize(attrCount); 3033 fDefaultVertexArrayAttribState.resize(attrCount);
3023 } 3034 }
3024 attribState = &fDefaultVertexArrayAttribState; 3035 attribState = &fDefaultVertexArrayAttribState;
3025 } 3036 }
3026 return attribState; 3037 return attribState;
3027 } 3038 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLInterface.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698