Skip to content

Commit 9875d87

Browse files
authored
Merge branch 'Chlumsky:master' into master
2 parents 93aca07 + c76a323 commit 9875d87

24 files changed

+273
-191
lines changed

CMakeLists.txt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ if(MSDF_ATLAS_USE_VCPKG)
7272
set(MSDFGEN_VCPKG_FEATURES_SET ON)
7373
endif()
7474

75+
if(MSDF_ATLAS_INSTALL)
76+
include(GNUInstallDirs)
77+
include(CMakePackageConfigHelpers)
78+
endif()
79+
7580
# Version is specified in vcpkg.json
7681
project(msdf-atlas-gen VERSION ${MSDF_ATLAS_VERSION} LANGUAGES CXX)
7782

@@ -103,7 +108,7 @@ target_compile_definitions(msdf-atlas-gen PUBLIC
103108
MSDF_ATLAS_COPYRIGHT_YEAR=${MSDF_ATLAS_COPYRIGHT_YEAR}
104109
)
105110
target_include_directories(msdf-atlas-gen INTERFACE
106-
$<INSTALL_INTERFACE:include>
111+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
107112
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
108113
)
109114
if(MSDF_ATLAS_NO_ARTERY_FONT)
@@ -150,8 +155,6 @@ endif()
150155

151156
# Installation
152157
if(MSDF_ATLAS_INSTALL)
153-
include(GNUInstallDirs)
154-
include(CMakePackageConfigHelpers)
155158
set(MSDF_ATLAS_CONFIG_PATH "lib/cmake/msdf-atlas-gen")
156159

157160
# install tree package config

msdf-atlas-gen/AtlasGenerator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ struct GeneratorAttributes {
3737

3838
/// A function that generates the bitmap for a single glyph
3939
template <typename T, int N>
40-
using GeneratorFunction = void (*)(const msdfgen::BitmapRef<T, N> &, const GlyphGeometry &, const GeneratorAttributes &);
40+
using GeneratorFunction = void (*)(const msdfgen::BitmapSection<T, N> &, const GlyphGeometry &, const GeneratorAttributes &);
4141

4242
}

msdf-atlas-gen/AtlasStorage.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ class AtlasStorage {
2525
AtlasStorage(const AtlasStorage &orig, int width, int height, const Remap *remapping, int count);
2626
/// Stores a subsection at x, y into the atlas storage. May be implemented for only some T, N
2727
template <typename T, int N>
28-
void put(int x, int y, const msdfgen::BitmapConstRef<T, N> &subBitmap);
28+
void put(int x, int y, const msdfgen::BitmapConstSection<T, N> &subBitmap);
2929
/// Retrieves a subsection at x, y from the atlas storage. May be implemented for only some T, N
3030
template <typename T, int N>
31-
void get(int x, int y, const msdfgen::BitmapRef<T, N> &subBitmap) const;
31+
void get(int x, int y, const msdfgen::BitmapSection<T, N> &subBitmap) const;
3232

3333
};
3434

msdf-atlas-gen/BitmapAtlasStorage.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@ class BitmapAtlasStorage {
1212
public:
1313
BitmapAtlasStorage();
1414
BitmapAtlasStorage(int width, int height);
15-
explicit BitmapAtlasStorage(const msdfgen::BitmapConstRef<T, N> &bitmap);
15+
explicit BitmapAtlasStorage(const msdfgen::BitmapConstSection<T, N> &bitmap);
1616
explicit BitmapAtlasStorage(msdfgen::Bitmap<T, N> &&bitmap);
1717
BitmapAtlasStorage(const BitmapAtlasStorage<T, N> &orig, int width, int height);
1818
BitmapAtlasStorage(const BitmapAtlasStorage<T, N> &orig, int width, int height, const Remap *remapping, int count);
19+
operator msdfgen::BitmapConstSection<T, N>() const;
1920
operator msdfgen::BitmapConstRef<T, N>() const;
21+
operator msdfgen::BitmapSection<T, N>();
2022
operator msdfgen::BitmapRef<T, N>();
2123
operator msdfgen::Bitmap<T, N>() &&;
2224
template <typename S>
23-
void put(int x, int y, const msdfgen::BitmapConstRef<S, N> &subBitmap);
24-
void get(int x, int y, const msdfgen::BitmapRef<T, N> &subBitmap) const;
25+
void put(int x, int y, const msdfgen::BitmapConstSection<S, N> &subBitmap);
26+
void get(int x, int y, const msdfgen::BitmapSection<T, N> &subBitmap) const;
2527

2628
private:
2729
msdfgen::Bitmap<T, N> bitmap;

msdf-atlas-gen/BitmapAtlasStorage.hpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ BitmapAtlasStorage<T, N>::BitmapAtlasStorage(int width, int height) : bitmap(wid
1616
}
1717

1818
template <typename T, int N>
19-
BitmapAtlasStorage<T, N>::BitmapAtlasStorage(const msdfgen::BitmapConstRef<T, N> &bitmap) : bitmap(bitmap) { }
19+
BitmapAtlasStorage<T, N>::BitmapAtlasStorage(const msdfgen::BitmapConstSection<T, N> &bitmap) : bitmap(bitmap) { }
2020

2121
template <typename T, int N>
2222
BitmapAtlasStorage<T, N>::BitmapAtlasStorage(msdfgen::Bitmap<T, N> &&bitmap) : bitmap((msdfgen::Bitmap<T, N> &&) bitmap) { }
@@ -36,11 +36,21 @@ BitmapAtlasStorage<T, N>::BitmapAtlasStorage(const BitmapAtlasStorage<T, N> &ori
3636
}
3737
}
3838

39+
template <typename T, int N>
40+
BitmapAtlasStorage<T, N>::operator msdfgen::BitmapConstSection<T, N>() const {
41+
return bitmap;
42+
}
43+
3944
template <typename T, int N>
4045
BitmapAtlasStorage<T, N>::operator msdfgen::BitmapConstRef<T, N>() const {
4146
return bitmap;
4247
}
4348

49+
template <typename T, int N>
50+
BitmapAtlasStorage<T, N>::operator msdfgen::BitmapSection<T, N>() {
51+
return bitmap;
52+
}
53+
4454
template <typename T, int N>
4555
BitmapAtlasStorage<T, N>::operator msdfgen::BitmapRef<T, N>() {
4656
return bitmap;
@@ -53,12 +63,12 @@ BitmapAtlasStorage<T, N>::operator msdfgen::Bitmap<T, N>() && {
5363

5464
template <typename T, int N>
5565
template <typename S>
56-
void BitmapAtlasStorage<T, N>::put(int x, int y, const msdfgen::BitmapConstRef<S, N> &subBitmap) {
66+
void BitmapAtlasStorage<T, N>::put(int x, int y, const msdfgen::BitmapConstSection<S, N> &subBitmap) {
5767
blit(bitmap, subBitmap, x, y, 0, 0, subBitmap.width, subBitmap.height);
5868
}
5969

6070
template <typename T, int N>
61-
void BitmapAtlasStorage<T, N>::get(int x, int y, const msdfgen::BitmapRef<T, N> &subBitmap) const {
71+
void BitmapAtlasStorage<T, N>::get(int x, int y, const msdfgen::BitmapSection<T, N> &subBitmap) const {
6272
blit(subBitmap, bitmap, 0, 0, x, y, subBitmap.width, subBitmap.height);
6373
}
6474

msdf-atlas-gen/ImmediateAtlasGenerator.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void ImmediateAtlasGenerator<T, N, GEN_FN, AtlasStorage>::generate(const GlyphGe
4141
glyph.getBoxRect(l, b, w, h);
4242
msdfgen::BitmapRef<T, N> glyphBitmap(glyphBuffer.data()+threadNo*threadBufferSize, w, h);
4343
GEN_FN(glyphBitmap, glyph, threadAttributes[threadNo]);
44-
storage.put(l, b, msdfgen::BitmapConstRef<T, N>(glyphBitmap));
44+
storage.put(l, b, msdfgen::BitmapConstSection<T, N>(glyphBitmap));
4545
}
4646
return true;
4747
}, count).finish(threadCount);

msdf-atlas-gen/artery-font-export.cpp

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ static artery_font::CodepointType convertCodepointType(GlyphIdentifierType glyph
3838
}
3939

4040
template <typename T, int N>
41-
static bool encodeTiff(std::vector<byte> &output, const msdfgen::BitmapConstRef<T, N> &atlas) {
41+
static bool encodeTiff(std::vector<byte> &output, const msdfgen::BitmapConstSection<T, N> &atlas) {
4242
// TODO
4343
return false;
4444
}
@@ -56,7 +56,7 @@ artery_font::PixelFormat getPixelFormat<float>() {
5656
}
5757

5858
template <typename REAL, typename T, int N>
59-
bool exportArteryFont(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstRef<T, N> &atlas, const char *filename, const ArteryFontExportProperties &properties) {
59+
bool exportArteryFont(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstSection<T, N> &atlas, const char *filename, const ArteryFontExportProperties &properties) {
6060
artery_font::StdArteryFont<REAL> arfont = { };
6161
arfont.metadataFormat = artery_font::METADATA_NONE;
6262

@@ -161,20 +161,21 @@ bool exportArteryFont(const FontGeometry *fonts, int fontCount, const msdfgen::B
161161
return false;
162162
image.encoding = artery_font::IMAGE_RAW_BINARY;
163163
image.rawBinaryFormat.rowLength = N*sizeof(T)*atlas.width;
164-
image.data = artery_font::StdByteArray(N*sizeof(T)*atlas.width*atlas.height);
165-
switch (properties.yDirection) {
166-
case YDirection::BOTTOM_UP:
164+
switch (atlas.yOrientation) {
165+
case msdfgen::Y_UPWARD:
167166
image.rawBinaryFormat.orientation = artery_font::ORIENTATION_BOTTOM_UP;
168-
memcpy((byte *) image.data, atlas.pixels, N*sizeof(T)*atlas.width*atlas.height);
169167
break;
170-
case YDirection::TOP_DOWN: {
168+
case msdfgen::Y_DOWNWARD:
171169
image.rawBinaryFormat.orientation = artery_font::ORIENTATION_TOP_DOWN;
172-
byte *imageData = (byte *) image.data;
173-
for (int y = atlas.height-1; y >= 0; --y) {
174-
memcpy(imageData, atlas.pixels+N*atlas.width*y, N*sizeof(T)*atlas.width);
175-
imageData += N*sizeof(T)*atlas.width;
176-
}
177170
break;
171+
}
172+
{
173+
size_t rowSize = N*sizeof(T)*atlas.width;
174+
image.data = artery_font::StdByteArray(rowSize*atlas.height);
175+
byte *imageData = (byte *) image.data;
176+
for (int y = 0; y < atlas.height; ++y) {
177+
memcpy(imageData, atlas(0, y), rowSize);
178+
imageData += rowSize;
178179
}
179180
}
180181
break;
@@ -186,12 +187,12 @@ bool exportArteryFont(const FontGeometry *fonts, int fontCount, const msdfgen::B
186187
return artery_font::writeFile(arfont, filename);
187188
}
188189

189-
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstRef<byte, 1> &atlas, const char *filename, const ArteryFontExportProperties &properties);
190-
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstRef<byte, 3> &atlas, const char *filename, const ArteryFontExportProperties &properties);
191-
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstRef<byte, 4> &atlas, const char *filename, const ArteryFontExportProperties &properties);
192-
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstRef<float, 1> &atlas, const char *filename, const ArteryFontExportProperties &properties);
193-
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstRef<float, 3> &atlas, const char *filename, const ArteryFontExportProperties &properties);
194-
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstRef<float, 4> &atlas, const char *filename, const ArteryFontExportProperties &properties);
190+
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstSection<byte, 1> &atlas, const char *filename, const ArteryFontExportProperties &properties);
191+
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstSection<byte, 3> &atlas, const char *filename, const ArteryFontExportProperties &properties);
192+
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstSection<byte, 4> &atlas, const char *filename, const ArteryFontExportProperties &properties);
193+
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstSection<float, 1> &atlas, const char *filename, const ArteryFontExportProperties &properties);
194+
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstSection<float, 3> &atlas, const char *filename, const ArteryFontExportProperties &properties);
195+
template bool exportArteryFont<float>(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstSection<float, 4> &atlas, const char *filename, const ArteryFontExportProperties &properties);
195196

196197
}
197198

msdf-atlas-gen/artery-font-export.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ struct ArteryFontExportProperties {
1515
msdfgen::Range pxRange;
1616
ImageType imageType;
1717
ImageFormat imageFormat;
18-
YDirection yDirection;
1918
};
2019

2120
/// Encodes the atlas bitmap and its layout into an Artery Atlas Font file
2221
template <typename REAL, typename T, int N>
23-
bool exportArteryFont(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstRef<T, N> &atlas, const char *filename, const ArteryFontExportProperties &properties);
22+
bool exportArteryFont(const FontGeometry *fonts, int fontCount, const msdfgen::BitmapConstSection<T, N> &atlas, const char *filename, const ArteryFontExportProperties &properties);
2423

2524
}
2625

msdf-atlas-gen/bitmap-blit.cpp

Lines changed: 77 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace msdf_atlas {
88

9-
#define BOUND_AREA() { \
9+
#define BOUND_SECTION() { \
1010
if (dx < 0) w += dx, sx -= dx, dx = 0; \
1111
if (dy < 0) h += dy, sy -= dy, dy = 0; \
1212
if (sx < 0) w += sx, dx -= sx, sx = 0; \
@@ -16,13 +16,23 @@ namespace msdf_atlas {
1616
}
1717

1818
template <typename T, int N>
19-
void blitSameType(const msdfgen::BitmapRef<T, N> &dst, const msdfgen::BitmapConstRef<T, N> &src, int dx, int dy, int sx, int sy, int w, int h) {
20-
BOUND_AREA();
19+
static void blitSameType(const msdfgen::BitmapSection<T, N> &dst, const msdfgen::BitmapConstSection<T, N> &src) {
20+
int width = std::min(dst.width, src.width), height = std::min(dst.height, src.height);
21+
size_t rowSize = sizeof(T)*N*width;
22+
for (int y = 0; y < height; ++y)
23+
memcpy(dst(0, y), src(0, y), rowSize);
24+
}
25+
26+
template <typename T, int N>
27+
static void blitSameType(const msdfgen::BitmapSection<T, N> &dst, const msdfgen::BitmapConstSection<T, N> &src, int dx, int dy, int sx, int sy, int w, int h) {
28+
BOUND_SECTION();
29+
size_t rowSize = sizeof(T)*N*w;
2130
for (int y = 0; y < h; ++y)
22-
memcpy(dst(dx, dy+y), src(sx, sy+y), sizeof(T)*N*w);
31+
memcpy(dst(dx, dy+y), src(sx, sy+y), rowSize);
2332
}
2433

25-
#define BLIT_SAME_TYPE_IMPL(T, N) void blit(const msdfgen::BitmapRef<T, N> &dst, const msdfgen::BitmapConstRef<T, N> &src, int dx, int dy, int sx, int sy, int w, int h) { blitSameType(dst, src, dx, dy, sx, sy, w, h); }
34+
#define BLIT_SAME_TYPE_IMPL(T, N) void blit(const msdfgen::BitmapSection<T, N> &dst, const msdfgen::BitmapConstSection<T, N> &src) { blitSameType(dst, src); }
35+
#define BLIT_SAME_TYPE_PART_IMPL(T, N) void blit(const msdfgen::BitmapSection<T, N> &dst, const msdfgen::BitmapConstSection<T, N> &src, int dx, int dy, int sx, int sy, int w, int h) { blitSameType(dst, src, dx, dy, sx, sy, w, h); }
2636

2737
BLIT_SAME_TYPE_IMPL(byte, 1)
2838
BLIT_SAME_TYPE_IMPL(byte, 3)
@@ -31,40 +41,83 @@ BLIT_SAME_TYPE_IMPL(float, 1)
3141
BLIT_SAME_TYPE_IMPL(float, 3)
3242
BLIT_SAME_TYPE_IMPL(float, 4)
3343

34-
void blit(const msdfgen::BitmapRef<byte, 1> &dst, const msdfgen::BitmapConstRef<float, 1> &src, int dx, int dy, int sx, int sy, int w, int h) {
35-
BOUND_AREA();
44+
void blit(const msdfgen::BitmapSection<byte, 1> &dst, const msdfgen::BitmapConstSection<float, 1> &src) {
45+
int width = std::min(dst.width, src.width), height = std::min(dst.height, src.height);
46+
for (int y = 0; y < height; ++y) {
47+
byte *dstPixel = dst(0, y);
48+
const float *srcPixel = src(0, y);
49+
for (int x = 0; x < width; ++x)
50+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
51+
}
52+
}
53+
54+
void blit(const msdfgen::BitmapSection<byte, 3> &dst, const msdfgen::BitmapConstSection<float, 3> &src) {
55+
int width = std::min(dst.width, src.width), height = std::min(dst.height, src.height);
56+
for (int y = 0; y < height; ++y) {
57+
byte *dstPixel = dst(0, y);
58+
const float *srcPixel = src(0, y);
59+
for (int x = 0; x < width; ++x) {
60+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
61+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
62+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
63+
}
64+
}
65+
}
66+
67+
void blit(const msdfgen::BitmapSection<byte, 4> &dst, const msdfgen::BitmapConstSection<float, 4> &src) {
68+
int width = std::min(dst.width, src.width), height = std::min(dst.height, src.height);
69+
for (int y = 0; y < height; ++y) {
70+
byte *dstPixel = dst(0, y);
71+
const float *srcPixel = src(0, y);
72+
for (int x = 0; x < width; ++x) {
73+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
74+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
75+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
76+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
77+
}
78+
}
79+
}
80+
81+
BLIT_SAME_TYPE_PART_IMPL(byte, 1)
82+
BLIT_SAME_TYPE_PART_IMPL(byte, 3)
83+
BLIT_SAME_TYPE_PART_IMPL(byte, 4)
84+
BLIT_SAME_TYPE_PART_IMPL(float, 1)
85+
BLIT_SAME_TYPE_PART_IMPL(float, 3)
86+
BLIT_SAME_TYPE_PART_IMPL(float, 4)
87+
88+
void blit(const msdfgen::BitmapSection<byte, 1> &dst, const msdfgen::BitmapConstSection<float, 1> &src, int dx, int dy, int sx, int sy, int w, int h) {
89+
BOUND_SECTION();
3690
for (int y = 0; y < h; ++y) {
3791
byte *dstPixel = dst(dx, dy+y);
38-
for (int x = 0; x < w; ++x) {
39-
const float *srcPixel = src(sx+x, sy+y);
40-
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel);
41-
}
92+
const float *srcPixel = src(sx, sy+y);
93+
for (int x = 0; x < w; ++x)
94+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
4295
}
4396
}
4497

45-
void blit(const msdfgen::BitmapRef<byte, 3> &dst, const msdfgen::BitmapConstRef<float, 3> &src, int dx, int dy, int sx, int sy, int w, int h) {
46-
BOUND_AREA();
98+
void blit(const msdfgen::BitmapSection<byte, 3> &dst, const msdfgen::BitmapConstSection<float, 3> &src, int dx, int dy, int sx, int sy, int w, int h) {
99+
BOUND_SECTION();
47100
for (int y = 0; y < h; ++y) {
48101
byte *dstPixel = dst(dx, dy+y);
102+
const float *srcPixel = src(sx, sy+y);
49103
for (int x = 0; x < w; ++x) {
50-
const float *srcPixel = src(sx+x, sy+y);
51-
*dstPixel++ = msdfgen::pixelFloatToByte(srcPixel[0]);
52-
*dstPixel++ = msdfgen::pixelFloatToByte(srcPixel[1]);
53-
*dstPixel++ = msdfgen::pixelFloatToByte(srcPixel[2]);
104+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
105+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
106+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
54107
}
55108
}
56109
}
57110

58-
void blit(const msdfgen::BitmapRef<byte, 4> &dst, const msdfgen::BitmapConstRef<float, 4> &src, int dx, int dy, int sx, int sy, int w, int h) {
59-
BOUND_AREA();
111+
void blit(const msdfgen::BitmapSection<byte, 4> &dst, const msdfgen::BitmapConstSection<float, 4> &src, int dx, int dy, int sx, int sy, int w, int h) {
112+
BOUND_SECTION();
60113
for (int y = 0; y < h; ++y) {
61114
byte *dstPixel = dst(dx, dy+y);
115+
const float *srcPixel = src(sx, sy+y);
62116
for (int x = 0; x < w; ++x) {
63-
const float *srcPixel = src(sx+x, sy+y);
64-
*dstPixel++ = msdfgen::pixelFloatToByte(srcPixel[0]);
65-
*dstPixel++ = msdfgen::pixelFloatToByte(srcPixel[1]);
66-
*dstPixel++ = msdfgen::pixelFloatToByte(srcPixel[2]);
67-
*dstPixel++ = msdfgen::pixelFloatToByte(srcPixel[3]);
117+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
118+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
119+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
120+
*dstPixel++ = msdfgen::pixelFloatToByte(*srcPixel++);
68121
}
69122
}
70123
}

0 commit comments

Comments
 (0)