Skip to content

Commit 1802637

Browse files
committed
fix(textureatlas): Apply internal padding between images
1 parent 16d0ccc commit 1802637

File tree

3 files changed

+51
-35
lines changed

3 files changed

+51
-35
lines changed

CHANGES.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
#### Fixes :wrench:
88

99
- Billboards using `imageSubRegion` now render as expected. [#12585](https://github.com/CesiumGS/cesium/issues/12585)
10-
- Improved scaling of SVGs in billboards [#TODO](https://github.com/CesiumGS/cesium/issues/TODO)
10+
- Improved scaling of SVGs in billboards [#13020](https://github.com/CesiumGS/cesium/issues/13020)
11+
- Fixed unexpected outline artifacts around billboards [#13038](https://github.com/CesiumGS/cesium/issues/13038)
1112

1213
#### Additions :tada:
1314

packages/engine/Source/Core/TexturePacker.js

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ TexturePacker.prototype._findNode = function (node, { width, height }) {
122122
return node;
123123
}
124124

125+
const borderPadding = this._borderPadding;
126+
125127
// Vertical split (childNode1 = left half, childNode2 = right half).
126128
if (widthDifference > heightDifference) {
127129
node.childNode1 = new TextureNode({
@@ -130,12 +132,18 @@ TexturePacker.prototype._findNode = function (node, { width, height }) {
130132
width,
131133
height: nodeHeight,
132134
});
133-
node.childNode2 = new TextureNode({
134-
x: rectangle.x + width,
135-
y: rectangle.y,
136-
width: widthDifference,
137-
height: nodeHeight,
138-
});
135+
136+
// Apply padding only along the vertical "cut".
137+
const widthDifferencePadded = widthDifference - borderPadding;
138+
139+
if (widthDifferencePadded > 0) {
140+
node.childNode2 = new TextureNode({
141+
x: rectangle.x + width + borderPadding,
142+
y: rectangle.y,
143+
width: widthDifferencePadded,
144+
height: nodeHeight,
145+
});
146+
}
139147

140148
return this._findNode(node.childNode1, { width, height });
141149
}
@@ -147,12 +155,19 @@ TexturePacker.prototype._findNode = function (node, { width, height }) {
147155
width: nodeWidth,
148156
height,
149157
});
150-
node.childNode2 = new TextureNode({
151-
x: rectangle.x,
152-
y: rectangle.y + height,
153-
width: nodeWidth,
154-
height: heightDifference,
155-
});
158+
159+
// Apply padding only along the horizontal "cut".
160+
const heightDifferencePadded = heightDifference - borderPadding;
161+
162+
if (heightDifferencePadded > 0) {
163+
node.childNode2 = new TextureNode({
164+
x: rectangle.x,
165+
y: rectangle.y + height + borderPadding,
166+
width: nodeWidth,
167+
height: heightDifferencePadded,
168+
});
169+
}
170+
156171
return this._findNode(node.childNode1, { width, height });
157172
}
158173

packages/engine/Specs/Renderer/TextureAtlasSpec.js

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -852,16 +852,16 @@ describe("Scene/TextureAtlas", function () {
852852
.2222222222222222...............
853853
.2222222222222222...............
854854
.2222222222222222...............
855-
.22222222222222223333333333.....
856-
.22222222222222223333333333.....
857-
.22222222222222223333333333.....
858-
.22222222222222223333333333.....
859-
.22222222222222223333333333.....
860-
.22222222222222223333333333.....
861-
.22222222222222223333333333.....
862-
.22222222222222223333333333.....
863-
.22222222222222223333333333.....
864-
.2222222222222222333333333301...
855+
.2222222222222222.3333333333....
856+
.2222222222222222.3333333333....
857+
.2222222222222222.3333333333....
858+
.2222222222222222.3333333333....
859+
.2222222222222222.3333333333....
860+
.2222222222222222.3333333333....
861+
.2222222222222222.3333333333....
862+
.2222222222222222.3333333333.1..
863+
.2222222222222222.3333333333....
864+
.2222222222222222.3333333333.0..
865865
................................
866866
`.trim(),
867867
);
@@ -926,9 +926,9 @@ describe("Scene/TextureAtlas", function () {
926926
.2222222222...
927927
.2222222222...
928928
.2222222222...
929+
.2222222222.1.
929930
.2222222222...
930-
.2222222222...
931-
.222222222201.
931+
.2222222222.0.
932932
..............
933933
`.trim(),
934934
);
@@ -976,16 +976,16 @@ describe("Scene/TextureAtlas", function () {
976976
.3333333333333333...............
977977
.3333333333333333...............
978978
.3333333333333333...............
979-
.33333333333333332222222222.....
980-
.33333333333333332222222222.....
981-
.33333333333333332222222222.....
982-
.33333333333333332222222222.....
983-
.33333333333333332222222222.....
984-
.33333333333333332222222222.....
985-
.33333333333333332222222222.....
986-
.33333333333333332222222222.....
987-
.33333333333333332222222222.....
988-
.3333333333333333222222222201...
979+
.3333333333333333.2222222222....
980+
.3333333333333333.2222222222....
981+
.3333333333333333.2222222222....
982+
.3333333333333333.2222222222....
983+
.3333333333333333.2222222222....
984+
.3333333333333333.2222222222....
985+
.3333333333333333.2222222222....
986+
.3333333333333333.2222222222.1..
987+
.3333333333333333.2222222222....
988+
.3333333333333333.2222222222.0..
989989
................................
990990
`.trim(),
991991
);

0 commit comments

Comments
 (0)