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

Unified Diff: src/gpu/gl/GrGLSL.h

Issue 13895006: Expand modulate, add, subtract, extract component glsl helpers. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 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/GrGLProgram.cpp ('k') | src/gpu/gl/GrGLSL.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLSL.h
===================================================================
--- src/gpu/gl/GrGLSL.h (revision 8735)
+++ src/gpu/gl/GrGLSL.h (working copy)
@@ -9,6 +9,7 @@
#define GrGLSL_DEFINED
#include "gl/GrGLInterface.h"
+#include "GrColor.h"
#include "GrTypesPriv.h"
class GrGLShaderVar;
@@ -103,10 +104,38 @@
bool GrGLSLSetupFSColorOuput(GrGLSLGeneration gen,
const char* nameIfDeclared,
GrGLShaderVar* var);
+/**
+ * Converts a GrSLType to a string containing the name of the equivalent GLSL type.
+ */
+static const char* GrGLSLTypeString(GrSLType t) {
+ switch (t) {
+ case kVoid_GrSLType:
+ return "void";
+ case kFloat_GrSLType:
+ return "float";
+ case kVec2f_GrSLType:
+ return "vec2";
+ case kVec3f_GrSLType:
+ return "vec3";
+ case kVec4f_GrSLType:
+ return "vec4";
+ case kMat33f_GrSLType:
+ return "mat3";
+ case kMat44f_GrSLType:
+ return "mat4";
+ case kSampler2D_GrSLType:
+ return "sampler2D";
+ default:
+ GrCrash("Unknown shader var type.");
+ return ""; // suppress warning
+ }
+}
-/** Convert a count of 1..n floats into the corresponding type enum,
- e.g. 1 -> kFloat_GrSLType, 2 -> kVec2_GrSLType, ... */
-GrSLType GrSLFloatVectorType(int count);
+/** Return the type enum for a vector of floats of length n (1..4),
+ e.g. 1 -> "float", 2 -> "vec2", ... */
+static inline const char* GrGLSLFloatVectorTypeString(int n) {
+ return GrGLSLTypeString(GrSLFloatVectorType(n));
+}
/** Return the GLSL swizzle operator for a homogenous component of a vector
with the given number of coordinates, e.g. 2 -> ".y", 3 -> ".z" */
@@ -119,21 +148,60 @@
const char* GrGLSLVectorNonhomogCoords(GrSLType type);
/**
- * Produces a string that is the result of modulating two inputs. The inputs must be vec4 or
- * float. The result is always a vec4. The inputs may be expressions, not just identifier names.
- * Either can be NULL or "" in which case the default params control whether vec4(1,1,1,1) or
- * vec4(0,0,0,0) is assumed. It is an error to pass kNone for default<i> if in<i> is NULL or "".
- * Note that when if function determines that the result is a zeros or ones vec then any expression
- * represented by in0 or in1 will not be emitted. The return value indicates whether a zeros, ones
- * or neither was appended.
+ * Produces a string that is the result of modulating two inputs. The inputs must be vecN or
+ * float. The result is always a vecN. The inputs may be expressions, not just identifier names.
+ * Either can be NULL or "" in which case the default params control whether a vector of ones or
+ * zeros. It is an error to pass kNone for default<i> if in<i> is NULL or "". Note that when if
+ * function determines that the result is a zeros or ones vec then any expression represented by
+ * or in1 will not be emitted (side effects won't occur). The return value indicates whether a
+ * known zeros or ones vector resulted. The output can be supressed when known vector is produced
+ * by passing true for omitIfConstVec.
*/
-GrSLConstantVec GrGLSLModulate4f(SkString* outAppend,
- const char* in0,
- const char* in1,
- GrSLConstantVec default0 = kOnes_GrSLConstantVec,
- GrSLConstantVec default1 = kOnes_GrSLConstantVec);
+template <int N>
+GrSLConstantVec GrGLSLModulatef(SkString* outAppend,
+ const char* in0,
+ const char* in1,
+ GrSLConstantVec default0 = kOnes_GrSLConstantVec,
+ GrSLConstantVec default1 = kOnes_GrSLConstantVec,
+ bool omitIfConstVec = false);
/**
+ * Produces a string that is the result of adding two inputs. The inputs must be vecN or
+ * float. The result is always a vecN. The inputs may be expressions, not just identifier names.
+ * Either can be NULL or "" in which case the default params control whether a vector of ones or
+ * zeros. It is an error to pass kNone for default<i> if in<i> is NULL or "". Note that when if
+ * function determines that the result is a zeros or ones vec then any expression represented by
+ * or in1 will not be emitted (side effects won't occur). The return value indicates whether a
+ * known zeros or ones vector resulted. The output can be supressed when known vector is produced
+ * by passing true for omitIfConstVec.
+ */
+template <int N>
+GrSLConstantVec GrGLSLAddf(SkString* outAppend,
+ const char* in0,
+ const char* in1,
+ GrSLConstantVec default0 = kZeros_GrSLConstantVec,
+ GrSLConstantVec default1 = kZeros_GrSLConstantVec,
+ bool omitIfConstVec = false);
+
+/**
+ * Produces a string that is the result of adding two inputs. The inputs must be vecN or
+ * float. The result is always a vecN. The inputs may be expressions, not just identifier names.
+ * Either can be NULL or "" in which case the default params control whether a vector of ones or
+ * zeros. It is an error to pass kNone for default<i> if in<i> is NULL or "". Note that when if
+ * function determines that the result is a zeros or ones vec then any expression represented by
+ * or in1 will not be emitted (side effects won't occur). The return value indicates whether a
+ * known zeros or ones vector resulted. The output can be supressed when known vector is produced
+ * by passing true for omitIfConstVec.
+ */
+template <int N>
+GrSLConstantVec GrGLSLSubtractf(SkString* outAppend,
+ const char* in0,
+ const char* in1,
+ GrSLConstantVec default0 = kZeros_GrSLConstantVec,
+ GrSLConstantVec default1 = kZeros_GrSLConstantVec,
+ bool omitIfConstVec = false);
+
+/**
* Does an inplace mul, *=, of vec4VarName by mulFactor. If mulFactorDefault is not kNone then
* mulFactor may be either "" or NULL. In this case either nothing will be appended (kOnes) or an
* assignment of vec(0,0,0,0) will be appended (kZeros). The assignment is prepended by tabCnt tabs.
@@ -148,18 +216,14 @@
GrSLConstantVec mulFactorDefault = kOnes_GrSLConstantVec);
/**
- * Produces a string that is the result of adding two inputs. The inputs must be vec4 or float.
- * The result is always a vec4. The inputs may be expressions, not just identifier names. Either
- * can be NULL or "" in which case if the default is kZeros then vec4(0,0,0,0) is assumed. It is an
- * error to pass kOnes for either default or to pass kNone for default<i> if in<i> is NULL or "".
- * Note that if the function determines that the result is a zeros vec any expression represented
- * by in0 or in1 will not be emitted. The return value indicates whether a zeros vec was appended
- * or not.
- */
-GrSLConstantVec GrGLSLAdd4f(SkString* outAppend,
- const char* in0,
- const char* in1,
- GrSLConstantVec default0 = kZeros_GrSLConstantVec,
- GrSLConstantVec default1 = kZeros_GrSLConstantVec);
+ * Given an expression that evaluates to a GLSL vec4, extract a component. If
+ */
+GrSLConstantVec GrGLSLGetComponent4f(SkString* outAppend,
+ const char* expr,
+ GrColorComponentFlags component,
+ GrSLConstantVec defaultExpr = kNone_GrSLConstantVec,
+ bool omitIfConst = false);
+#include "GrGLSL_impl.h"
+
#endif
« no previous file with comments | « src/gpu/gl/GrGLProgram.cpp ('k') | src/gpu/gl/GrGLSL.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698