Index: src/core/SkLightingShader.h |
diff --git a/src/core/SkLightingShader.h b/src/core/SkLightingShader.h |
index e21b94266eebdb970a7400f5431bb3c698b68018..c2b65472b924f35d5d757ca751d1aae6fdf0b9ed 100644 |
--- a/src/core/SkLightingShader.h |
+++ b/src/core/SkLightingShader.h |
@@ -16,6 +16,55 @@ |
class SK_API SkLightingShader { |
public: |
+ /** Abstract class that generates or reads in normals for use by SkLightingShader. Currently |
+ implements the GPU side only. Not to be used as part of the API yet. Used internally by |
+ SkLightingShader. |
+ */ |
+ class SK_API NormalSource : public SkFlattenable { |
+ public: |
+ virtual ~NormalSource(); |
+ |
+#if SK_SUPPORT_GPU |
+ /** Returns a fragment processor that takes no input and outputs a normal (already rotated) |
+ as its output color. To be used as a child fragment processor. |
+ */ |
+ virtual sk_sp<GrFragmentProcessor> asFragmentProcessor( |
+ GrContext* context, |
+ const SkMatrix& viewM, |
+ const SkMatrix* localMatrix, |
+ SkFilterQuality filterQuality, |
+ SkSourceGammaTreatment gammaTreatment) const = 0; |
+#endif |
+ |
+ /** Returns a normal source that provides normals sourced from the the normal map argument. |
+ Not to be used as part of the API yet. Used internally by SkLightingShader. |
+ |
+ @param normal the normal map |
+ @param invNormRotation rotation applied to the normal map's normals |
+ @param normLocalM the local matrix for the normal map |
+ |
+ nullptr will be returned if |
+ 'normal' is empty |
+ 'normal' too big (> 65535 on either side) |
+ |
+ The normal map is currently assumed to be an 8888 image where the normal at a texel |
+ is retrieved by: |
+ N.x = R-127; |
+ N.y = G-127; |
+ N.z = B-127; |
+ N.normalize(); |
+ The +Z axis is thus encoded in RGB as (127, 127, 255) while the -Z axis is |
+ (127, 127, 0). |
+ */ |
+ static sk_sp<NormalSource> MakeMap(const SkBitmap& normal, const SkVector& invNormRotation, |
+ const SkMatrix* normLocalM); |
+ |
+ SK_DEFINE_FLATTENABLE_TYPE(NormalSource) |
+ SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() |
+ }; |
+ |
+ |
+ |
/** Returns a shader that lights the diffuse and normal maps with a set of lights. |
It returns a shader with a reference count of 1. |
@@ -25,12 +74,8 @@ |
@param normal the normal map |
@param lights the lights applied to the normal map |
@param invNormRotation rotation applied to the normal map's normals |
- @param diffLocalMatrix the local matrix for the diffuse map (transform from |
- texture coordinates to shape source coordinates). nullptr is |
- interpreted as an identity matrix. |
- @param normLocalMatrix the local matrix for the normal map (transform from |
- texture coordinates to shape source coordinates). nullptr is |
- interpreted as an identity matrix. |
+ @param diffLocalMatrix the local matrix for the diffuse texture |
+ @param normLocalMatrix the local matrix for the normal map |
nullptr will be returned if: |
either 'diffuse' or 'normal' are empty |