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

Unified Diff: src/gpu/gl/GrGpuGL.cpp

Issue 212753002: Use fixed function pipeline only when drawing paths (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 8 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGpuGL.cpp
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
index a2a6ac3b3bc30936dfdf268dc7fb49a5f6aac0bb..f24a38fceca11e139456314f418ad825fe69e32c 100644
--- a/src/gpu/gl/GrGpuGL.cpp
+++ b/src/gpu/gl/GrGpuGL.cpp
@@ -120,7 +120,7 @@ GrGpuGL::GrGpuGL(const GrGLContext& ctx, GrContext* context)
fCaps.reset(SkRef(ctx.caps()));
fHWBoundTextures.reset(this->glCaps().maxFragmentTextureUnits());
- fHWTexGenSettings.reset(this->glCaps().maxFixedFunctionTextureCoords());
+ fHWPathTexGenSettings.reset(this->glCaps().maxFixedFunctionTextureCoords());
GrGLClearErr(fGLContext.interface());
if (gPrintStartupSpew) {
@@ -300,30 +300,21 @@ void GrGpuGL::onResetContext(uint32_t resetBits) {
fHWBoundRenderTarget = NULL;
}
- if (resetBits & (kFixedFunction_GrGLBackendState | kPathRendering_GrGLBackendState)) {
- if (this->glCaps().fixedFunctionSupport()) {
+ if (resetBits & kPathRendering_GrGLBackendState) {
+ if (this->caps()->pathRenderingSupport()) {
fHWProjectionMatrixState.invalidate();
// we don't use the model view matrix.
GL_CALL(MatrixMode(GR_GL_MODELVIEW));
GL_CALL(LoadIdentity());
for (int i = 0; i < this->glCaps().maxFixedFunctionTextureCoords(); ++i) {
- GL_CALL(ActiveTexture(GR_GL_TEXTURE0 + i));
- GL_CALL(Disable(GR_GL_TEXTURE_GEN_S));
- GL_CALL(Disable(GR_GL_TEXTURE_GEN_T));
- GL_CALL(Disable(GR_GL_TEXTURE_GEN_Q));
- GL_CALL(Disable(GR_GL_TEXTURE_GEN_R));
- if (this->caps()->pathRenderingSupport()) {
- GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
- }
- fHWTexGenSettings[i].fMode = GR_GL_NONE;
- fHWTexGenSettings[i].fNumComponents = 0;
+ GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
+ fHWPathTexGenSettings[i].fMode = GR_GL_NONE;
+ fHWPathTexGenSettings[i].fNumComponents = 0;
}
- fHWActiveTexGenSets = 0;
- }
- if (this->caps()->pathRenderingSupport()) {
- fHWPathStencilSettings.invalidate();
+ fHWActivePathTexGenSets = 0;
}
+ fHWPathStencilSettings.invalidate();
}
// we assume these values
@@ -2230,7 +2221,7 @@ void GrGpuGL::setProjectionMatrix(const SkMatrix& matrix,
const SkISize& renderTargetSize,
GrSurfaceOrigin renderTargetOrigin) {
- SkASSERT(this->glCaps().fixedFunctionSupport());
+ SkASSERT(this->glCaps().pathRenderingSupport());
if (renderTargetOrigin == fHWProjectionMatrixState.fRenderTargetOrigin &&
renderTargetSize == fHWProjectionMatrixState.fRenderTargetSize &&
@@ -2248,109 +2239,81 @@ void GrGpuGL::setProjectionMatrix(const SkMatrix& matrix,
GL_CALL(LoadMatrixf(glMatrix));
}
-void GrGpuGL::enableTexGen(int unitIdx,
- TexGenComponents components,
- const GrGLfloat* coefficients) {
- SkASSERT(this->glCaps().fixedFunctionSupport());
- SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenComponents);
+void GrGpuGL::enablePathTexGen(int unitIdx,
+ PathTexGenComponents components,
+ const GrGLfloat* coefficients) {
+ SkASSERT(this->glCaps().pathRenderingSupport());
+ SkASSERT(components >= kS_PathTexGenComponents &&
+ components <= kSTR_PathTexGenComponents);
SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= unitIdx);
- if (GR_GL_OBJECT_LINEAR == fHWTexGenSettings[unitIdx].fMode &&
- components == fHWTexGenSettings[unitIdx].fNumComponents &&
- !memcmp(coefficients, fHWTexGenSettings[unitIdx].fCoefficients,
+ if (GR_GL_OBJECT_LINEAR == fHWPathTexGenSettings[unitIdx].fMode &&
+ components == fHWPathTexGenSettings[unitIdx].fNumComponents &&
+ !memcmp(coefficients, fHWPathTexGenSettings[unitIdx].fCoefficients,
3 * components * sizeof(GrGLfloat))) {
return;
}
this->setTextureUnit(unitIdx);
- if (GR_GL_OBJECT_LINEAR != fHWTexGenSettings[unitIdx].fMode) {
- for (int i = 0; i < 4; i++) {
- GL_CALL(TexGeni(GR_GL_S + i, GR_GL_TEXTURE_GEN_MODE, GR_GL_OBJECT_LINEAR));
- }
- fHWTexGenSettings[unitIdx].fMode = GR_GL_OBJECT_LINEAR;
- }
-
- for (int i = fHWTexGenSettings[unitIdx].fNumComponents; i < components; i++) {
- GL_CALL(Enable(GR_GL_TEXTURE_GEN_S + i));
- }
- for (int i = components; i < fHWTexGenSettings[unitIdx].fNumComponents; i++) {
- GL_CALL(Disable(GR_GL_TEXTURE_GEN_S + i));
- }
- fHWTexGenSettings[unitIdx].fNumComponents = components;
-
- for (int i = 0; i < components; i++) {
- GrGLfloat plane[] = {coefficients[0 + 3 * i],
- coefficients[1 + 3 * i],
- 0,
- coefficients[2 + 3 * i]};
- GL_CALL(TexGenfv(GR_GL_S + i, GR_GL_OBJECT_PLANE, plane));
- }
+ fHWPathTexGenSettings[unitIdx].fNumComponents = components;
+ GL_CALL(PathTexGen(GR_GL_TEXTURE0 + unitIdx,
+ GR_GL_OBJECT_LINEAR,
+ components,
+ coefficients));
- if (this->caps()->pathRenderingSupport()) {
- GL_CALL(PathTexGen(GR_GL_TEXTURE0 + unitIdx,
- GR_GL_OBJECT_LINEAR,
- components,
- coefficients));
- }
-
- memcpy(fHWTexGenSettings[unitIdx].fCoefficients, coefficients,
+ memcpy(fHWPathTexGenSettings[unitIdx].fCoefficients, coefficients,
3 * components * sizeof(GrGLfloat));
}
-void GrGpuGL::enableTexGen(int unitIdx, TexGenComponents components, const SkMatrix& matrix) {
+void GrGpuGL::enablePathTexGen(int unitIdx, PathTexGenComponents components,
+ const SkMatrix& matrix) {
GrGLfloat coefficients[3 * 3];
- SkASSERT(this->glCaps().fixedFunctionSupport());
- SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenComponents);
+ SkASSERT(this->glCaps().pathRenderingSupport());
+ SkASSERT(components >= kS_PathTexGenComponents &&
+ components <= kSTR_PathTexGenComponents);
coefficients[0] = SkScalarToFloat(matrix[SkMatrix::kMScaleX]);
coefficients[1] = SkScalarToFloat(matrix[SkMatrix::kMSkewX]);
coefficients[2] = SkScalarToFloat(matrix[SkMatrix::kMTransX]);
- if (components >= kST_TexGenComponents) {
+ if (components >= kST_PathTexGenComponents) {
coefficients[3] = SkScalarToFloat(matrix[SkMatrix::kMSkewY]);
coefficients[4] = SkScalarToFloat(matrix[SkMatrix::kMScaleY]);
coefficients[5] = SkScalarToFloat(matrix[SkMatrix::kMTransY]);
}
- if (components >= kSTR_TexGenComponents) {
+ if (components >= kSTR_PathTexGenComponents) {
coefficients[6] = SkScalarToFloat(matrix[SkMatrix::kMPersp0]);
coefficients[7] = SkScalarToFloat(matrix[SkMatrix::kMPersp1]);
coefficients[8] = SkScalarToFloat(matrix[SkMatrix::kMPersp2]);
}
- enableTexGen(unitIdx, components, coefficients);
+ enablePathTexGen(unitIdx, components, coefficients);
}
-void GrGpuGL::flushTexGenSettings(int numUsedTexCoordSets) {
- SkASSERT(this->glCaps().fixedFunctionSupport());
+void GrGpuGL::flushPathTexGenSettings(int numUsedTexCoordSets) {
+ SkASSERT(this->glCaps().pathRenderingSupport());
SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= numUsedTexCoordSets);
- // Only write the inactive tex gens, since active tex gens were written
- // when they were enabled.
+ // Only write the inactive path tex gens, since active path tex gens were
+ // written when they were enabled.
SkDEBUGCODE(
for (int i = 0; i < numUsedTexCoordSets; i++) {
- SkASSERT(0 != fHWTexGenSettings[i].fNumComponents);
+ SkASSERT(0 != fHWPathTexGenSettings[i].fNumComponents);
}
);
- for (int i = numUsedTexCoordSets; i < fHWActiveTexGenSets; i++) {
- SkASSERT(0 != fHWTexGenSettings[i].fNumComponents);
+ for (int i = numUsedTexCoordSets; i < fHWActivePathTexGenSets; i++) {
+ SkASSERT(0 != fHWPathTexGenSettings[i].fNumComponents);
this->setTextureUnit(i);
- for (int j = 0; j < fHWTexGenSettings[i].fNumComponents; j++) {
- GL_CALL(Disable(GR_GL_TEXTURE_GEN_S + j));
- }
-
- if (this->caps()->pathRenderingSupport()) {
- GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
- }
-
- fHWTexGenSettings[i].fNumComponents = 0;
+ GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
+ fHWPathTexGenSettings[i].fNumComponents = 0;
}
- fHWActiveTexGenSets = numUsedTexCoordSets;
+ fHWActivePathTexGenSets = numUsedTexCoordSets;
}
void GrGpuGL::flushMiscFixedFunctionState() {
« 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