Commit 787de2f
committed
Fix text culling and glyph subpixel batching
Adds translation-only matrix detection and uses it to derive visible text bounds from canvas state, enabling safe line culling for text while correctly disabling the fast path for non-translation transforms. Text composition commands now carry a dedicated sub-pixel offset (instead of embedding it into per-glyph drawing options transforms), and backend prep paths apply that offset consistently. The batcher also avoids rebuilding scene commands when brush transforms are effectively no-ops. New text tests cover offscreen culling, translated and rotated transforms, and text-block rendering parity against unculled output.1 parent 4a88695 commit 787de2f
7 files changed
Lines changed: 467 additions & 65 deletions
File tree
- src/ImageSharp.Drawing
- Helpers
- Processing
- Backends
- tests/ImageSharp.Drawing.Tests/Processing
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
46 | 60 | | |
47 | 61 | | |
48 | 62 | | |
| |||
Lines changed: 74 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
| 74 | + | |
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
| |||
83 | 84 | | |
84 | 85 | | |
85 | 86 | | |
86 | | - | |
| 87 | + | |
| 88 | + | |
87 | 89 | | |
88 | 90 | | |
89 | 91 | | |
| |||
97 | 99 | | |
98 | 100 | | |
99 | 101 | | |
| 102 | + | |
100 | 103 | | |
101 | 104 | | |
102 | 105 | | |
| |||
152 | 155 | | |
153 | 156 | | |
154 | 157 | | |
155 | | - | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
156 | 161 | | |
157 | | - | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
158 | 183 | | |
159 | 184 | | |
160 | 185 | | |
| |||
248 | 273 | | |
249 | 274 | | |
250 | 275 | | |
251 | | - | |
| 276 | + | |
| 277 | + | |
252 | 278 | | |
253 | 279 | | |
254 | 280 | | |
| |||
269 | 295 | | |
270 | 296 | | |
271 | 297 | | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
272 | 330 | | |
273 | 331 | | |
274 | 332 | | |
| |||
281 | 339 | | |
282 | 340 | | |
283 | 341 | | |
284 | | - | |
| 342 | + | |
| 343 | + | |
285 | 344 | | |
286 | 345 | | |
287 | 346 | | |
| |||
304 | 363 | | |
305 | 364 | | |
306 | 365 | | |
307 | | - | |
| 366 | + | |
| 367 | + | |
308 | 368 | | |
309 | 369 | | |
310 | 370 | | |
| |||
325 | 385 | | |
326 | 386 | | |
327 | 387 | | |
328 | | - | |
| 388 | + | |
| 389 | + | |
329 | 390 | | |
330 | 391 | | |
331 | 392 | | |
| |||
346 | 407 | | |
347 | 408 | | |
348 | 409 | | |
349 | | - | |
| 410 | + | |
| 411 | + | |
350 | 412 | | |
351 | 413 | | |
352 | 414 | | |
| |||
365 | 427 | | |
366 | 428 | | |
367 | 429 | | |
368 | | - | |
| 430 | + | |
| 431 | + | |
369 | 432 | | |
370 | 433 | | |
371 | 434 | | |
| |||
422 | 485 | | |
423 | 486 | | |
424 | 487 | | |
425 | | - | |
| 488 | + | |
| 489 | + | |
426 | 490 | | |
427 | 491 | | |
428 | 492 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1006 | 1006 | | |
1007 | 1007 | | |
1008 | 1008 | | |
| 1009 | + | |
1009 | 1010 | | |
1010 | 1011 | | |
1011 | 1012 | | |
| |||
1364 | 1365 | | |
1365 | 1366 | | |
1366 | 1367 | | |
| 1368 | + | |
1367 | 1369 | | |
1368 | 1370 | | |
1369 | 1371 | | |
| |||
1378 | 1380 | | |
1379 | 1381 | | |
1380 | 1382 | | |
| 1383 | + | |
1381 | 1384 | | |
1382 | 1385 | | |
1383 | 1386 | | |
| |||
1388 | 1391 | | |
1389 | 1392 | | |
1390 | 1393 | | |
| 1394 | + | |
1391 | 1395 | | |
1392 | 1396 | | |
1393 | 1397 | | |
1394 | 1398 | | |
| 1399 | + | |
| 1400 | + | |
| 1401 | + | |
| 1402 | + | |
| 1403 | + | |
| 1404 | + | |
| 1405 | + | |
| 1406 | + | |
| 1407 | + | |
| 1408 | + | |
1395 | 1409 | | |
1396 | 1410 | | |
1397 | 1411 | | |
| |||
Lines changed: 64 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
76 | 115 | | |
77 | 116 | | |
78 | 117 | | |
| |||
83 | 122 | | |
84 | 123 | | |
85 | 124 | | |
| 125 | + | |
86 | 126 | | |
87 | 127 | | |
88 | 128 | | |
| |||
126 | 166 | | |
127 | 167 | | |
128 | 168 | | |
129 | | - | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
130 | 172 | | |
131 | | - | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
132 | 194 | | |
133 | 195 | | |
134 | 196 | | |
| |||
0 commit comments