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

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

Issue 23537028: Enable vertexless shading when path rendering is supported (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 3 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
Index: src/gpu/gl/GrGLEffectMatrix.cpp
diff --git a/src/gpu/gl/GrGLEffectMatrix.cpp b/src/gpu/gl/GrGLEffectMatrix.cpp
index ef3812e0fbb7c87e9f4ef4b243a613cfaafd7515..9c333cd2d06c1e25357e459706f3d698c6879f9b 100644
--- a/src/gpu/gl/GrGLEffectMatrix.cpp
+++ b/src/gpu/gl/GrGLEffectMatrix.cpp
@@ -48,10 +48,6 @@ GrSLType GrGLEffectMatrix::emitCode(GrGLShaderBuilder* builder,
SkString* fsCoordName,
SkString* vsCoordName,
const char* suffix) {
- // TODO: Handle vertexless shaders here before we start enabling them.
- GrGLShaderBuilder::VertexBuilder* vertexBuilder = builder->getVertexBuilder();
- SkASSERT(NULL != vertexBuilder);
-
GrSLType varyingType = kVoid_GrSLType;
const char* uniName;
key &= kKeyMask;
@@ -78,6 +74,16 @@ GrSLType GrGLEffectMatrix::emitCode(GrGLShaderBuilder* builder,
default:
GrCrash("Unexpected key.");
}
+
+ GrGLShaderBuilder::VertexBuilder* vertexBuilder = builder->getVertexBuilder();
+ if (NULL == vertexBuilder) {
+ if (vsCoordName) {
+ vsCoordName->reset();
+ }
+ builder->addTexGenUnit(varyingType, fsCoordName, &fTexGenUnit, &fNumTexGenComponents);
+ return varyingType;
+ }
+
SkString suffixedUniName;
if (NULL != suffix) {
suffixedUniName.append(uniName);
@@ -193,7 +199,7 @@ void GrGLEffectMatrix::setData(const GrGLUniformManager& uniformManager,
const SkMatrix& matrix,
const GrDrawEffect& drawEffect,
const GrTexture* texture) {
- SkASSERT(fUni.isValid() != (kVoid_GrSLType == fUniType));
+ SkASSERT(fUni.isValid() != (fTexGenUnit >= 0 || kVoid_GrSLType == fUniType));
const SkMatrix& coordChangeMatrix = GrEffect::kLocal_CoordsType == fCoordsType ?
drawEffect.getCoordChangeMatrix() :
SkMatrix::I();
@@ -202,14 +208,25 @@ void GrGLEffectMatrix::setData(const GrGLUniformManager& uniformManager,
SkASSERT(matrix.isIdentity());
SkASSERT(coordChangeMatrix.isIdentity());
SkASSERT(NULL == texture || kTopLeft_GrSurfaceOrigin == texture->origin());
+ if (fTexGenUnit >= 0) {
+ SkASSERT(fNumTexGenComponents == 2);
+ GrGLfloat texgenCoefficients[] = {1, 0, 0,
+ 0, 1, 0};
+ uniformManager.enableGlobalTexGen(fTexGenUnit, 2, texgenCoefficients);
+ }
return;
case kVec2f_GrSLType: {
SkASSERT(SkMatrix::kTranslate_Mask == (matrix.getType() | coordChangeMatrix.getType()));
SkASSERT(NULL == texture || kTopLeft_GrSurfaceOrigin == texture->origin());
SkScalar tx = matrix[SkMatrix::kMTransX] + (coordChangeMatrix)[SkMatrix::kMTransX];
SkScalar ty = matrix[SkMatrix::kMTransY] + (coordChangeMatrix)[SkMatrix::kMTransY];
- if (fPrevMatrix.get(SkMatrix::kMTransX) != tx ||
- fPrevMatrix.get(SkMatrix::kMTransY) != ty) {
+ if (fTexGenUnit >= 0) {
+ SkASSERT(fNumTexGenComponents == 2);
+ GrGLfloat texgenCoefficients[] = {1, 0, SkScalarToFloat(tx),
+ 0, 1, SkScalarToFloat(ty)};
+ uniformManager.enableGlobalTexGen(fTexGenUnit, 2, texgenCoefficients);
+ } else if (fPrevMatrix.get(SkMatrix::kMTransX) != tx ||
+ fPrevMatrix.get(SkMatrix::kMTransY) != ty) {
uniformManager.set2f(fUni, tx, ty);
fPrevMatrix.set(SkMatrix::kMTransX, tx);
fPrevMatrix.set(SkMatrix::kMTransY, ty);
@@ -229,7 +246,9 @@ void GrGLEffectMatrix::setData(const GrGLUniformManager& uniformManager,
combined.set(SkMatrix::kMTransY,
combined[SkMatrix::kMPersp2] - combined[SkMatrix::kMTransY]);
}
- if (!fPrevMatrix.cheapEqualTo(combined)) {
+ if (fTexGenUnit >= 0) {
+ uniformManager.enableGlobalTexGen(fTexGenUnit, fNumTexGenComponents, combined);
+ } else if (!fPrevMatrix.cheapEqualTo(combined)) {
uniformManager.setSkMatrix(fUni, combined);
fPrevMatrix = combined;
}

Powered by Google App Engine
This is Rietveld 408576698