Coverage Report

Created: 2021-08-22 09:07

/src/skia/src/core/SkDistanceFieldGen.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2014 Google Inc.
3
 *
4
 * Use of this source code is governed by a BSD-style license that can be
5
 * found in the LICENSE file.
6
 */
7
#ifndef SkDistanceFieldGen_DEFINED
8
#define SkDistanceFieldGen_DEFINED
9
10
#include "include/core/SkTypes.h"
11
12
// the max magnitude for the distance field
13
// distance values are limited to the range (-SK_DistanceFieldMagnitude, SK_DistanceFieldMagnitude]
14
0
#define SK_DistanceFieldMagnitude   4
15
// we need to pad around the original glyph to allow our maximum distance of
16
// SK_DistanceFieldMagnitude texels away from any edge
17
2.05k
#define SK_DistanceFieldPad         4
18
// the rect we render with is inset from the distance field glyph size to allow for bilerp
19
178
#define SK_DistanceFieldInset       2
20
21
// For the fragment shader:
22
//   The distance field is constructed as unsigned char values,
23
//   so that the zero value is at 128, and the supported range of distances is [-4 * 127/128, 4].
24
//   Hence our multiplier (width of the range) is 4 * 255/128 and zero threshold is 128/255.
25
#define SK_DistanceFieldMultiplier   "7.96875"
26
#define SK_DistanceFieldThreshold    "0.50196078431"
27
28
/** Given 8-bit mask data, generate the associated distance field
29
30
 *  @param distanceField     The distance field to be generated. Should already be allocated
31
 *                           by the client with the padding above.
32
 *  @param image             8-bit mask we're using to generate the distance field.
33
 *  @param w                 Width of the original image.
34
 *  @param h                 Height of the original image.
35
 *  @param rowBytes          Size of each row in the image, in bytes
36
 */
37
bool SkGenerateDistanceFieldFromA8Image(unsigned char* distanceField,
38
                                        const unsigned char* image,
39
                                        int w, int h, size_t rowBytes);
40
41
/** Given LCD16 mask data (not a 16-bit image), generate the associated distance field
42
43
 *  @param distanceField     The distance field to be generated. Should already be allocated
44
 *                           by the client with the padding above.
45
 *  @param image             16-bit LCD data we're using to generate the distance field.
46
 *  @param w                 Width of the original image.
47
 *  @param h                 Height of the original image.
48
 *  @param rowBytes          Size of each row in the image, in bytes
49
 */
50
bool SkGenerateDistanceFieldFromLCD16Mask(unsigned char* distanceField,
51
                                          const unsigned char* image,
52
                                          int w, int h, size_t rowBytes);
53
54
/** Given 1-bit mask data, generate the associated distance field
55
56
 *  @param distanceField     The distance field to be generated. Should already be allocated
57
 *                           by the client with the padding above.
58
 *  @param image             1-bit mask we're using to generate the distance field.
59
 *  @param w                 Width of the original image.
60
 *  @param h                 Height of the original image.
61
 *  @param rowBytes          Size of each row in the image, in bytes
62
 */
63
bool SkGenerateDistanceFieldFromBWImage(unsigned char* distanceField,
64
                                        const unsigned char* image,
65
                                        int w, int h, size_t rowBytes);
66
67
/** Given width and height of original image, return size (in bytes) of distance field
68
 *  @param w                 Width of the original image.
69
 *  @param h                 Height of the original image.
70
 */
71
0
inline size_t SkComputeDistanceFieldSize(int w, int h) {
72
0
    return (w + 2*SK_DistanceFieldPad) * (h + 2*SK_DistanceFieldPad) * sizeof(unsigned char);
73
0
}
74
75
#endif