Hoist per-triangle mipmap metrics out of the per-tile paint path
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 20 Sep 2026 08:17:58 +0000 (11:17 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 20 Sep 2026 08:17:58 +0000 (11:17 +0300)
commit38f0e7c45525beb588fd34d8d1759d8ce7a344cd
tree33970270e76b5e1b765842626a5002864dae9a24
parent618ff60e06a2a91c3caffe58ac19d9ff45b61190
Hoist per-triangle mipmap metrics out of the per-tile paint path

- paintFlat no longer recomputes the screen-edge perimeter (3 sqrt) per
  overlapped tile: callers pass it in. Object path already computed it
  in paintTriangle (it was computed twice per paint); mesh handles read
  a per-slot value computed once in TriangleMeshBlock.transform (queued
  triangles only). Clipped fan sub-triangles compute inline (rare).
- TriangleMeshBlock UV perimeter (origTtd) precomputed once at build
  into uvPerimeter[] instead of 3 sqrt over the final uv[] per paint.

Bit-exact: same expressions, same accumulation order, same inputs —
verified by identical golden diff counts against the pre-change run
(23/23 scenes).
src/main/java/eu/svjatoslav/aukio/e3d/renderer/raster/shapes/basic/texturedpolygon/MeshTriangle.java
src/main/java/eu/svjatoslav/aukio/e3d/renderer/raster/shapes/basic/texturedpolygon/TexturedTriangle.java
src/main/java/eu/svjatoslav/aukio/e3d/renderer/raster/shapes/basic/texturedpolygon/TriangleMeshBlock.java