aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/GrGLSL.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/gl/GrGLSL.cpp')
-rw-r--r--src/gpu/gl/GrGLSL.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/gpu/gl/GrGLSL.cpp b/src/gpu/gl/GrGLSL.cpp
index c995a34652..079c08232f 100644
--- a/src/gpu/gl/GrGLSL.cpp
+++ b/src/gpu/gl/GrGLSL.cpp
@@ -115,6 +115,7 @@ GrSLConstantVec GrGLSLModulate4f(SkString* outAppend,
outAppend->append(GrGLSLZerosVecf(4));
return kZeros_GrSLConstantVec;
} else {
+ // both inputs are ones vectors
outAppend->append(GrGLSLOnesVecf(4));
return kOnes_GrSLConstantVec;
}
@@ -142,6 +143,43 @@ GrSLConstantVec GrGLSLModulate4f(SkString* outAppend,
}
}
+namespace {
+void append_tabs(SkString* outAppend, int tabCnt) {
+ static const char kTabs[] = "\t\t\t\t\t\t\t\t";
+ while (tabCnt) {
+ int cnt = GrMin((int)GR_ARRAY_COUNT(kTabs), tabCnt);
+ outAppend->append(kTabs, cnt);
+ tabCnt -= cnt;
+ }
+}
+}
+
+GrSLConstantVec GrGLSLMulVarBy4f(SkString* outAppend,
+ int tabCnt,
+ const char* vec4VarName,
+ const char* mulFactor,
+ GrSLConstantVec mulFactorDefault) {
+ bool haveFactor = NULL != mulFactor && '\0' != *mulFactor;
+
+ GrAssert(NULL != outAppend);
+ GrAssert(NULL != vec4VarName);
+ GrAssert(kNone_GrSLConstantVec != mulFactorDefault || haveFactor);
+
+ if (!haveFactor) {
+ if (kOnes_GrSLConstantVec == mulFactorDefault) {
+ return kNone_GrSLConstantVec;
+ } else {
+ GrAssert(kZeros_GrSLConstantVec == mulFactorDefault);
+ append_tabs(outAppend, tabCnt);
+ outAppend->appendf("%s = vec4(0, 0, 0, 0);\n", vec4VarName);
+ return kZeros_GrSLConstantVec;
+ }
+ }
+ append_tabs(outAppend, tabCnt);
+ outAppend->appendf("%s *= %s;\n", vec4VarName, mulFactor);
+ return kNone_GrSLConstantVec;
+}
+
GrSLConstantVec GrGLSLAdd4f(SkString* outAppend,
const char* in0,
const char* in1,