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

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

Issue 443133003: Revert of Wrap NV_path_rendering API with GrGLPathRendering (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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/GrGpuGL.h ('k') | src/gpu/gl/GrGpuGL_program.cpp » ('j') | 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 "GrGLStencilBuffer.h" 11 #include "GrGLStencilBuffer.h"
11 #include "GrGLPath.h" 12 #include "GrGLPath.h"
12 #include "GrGLPathRange.h" 13 #include "GrGLPathRange.h"
13 #include "GrGLPathRendering.h"
14 #include "GrGLShaderBuilder.h" 14 #include "GrGLShaderBuilder.h"
15 #include "GrTemplates.h" 15 #include "GrTemplates.h"
16 #include "GrTypes.h" 16 #include "GrTypes.h"
17 #include "SkStrokeRec.h" 17 #include "SkStrokeRec.h"
18 #include "SkTemplates.h" 18 #include "SkTemplates.h"
19 19
20 #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X) 20 #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X)
21 #define GL_CALL_RET(RET, X) GR_GL_CALL_RET(this->glInterface(), RET, X) 21 #define GL_CALL_RET(RET, X) GR_GL_CALL_RET(this->glInterface(), RET, X)
22 22
23 #define SKIP_CACHE_CHECK true 23 #define SKIP_CACHE_CHECK true
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 GrPrintf("\n"); 157 GrPrintf("\n");
158 GrPrintf(this->glCaps().dump().c_str()); 158 GrPrintf(this->glCaps().dump().c_str());
159 } 159 }
160 160
161 fProgramCache = SkNEW_ARGS(ProgramCache, (this)); 161 fProgramCache = SkNEW_ARGS(ProgramCache, (this));
162 162
163 SkASSERT(this->glCaps().maxVertexAttributes() >= GrDrawState::kMaxVertexAttr ibCnt); 163 SkASSERT(this->glCaps().maxVertexAttributes() >= GrDrawState::kMaxVertexAttr ibCnt);
164 164
165 fLastSuccessfulStencilFmtIdx = 0; 165 fLastSuccessfulStencilFmtIdx = 0;
166 fHWProgramID = 0; 166 fHWProgramID = 0;
167
168 if (this->glCaps().pathRenderingSupport()) {
169 fPathRendering.reset(GrGLPathRendering::Create(glInterface()));
170 }
171 } 167 }
172 168
173 GrGpuGL::~GrGpuGL() { 169 GrGpuGL::~GrGpuGL() {
174 if (0 != fHWProgramID) { 170 if (0 != fHWProgramID) {
175 // detach the current program so there is no confusion on OpenGL's part 171 // detach the current program so there is no confusion on OpenGL's part
176 // that we want it to be deleted 172 // that we want it to be deleted
177 SkASSERT(fHWProgramID == fCurrentProgram->programID()); 173 SkASSERT(fHWProgramID == fCurrentProgram->programID());
178 GL_CALL(UseProgram(0)); 174 GL_CALL(UseProgram(0));
179 } 175 }
180 176
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID; 315 fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID;
320 } 316 }
321 317
322 if (resetBits & kPathRendering_GrGLBackendState) { 318 if (resetBits & kPathRendering_GrGLBackendState) {
323 if (this->caps()->pathRenderingSupport()) { 319 if (this->caps()->pathRenderingSupport()) {
324 fHWProjectionMatrixState.invalidate(); 320 fHWProjectionMatrixState.invalidate();
325 // we don't use the model view matrix. 321 // we don't use the model view matrix.
326 GL_CALL(MatrixLoadIdentity(GR_GL_MODELVIEW)); 322 GL_CALL(MatrixLoadIdentity(GR_GL_MODELVIEW));
327 323
328 for (int i = 0; i < this->glCaps().maxFixedFunctionTextureCoords(); ++i) { 324 for (int i = 0; i < this->glCaps().maxFixedFunctionTextureCoords(); ++i) {
329 fPathRendering->pathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NU LL); 325 GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
330 fHWPathTexGenSettings[i].fMode = GR_GL_NONE; 326 fHWPathTexGenSettings[i].fMode = GR_GL_NONE;
331 fHWPathTexGenSettings[i].fNumComponents = 0; 327 fHWPathTexGenSettings[i].fNumComponents = 0;
332 } 328 }
333 fHWActivePathTexGenSets = 0; 329 fHWActivePathTexGenSets = 0;
334 } 330 }
335 fHWPathStencilSettings.invalidate(); 331 fHWPathStencilSettings.invalidate();
336 } 332 }
337 333
338 // we assume these values 334 // we assume these values
339 if (resetBits & kPixelStore_GrGLBackendState) { 335 if (resetBits & kPixelStore_GrGLBackendState) {
(...skipping 1531 matching lines...) Expand 10 before | Expand all | Expand 10 after
1871 SkASSERT(NULL != this->drawState()->getRenderTarget()->getStencilBuffer()); 1867 SkASSERT(NULL != this->drawState()->getRenderTarget()->getStencilBuffer());
1872 1868
1873 flushPathStencilSettings(fill); 1869 flushPathStencilSettings(fill);
1874 1870
1875 // Decide how to manipulate the stencil buffer based on the fill rule. 1871 // Decide how to manipulate the stencil buffer based on the fill rule.
1876 SkASSERT(!fHWPathStencilSettings.isTwoSided()); 1872 SkASSERT(!fHWPathStencilSettings.isTwoSided());
1877 1873
1878 GrGLenum fillMode = 1874 GrGLenum fillMode =
1879 gr_stencil_op_to_gl_path_rendering_fill_mode(fHWPathStencilSettings.pass Op(GrStencilSettings::kFront_Face)); 1875 gr_stencil_op_to_gl_path_rendering_fill_mode(fHWPathStencilSettings.pass Op(GrStencilSettings::kFront_Face));
1880 GrGLint writeMask = fHWPathStencilSettings.writeMask(GrStencilSettings::kFro nt_Face); 1876 GrGLint writeMask = fHWPathStencilSettings.writeMask(GrStencilSettings::kFro nt_Face);
1881 fPathRendering->stencilFillPath(id, fillMode, writeMask); 1877 GL_CALL(StencilFillPath(id, fillMode, writeMask));
1882 } 1878 }
1883 1879
1884 void GrGpuGL::onGpuDrawPath(const GrPath* path, SkPath::FillType fill) { 1880 void GrGpuGL::onGpuDrawPath(const GrPath* path, SkPath::FillType fill) {
1885 SkASSERT(this->caps()->pathRenderingSupport()); 1881 SkASSERT(this->caps()->pathRenderingSupport());
1886 1882
1887 GrGLuint id = static_cast<const GrGLPath*>(path)->pathID(); 1883 GrGLuint id = static_cast<const GrGLPath*>(path)->pathID();
1888 SkASSERT(NULL != this->drawState()->getRenderTarget()); 1884 SkASSERT(NULL != this->drawState()->getRenderTarget());
1889 SkASSERT(NULL != this->drawState()->getRenderTarget()->getStencilBuffer()); 1885 SkASSERT(NULL != this->drawState()->getRenderTarget()->getStencilBuffer());
1890 SkASSERT(!fCurrentProgram->hasVertexShader()); 1886 SkASSERT(!fCurrentProgram->hasVertexShader());
1891 1887
1892 flushPathStencilSettings(fill); 1888 flushPathStencilSettings(fill);
1893 const SkStrokeRec& stroke = path->getStroke(); 1889 const SkStrokeRec& stroke = path->getStroke();
1894 1890
1895 SkPath::FillType nonInvertedFill = SkPath::ConvertToNonInverseFillType(fill) ; 1891 SkPath::FillType nonInvertedFill = SkPath::ConvertToNonInverseFillType(fill) ;
1896 SkASSERT(!fHWPathStencilSettings.isTwoSided()); 1892 SkASSERT(!fHWPathStencilSettings.isTwoSided());
1897 GrGLenum fillMode = 1893 GrGLenum fillMode =
1898 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));
1899 GrGLint writeMask = fHWPathStencilSettings.writeMask(GrStencilSettings::kFro nt_Face); 1895 GrGLint writeMask = fHWPathStencilSettings.writeMask(GrStencilSettings::kFro nt_Face);
1900 1896
1901 if (nonInvertedFill == fill) { 1897 if (nonInvertedFill == fill) {
1902 if (stroke.needToApply()) { 1898 if (stroke.needToApply()) {
1903 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) { 1899 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
1904 fPathRendering->stencilFillPath(id, fillMode, writeMask); 1900 GL_CALL(StencilFillPath(id, fillMode, writeMask));
1905 } 1901 }
1906 fPathRendering->stencilThenCoverStrokePath(id, 0xffff, writeMask, GR _GL_BOUNDING_BOX); 1902 GL_CALL(StencilThenCoverStrokePath(id, 0xffff, writeMask, GR_GL_BOUN DING_BOX));
1907 } else { 1903 } else {
1908 fPathRendering->stencilThenCoverFillPath(id, fillMode, writeMask, GR _GL_BOUNDING_BOX); 1904 GL_CALL(StencilThenCoverFillPath(id, fillMode, writeMask, GR_GL_BOUN DING_BOX));
1909 } 1905 }
1910 } else { 1906 } else {
1911 if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke. getStyle()) { 1907 if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke. getStyle()) {
1912 fPathRendering->stencilFillPath(id, fillMode, writeMask); 1908 GL_CALL(StencilFillPath(id, fillMode, writeMask));
1913 } 1909 }
1914 if (stroke.needToApply()) { 1910 if (stroke.needToApply()) {
1915 fPathRendering->stencilStrokePath(id, 0xffff, writeMask); 1911 GL_CALL(StencilStrokePath(id, 0xffff, writeMask));
1916 } 1912 }
1917 1913
1918 GrDrawState* drawState = this->drawState(); 1914 GrDrawState* drawState = this->drawState();
1919 GrDrawState::AutoViewMatrixRestore avmr; 1915 GrDrawState::AutoViewMatrixRestore avmr;
1920 SkRect bounds = SkRect::MakeLTRB(0, 0, 1916 SkRect bounds = SkRect::MakeLTRB(0, 0,
1921 SkIntToScalar(drawState->getRenderTarge t()->width()), 1917 SkIntToScalar(drawState->getRenderTarge t()->width()),
1922 SkIntToScalar(drawState->getRenderTarge t()->height())); 1918 SkIntToScalar(drawState->getRenderTarge t()->height()));
1923 SkMatrix vmi; 1919 SkMatrix vmi;
1924 // mapRect through persp matrix may not be correct 1920 // mapRect through persp matrix may not be correct
1925 if (!drawState->getViewMatrix().hasPerspective() && drawState->getViewIn verse(&vmi)) { 1921 if (!drawState->getViewMatrix().hasPerspective() && drawState->getViewIn verse(&vmi)) {
(...skipping 30 matching lines...) Expand all
1956 SkASSERT(!fHWPathStencilSettings.isTwoSided()); 1952 SkASSERT(!fHWPathStencilSettings.isTwoSided());
1957 GrGLenum fillMode = 1953 GrGLenum fillMode =
1958 gr_stencil_op_to_gl_path_rendering_fill_mode( 1954 gr_stencil_op_to_gl_path_rendering_fill_mode(
1959 fHWPathStencilSettings.passOp(GrStencilSettings::kFront_Face)); 1955 fHWPathStencilSettings.passOp(GrStencilSettings::kFront_Face));
1960 GrGLint writeMask = 1956 GrGLint writeMask =
1961 fHWPathStencilSettings.writeMask(GrStencilSettings::kFront_Face); 1957 fHWPathStencilSettings.writeMask(GrStencilSettings::kFront_Face);
1962 1958
1963 if (nonInvertedFill == fill) { 1959 if (nonInvertedFill == fill) {
1964 if (stroke.needToApply()) { 1960 if (stroke.needToApply()) {
1965 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) { 1961 if (SkStrokeRec::kStrokeAndFill_Style == stroke.getStyle()) {
1966 fPathRendering->stencilFillPathInstanced( 1962 GL_CALL(StencilFillPathInstanced(
1967 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode, 1963 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode ,
1968 writeMask, gXformType2GLType[transformsType] , 1964 writeMask, gXformType2GLType[transformsType],
1969 transforms); 1965 transforms));
1970 } 1966 }
1971 fPathRendering->stencilThenCoverStrokePathInstanced( 1967 GL_CALL(StencilThenCoverStrokePathInstanced(
1972 count, GR_GL_UNSIGNED_INT, indices, baseID, 0xff ff, writeMask, 1968 count, GR_GL_UNSIGNED_INT, indices, baseID, 0xffff, writ eMask,
1973 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES, 1969 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES,
1974 gXformType2GLType[transformsType], transforms); 1970 gXformType2GLType[transformsType], transforms));
1975 } else { 1971 } else {
1976 fPathRendering->stencilThenCoverFillPathInstanced( 1972 GL_CALL(StencilThenCoverFillPathInstanced(
1977 count, GR_GL_UNSIGNED_INT, indices, baseID, fill Mode, writeMask, 1973 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode, wr iteMask,
1978 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES, 1974 GR_GL_BOUNDING_BOX_OF_BOUNDING_BOXES,
1979 gXformType2GLType[transformsType], transforms); 1975 gXformType2GLType[transformsType], transforms));
1980 } 1976 }
1981 } else { 1977 } else {
1982 if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke. getStyle()) { 1978 if (stroke.isFillStyle() || SkStrokeRec::kStrokeAndFill_Style == stroke. getStyle()) {
1983 fPathRendering->stencilFillPathInstanced( 1979 GL_CALL(StencilFillPathInstanced(
1984 count, GR_GL_UNSIGNED_INT, indices, baseID, fill Mode, 1980 count, GR_GL_UNSIGNED_INT, indices, baseID, fillMode,
1985 writeMask, gXformType2GLType[transformsType], 1981 writeMask, gXformType2GLType[transformsType],
1986 transforms); 1982 transforms));
1987 } 1983 }
1988 if (stroke.needToApply()) { 1984 if (stroke.needToApply()) {
1989 fPathRendering->stencilStrokePathInstanced( 1985 GL_CALL(StencilStrokePathInstanced(
1990 count, GR_GL_UNSIGNED_INT, indices, baseID, 0xff ff, 1986 count, GR_GL_UNSIGNED_INT, indices, baseID, 0xffff,
1991 writeMask, gXformType2GLType[transformsType], 1987 writeMask, gXformType2GLType[transformsType],
1992 transforms); 1988 transforms));
1993 } 1989 }
1994 1990
1995 GrDrawState* drawState = this->drawState(); 1991 GrDrawState* drawState = this->drawState();
1996 GrDrawState::AutoViewMatrixRestore avmr; 1992 GrDrawState::AutoViewMatrixRestore avmr;
1997 SkRect bounds = SkRect::MakeLTRB(0, 0, 1993 SkRect bounds = SkRect::MakeLTRB(0, 0,
1998 SkIntToScalar(drawState->getRenderTarge t()->width()), 1994 SkIntToScalar(drawState->getRenderTarge t()->width()),
1999 SkIntToScalar(drawState->getRenderTarge t()->height())); 1995 SkIntToScalar(drawState->getRenderTarge t()->height()));
2000 SkMatrix vmi; 1996 SkMatrix vmi;
2001 // mapRect through persp matrix may not be correct 1997 // mapRect through persp matrix may not be correct
2002 if (!drawState->getViewMatrix().hasPerspective() && drawState->getViewIn verse(&vmi)) { 1998 if (!drawState->getViewMatrix().hasPerspective() && drawState->getViewIn verse(&vmi)) {
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
2200 } 2196 }
2201 2197
2202 void GrGpuGL::flushPathStencilSettings(SkPath::FillType fill) { 2198 void GrGpuGL::flushPathStencilSettings(SkPath::FillType fill) {
2203 GrStencilSettings pathStencilSettings; 2199 GrStencilSettings pathStencilSettings;
2204 this->getPathStencilSettingsForFillType(fill, &pathStencilSettings); 2200 this->getPathStencilSettingsForFillType(fill, &pathStencilSettings);
2205 if (fHWPathStencilSettings != pathStencilSettings) { 2201 if (fHWPathStencilSettings != pathStencilSettings) {
2206 // Just the func, ref, and mask is set here. The op and write mask are p arams to the call 2202 // Just the func, ref, and mask is set here. The op and write mask are p arams to the call
2207 // that draws the path to the SB (glStencilFillPath) 2203 // that draws the path to the SB (glStencilFillPath)
2208 GrGLenum func = 2204 GrGLenum func =
2209 gr_to_gl_stencil_func(pathStencilSettings.func(GrStencilSettings::kF ront_Face)); 2205 gr_to_gl_stencil_func(pathStencilSettings.func(GrStencilSettings::kF ront_Face));
2210 fPathRendering->pathStencilFunc( 2206 GL_CALL(PathStencilFunc(func,
2211 func, pathStencilSettings.funcRef(GrStencilSettings: :kFront_Face), 2207 pathStencilSettings.funcRef(GrStencilSettings::k Front_Face),
2212 pathStencilSettings.funcMask(GrStencilSettings::kFro nt_Face)); 2208 pathStencilSettings.funcMask(GrStencilSettings:: kFront_Face)));
2213 2209
2214 fHWPathStencilSettings = pathStencilSettings; 2210 fHWPathStencilSettings = pathStencilSettings;
2215 } 2211 }
2216 } 2212 }
2217 2213
2218 void GrGpuGL::flushBlend(bool isLines, 2214 void GrGpuGL::flushBlend(bool isLines,
2219 GrBlendCoeff srcCoeff, 2215 GrBlendCoeff srcCoeff,
2220 GrBlendCoeff dstCoeff) { 2216 GrBlendCoeff dstCoeff) {
2221 // Any optimization to disable blending should have already been applied and 2217 // Any optimization to disable blending should have already been applied and
2222 // tweaked the coeffs to (1, 0). 2218 // tweaked the coeffs to (1, 0).
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
2393 if (GR_GL_OBJECT_LINEAR == fHWPathTexGenSettings[unitIdx].fMode && 2389 if (GR_GL_OBJECT_LINEAR == fHWPathTexGenSettings[unitIdx].fMode &&
2394 components == fHWPathTexGenSettings[unitIdx].fNumComponents && 2390 components == fHWPathTexGenSettings[unitIdx].fNumComponents &&
2395 !memcmp(coefficients, fHWPathTexGenSettings[unitIdx].fCoefficients, 2391 !memcmp(coefficients, fHWPathTexGenSettings[unitIdx].fCoefficients,
2396 3 * components * sizeof(GrGLfloat))) { 2392 3 * components * sizeof(GrGLfloat))) {
2397 return; 2393 return;
2398 } 2394 }
2399 2395
2400 this->setTextureUnit(unitIdx); 2396 this->setTextureUnit(unitIdx);
2401 2397
2402 fHWPathTexGenSettings[unitIdx].fNumComponents = components; 2398 fHWPathTexGenSettings[unitIdx].fNumComponents = components;
2403 fPathRendering->pathTexGen(GR_GL_TEXTURE0 + unitIdx, 2399 GL_CALL(PathTexGen(GR_GL_TEXTURE0 + unitIdx,
2404 GR_GL_OBJECT_LINEAR, 2400 GR_GL_OBJECT_LINEAR,
2405 components, 2401 components,
2406 coefficients); 2402 coefficients));
2407 2403
2408 memcpy(fHWPathTexGenSettings[unitIdx].fCoefficients, coefficients, 2404 memcpy(fHWPathTexGenSettings[unitIdx].fCoefficients, coefficients,
2409 3 * components * sizeof(GrGLfloat)); 2405 3 * components * sizeof(GrGLfloat));
2410 } 2406 }
2411 2407
2412 void GrGpuGL::enablePathTexGen(int unitIdx, PathTexGenComponents components, 2408 void GrGpuGL::enablePathTexGen(int unitIdx, PathTexGenComponents components,
2413 const SkMatrix& matrix) { 2409 const SkMatrix& matrix) {
2414 GrGLfloat coefficients[3 * 3]; 2410 GrGLfloat coefficients[3 * 3];
2415 SkASSERT(this->glCaps().pathRenderingSupport()); 2411 SkASSERT(this->glCaps().pathRenderingSupport());
2416 SkASSERT(components >= kS_PathTexGenComponents && 2412 SkASSERT(components >= kS_PathTexGenComponents &&
(...skipping 28 matching lines...) Expand all
2445 SkDEBUGCODE( 2441 SkDEBUGCODE(
2446 for (int i = 0; i < numUsedTexCoordSets; i++) { 2442 for (int i = 0; i < numUsedTexCoordSets; i++) {
2447 SkASSERT(0 != fHWPathTexGenSettings[i].fNumComponents); 2443 SkASSERT(0 != fHWPathTexGenSettings[i].fNumComponents);
2448 } 2444 }
2449 ); 2445 );
2450 2446
2451 for (int i = numUsedTexCoordSets; i < fHWActivePathTexGenSets; i++) { 2447 for (int i = numUsedTexCoordSets; i < fHWActivePathTexGenSets; i++) {
2452 SkASSERT(0 != fHWPathTexGenSettings[i].fNumComponents); 2448 SkASSERT(0 != fHWPathTexGenSettings[i].fNumComponents);
2453 2449
2454 this->setTextureUnit(i); 2450 this->setTextureUnit(i);
2455 fPathRendering->pathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL); 2451 GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
2456 fHWPathTexGenSettings[i].fNumComponents = 0; 2452 fHWPathTexGenSettings[i].fNumComponents = 0;
2457 } 2453 }
2458 2454
2459 fHWActivePathTexGenSets = numUsedTexCoordSets; 2455 fHWActivePathTexGenSets = numUsedTexCoordSets;
2460 } 2456 }
2461 2457
2462 void GrGpuGL::flushMiscFixedFunctionState() { 2458 void GrGpuGL::flushMiscFixedFunctionState() {
2463 2459
2464 const GrDrawState& drawState = this->getDrawState(); 2460 const GrDrawState& drawState = this->getDrawState();
2465 2461
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2501 case GrDrawState::kBoth_DrawFace: 2497 case GrDrawState::kBoth_DrawFace:
2502 GL_CALL(Disable(GR_GL_CULL_FACE)); 2498 GL_CALL(Disable(GR_GL_CULL_FACE));
2503 break; 2499 break;
2504 default: 2500 default:
2505 SkFAIL("Unknown draw face."); 2501 SkFAIL("Unknown draw face.");
2506 } 2502 }
2507 fHWDrawFace = drawState.getDrawFace(); 2503 fHWDrawFace = drawState.getDrawFace();
2508 } 2504 }
2509 } 2505 }
2510 2506
2507 GrGLuint GrGpuGL::createGLPathObject() {
2508 if (NULL == fPathNameAllocator.get()) {
2509 static const int range = 65536;
2510 GrGLuint firstName;
2511 GL_CALL_RET(firstName, GenPaths(range));
2512 fPathNameAllocator.reset(SkNEW_ARGS(GrGLNameAllocator, (firstName, first Name + range)));
2513 }
2514
2515 GrGLuint name = fPathNameAllocator->allocateName();
2516 if (0 == name) {
2517 // Our reserved path names are all in use. Fall back on GenPaths.
2518 GL_CALL_RET(name, GenPaths(1));
2519 }
2520
2521 return name;
2522 }
2523
2524 void GrGpuGL::deleteGLPathObject(GrGLuint name) {
2525 if (NULL == fPathNameAllocator.get() ||
2526 name < fPathNameAllocator->firstName() ||
2527 name >= fPathNameAllocator->endName()) {
2528 // If we aren't inside fPathNameAllocator's range then this name was
2529 // generated by the GenPaths fallback (or else the name is unallocated).
2530 GL_CALL(DeletePaths(name, 1));
2531 return;
2532 }
2533
2534 // Make the path empty to save memory, but don't free the name in the driver .
2535 GL_CALL(PathCommands(name, 0, NULL, 0, GR_GL_FLOAT, NULL));
2536 fPathNameAllocator->free(name);
2537 }
2538
2511 bool GrGpuGL::configToGLFormats(GrPixelConfig config, 2539 bool GrGpuGL::configToGLFormats(GrPixelConfig config,
2512 bool getSizedInternalFormat, 2540 bool getSizedInternalFormat,
2513 GrGLenum* internalFormat, 2541 GrGLenum* internalFormat,
2514 GrGLenum* externalFormat, 2542 GrGLenum* externalFormat,
2515 GrGLenum* externalType) { 2543 GrGLenum* externalType) {
2516 GrGLenum dontCare; 2544 GrGLenum dontCare;
2517 if (NULL == internalFormat) { 2545 if (NULL == internalFormat) {
2518 internalFormat = &dontCare; 2546 internalFormat = &dontCare;
2519 } 2547 }
2520 if (NULL == externalFormat) { 2548 if (NULL == externalFormat) {
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
2960 this->setVertexArrayID(gpu, 0); 2988 this->setVertexArrayID(gpu, 0);
2961 } 2989 }
2962 int attrCount = gpu->glCaps().maxVertexAttributes(); 2990 int attrCount = gpu->glCaps().maxVertexAttributes();
2963 if (fDefaultVertexArrayAttribState.count() != attrCount) { 2991 if (fDefaultVertexArrayAttribState.count() != attrCount) {
2964 fDefaultVertexArrayAttribState.resize(attrCount); 2992 fDefaultVertexArrayAttribState.resize(attrCount);
2965 } 2993 }
2966 attribState = &fDefaultVertexArrayAttribState; 2994 attribState = &fDefaultVertexArrayAttribState;
2967 } 2995 }
2968 return attribState; 2996 return attribState;
2969 } 2997 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGpuGL.h ('k') | src/gpu/gl/GrGpuGL_program.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698