Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / core / SkDistanceFieldGen.h
index 3d2ec23..0510907 100644 (file)
@@ -7,19 +7,55 @@
 #ifndef SkDistanceFieldGen_DEFINED
 #define SkDistanceFieldGen_DEFINED
 
+#include "SkTypes.h"
+
+// the max magnitude for the distance field
+// distance values are limited to the range [-SK_DistanceFieldMagnitude, SK_DistanceFieldMagnitude)
+#define SK_DistanceFieldMagnitude   4
+// we need to pad around the original glyph to allow our maximum distance of
+// SK_DistanceFieldMagnitude texels away from any edge
+#define SK_DistanceFieldPad         4
+// the rect we render with is inset from the distance field glyph size to allow for bilerp
+#define SK_DistanceFieldInset       2
+
+// for the fragment shader
+// The distance field is constructed as unsigned char values, so that the zero value is at 128,
+// and the range is [-4, 4 - 1/255). Hence our multiplier is 8 - 1/32 and zero threshold is 128/255.
+#define SK_DistanceFieldMultiplier   "7.96875"
+#define SK_DistanceFieldThreshold    "0.50196078431"
+
 /** Given 8-bit mask data, generate the associated distance field
 
  *  @param distanceField     The distance field to be generated. Should already be allocated
- *                           by the client with the padding below.
+ *                           by the client with the padding above.
  *  @param image             8-bit mask we're using to generate the distance field.
- *  @param w                 Width of the image.
- *  @param h                 Height of the image.
- *  @param distanceMagnitude Largest possible absolute value for the distance. The distance field
- *                           will be padded to w + 2*distanceMagnitude, h + 2*distanceMagnitude.
+ *  @param w                 Width of the original image.
+ *  @param h                 Height of the original image.
+ *  @param rowBytes          Size of each row in the image, in bytes
+ */
+bool SkGenerateDistanceFieldFromA8Image(unsigned char* distanceField,
+                                        const unsigned char* image,
+                                        int w, int h, int rowBytes);
+
+/** Given 1-bit mask data, generate the associated distance field
+
+ *  @param distanceField     The distance field to be generated. Should already be allocated
+ *                           by the client with the padding above.
+ *  @param image             1-bit mask we're using to generate the distance field.
+ *  @param w                 Width of the original image.
+ *  @param h                 Height of the original image.
+ *  @param rowBytes          Size of each row in the image, in bytes
+ */
+bool SkGenerateDistanceFieldFromBWImage(unsigned char* distanceField,
+                                        const unsigned char* image,
+                                        int w, int h, int rowBytes);
+
+/** Given width and height of original image, return size (in bytes) of distance field
+ *  @param w                 Width of the original image.
+ *  @param h                 Height of the original image.
  */
-bool SkGenerateDistanceFieldFromImage(unsigned char* distanceField,
-                                      const unsigned char* image,
-                                      int w, int h,
-                                      int distanceMagnitude);
+inline size_t SkComputeDistanceFieldSize(int w, int h) {
+    return (w + 2*SK_DistanceFieldPad) * (h + 2*SK_DistanceFieldPad) * sizeof(unsigned char);
+}
 
 #endif