Chromium Code Reviews| 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 |
|
robertphillips
2013/04/18 19:12:24
if -> the? Here and in other two.
bsalomon
2013/04/18 19:36:37
Done.
|
| + * 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 |
|
robertphillips
2013/04/18 19:12:24
is suppressed spelled correctly? Here and in other
bsalomon
2013/04/18 19:36:37
Done.
|
| + * 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); |
| + |
| +/** |
|
robertphillips
2013/04/18 19:12:24
subtracting?
bsalomon
2013/04/18 19:36:37
Done.
|
| + * 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); |
| /** |
|
robertphillips
2013/04/18 19:12:24
If ...?
bsalomon
2013/04/18 19:36:37
/**
* Given an expression that evaluates to a GLS
|
| - * 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 |