... |
... |
@@ -52,7 +52,7 @@ |
52
|
52
|
<div>
|
53
|
53
|
<p>The FreeType project participates in
|
54
|
54
|
<a href="">"https://summerofcode.withgoogle.com/">Google
|
55
|
|
- Summer of Code 2023</a>. Here is our list of possible
|
|
55
|
+ Summer of Code 2024</a>. Here is our list of possible
|
56
|
56
|
projects – if you have more ideas, please write to
|
57
|
57
|
our <a href="">"mailto:freetype-devel@nongnu.org">mailing
|
58
|
58
|
list</a> so that we can discuss your suggestions,
|
... |
... |
@@ -137,121 +137,6 @@ |
137
|
137
|
</dd>
|
138
|
138
|
</dl>
|
139
|
139
|
|
140
|
|
- <dl>
|
141
|
|
- <dt>Integrate FreeType with alternative rendering
|
142
|
|
- engines</dt>
|
143
|
|
-
|
144
|
|
- <dd>
|
145
|
|
- <p>Raph Levien has
|
146
|
|
- developed <a href="">"https://github.com/raphlinus/font-rs"><code>font-rs</code></a>,
|
147
|
|
- an experimental font renderer written in
|
148
|
|
- the <a href="">"https://www.rust-lang.org/">Rust
|
149
|
|
- programming language</a>.
|
150
|
|
- A <a href="">"https://medium.com/@raphlinus/inside-the-fastest-font-renderer-in-the-world-75ae5270c445">blogpost</a>
|
151
|
|
- describes some of its features in more detail. It
|
152
|
|
- claims to be much faster than FreeType's anti-aliasing
|
153
|
|
- rendering module due to SIMD optimizations.</p>
|
154
|
|
-
|
155
|
|
- <p>Note that
|
156
|
|
- the <a href="">"https://github.com/mooman219/fontdue"><code>fontdue</code></a>
|
157
|
|
- Rust package is another rendering engine based on
|
158
|
|
- <code>font-rs</code>, and it claims to be even faster
|
159
|
|
- and is actively developed. You can find some additional
|
160
|
|
- discussion <a href="">"https://www.reddit.com/r/rust/comments/ilnd41/fontdue_the_fastest_font_renderer_in_the_world">here</a>.
|
161
|
|
- Another project inspired by <code>font-rs</code> is
|
162
|
|
- <a href="">"https://github.com/servo/pathfinder"><code>Pathfinder</code></a>,
|
163
|
|
- which takes advantages of GPU rendering.</p>
|
164
|
|
-
|
165
|
|
- <p>The project is continuing and eventually finalizing
|
166
|
|
- a <a href="">"https://gitlab.freedesktop.org/freetype/freetype/-/tree/gsoc-anurag-2022-final">GSoC
|
167
|
|
- 2022 contribution</a> (which couldn't be finished then
|
168
|
|
- properly due to circumstances out of the student's
|
169
|
|
- control) about implementing an
|
170
|
|
- alternative <a href="">"https://www.freetype.org/freetype2/docs/reference/ft2-module_management.html#ft_renderer"><code>FT_Renderer</code></a>
|
171
|
|
- module in C that can take priority over the
|
172
|
|
- native FreeType rasterizer. It should either wrap the
|
173
|
|
- calls to a linked precompiled object or port the Rust
|
174
|
|
- code to C. It requires in-depth feasibility
|
175
|
|
- analysis of either approach and a good understanding
|
176
|
|
- of FreeType's architectural details.</p>
|
177
|
|
-
|
178
|
|
- <p><em>Difficulty:</em> high. <em>Size:</em>
|
179
|
|
- 175h/350h. <em>Requirements:</em> Rust, C, Unix build
|
180
|
|
- tools. <em>Potential mentors:</em> Werner Lemberg,
|
181
|
|
- Alexei Podtelezhnikov, Toshiya Suzuki (FreeType), Raph
|
182
|
|
- Levien (Google).</p>
|
183
|
|
- </dd>
|
184
|
|
- </dl>
|
185
|
|
-
|
186
|
|
- <dl>
|
187
|
|
- <dt>Add a ‘capability database’ to FreeType's
|
188
|
|
- auto-hinter</dt>
|
189
|
|
-
|
190
|
|
- <dd>
|
191
|
|
- <p>At smaller sizes, usually in the range 12ppem to
|
192
|
|
- 20ppem, it can happen that separate outlines of glyphs
|
193
|
|
- touch each other (mainly caused by rounding issues),
|
194
|
|
- making glyphs illegible. A typical example is glyph
|
195
|
|
- ‘i’, where the vertical space between the
|
196
|
|
- dot on the i and the body must have a certain
|
197
|
|
- size to let the reader's eye separate the two parts.
|
198
|
|
- [Note that the auto-hinter's capability to hint glyphs
|
199
|
|
- smaller than 12ppem is very limited in general and
|
200
|
|
- thus not part of this project description.]</p>
|
201
|
|
-
|
202
|
|
- <p>Another example is the tilde accent, ‘~’,
|
203
|
|
- used in languages like Spanish: Even at smaller sizes
|
204
|
|
- the wiggle of the accent shape must be preserved,
|
205
|
|
- otherwise it can happen that a character like
|
206
|
|
- ‘ã’ looks like ‘ā’.</p>
|
207
|
|
-
|
208
|
|
- <p>There are numerous other cases where some knowledge
|
209
|
|
- of the shape of a given glyph might help the
|
210
|
|
- <a href="">"https://www.freetype.org/autohinting/hinter.html">auto-hinter</a>
|
211
|
|
- improve the hinting, irrespective of the font shape or
|
212
|
|
- family – coming back to glyph ‘i’, the dot
|
213
|
|
- on the i and its body must be separate for
|
214
|
|
- virtually all available fonts.</p>
|
215
|
|
-
|
216
|
|
- <p>The project consists of the following parts.</p>
|
217
|
|
-
|
218
|
|
- <ul>
|
219
|
|
- <li>Identify hinting problems of the auto-hinter
|
220
|
|
- related to shape distortion and accent positioning.
|
221
|
|
- A good starting point is
|
222
|
|
- the <a href="">"https://gitlab.freedesktop.org/groups/freetype/-/issues">FreeType
|
223
|
|
- bug database.</a></li>
|
224
|
|
-
|
225
|
|
- <li>Collect necessary adjustments. For the above two
|
226
|
|
- examples, it would be necessary (a) to tell the
|
227
|
|
- auto-hinter that there must be a certain vertical
|
228
|
|
- distance between the body and its accent, and
|
229
|
|
- (b) to distort some glyph shapes intentionally
|
230
|
|
- so that rasterization at small ppem values gives
|
231
|
|
- decent results.</li>
|
232
|
|
-
|
233
|
|
- <li>Invent a database format (to be compiled into the
|
234
|
|
- library) that describes the necessary actions.
|
235
|
|
- Basically, this would be a key-value table, where
|
236
|
|
- the key is the Unicode character code of the
|
237
|
|
- affected glyph, and the value is a list of necessary
|
238
|
|
- actions.</li>
|
239
|
|
-
|
240
|
|
- <li>Add a mechanism to the auto-hinter to read the
|
241
|
|
- database, and to apply the action (shift, distort,
|
242
|
|
- whatever) to the affected glyph outlines if
|
243
|
|
- necessary. This last feature is the non-trivial
|
244
|
|
- part of this project.</li>
|
245
|
|
- </ul>
|
246
|
|
-
|
247
|
|
- <p><em>Difficulty:</em> medium to high. <em>Size:</em>
|
248
|
|
- 350h. <em>Requirements:</em> C, and ideally some
|
249
|
|
- basic font hinting and rasterization
|
250
|
|
- knowledge. <em>Potential mentors:</em> Werner
|
251
|
|
- Lemberg, Alexei Podtelezhnikov (FreeType).</p>
|
252
|
|
- </dd>
|
253
|
|
- </dl>
|
254
|
|
-
|
255
|
140
|
<dl>
|
256
|
141
|
<dt>Integrate <code>ftbench</code> into FreeType's build
|
257
|
142
|
structure(s)</dt>
|
... |
... |
@@ -349,7 +234,7 @@ |
349
|
234
|
<!-- ************************************************** -->
|
350
|
235
|
|
351
|
236
|
<div class="updated">
|
352
|
|
- <p>Last update: 23-Feb-2023</p>
|
|
237
|
+ <p>Last update: 03-Mar-2024</p>
|
353
|
238
|
</div>
|
354
|
239
|
</div>
|
355
|
240
|
</div>
|