Compare commits

...

8 Commits

Author SHA1 Message Date
jjspace 069b594fba
Merge 841a4cf12a into ee2b3813b2 2025-11-21 22:59:22 +02:00
jjspace ee2b3813b2
Merge pull request #13038 from CesiumGS/fix/textureatlas-border-internal
deploy / deploy (push) Has been cancelled Details
dev / lint (push) Has been cancelled Details
dev / coverage (push) Has been cancelled Details
dev / release-tests (push) Has been cancelled Details
dev / node-20 (push) Has been cancelled Details
sandcastle-dev / deploy (push) Has been cancelled Details
fix(textureatlas): Apply internal padding between images
2025-11-21 17:14:38 +00:00
Don McCurdy 4e3980cc53 fix(textureatlas): Apply internal padding between images 2025-11-21 11:44:18 -05:00
jjspace c92d0d80a1
Merge pull request #13037 from CesiumGS/chore/textureatlas-visual-tests
chore(textureatlas): Refactor unit tests for visual output
2025-11-20 17:39:22 +00:00
Don McCurdy 16d0cccfdb chore(textureatlas): Fix vertical order unit test debug output 2025-11-20 09:31:57 -05:00
Don McCurdy 5213dfc1c0 update empty space character with '.' 2025-11-18 16:44:20 -05:00
Don McCurdy bd5aa3ff29 chore(textureatlas): Refactor unit tests for visual output 2025-11-18 15:34:19 -05:00
jjspace 841a4cf12a
better tsc path and fix globby paths for windows 2025-11-07 17:20:46 -05:00
6 changed files with 690 additions and 479 deletions

View File

@ -7,7 +7,8 @@
#### Fixes :wrench:
- Billboards using `imageSubRegion` now render as expected. [#12585](https://github.com/CesiumGS/cesium/issues/12585)
- Improved scaling of SVGs in billboards [#TODO](https://github.com/CesiumGS/cesium/issues/TODO)
- Improved scaling of SVGs in billboards [#13020](https://github.com/CesiumGS/cesium/issues/13020)
- Fixed unexpected outline artifacts around billboards [#13038](https://github.com/CesiumGS/cesium/issues/13038)
#### Additions :tada:

View File

@ -122,6 +122,8 @@ TexturePacker.prototype._findNode = function (node, { width, height }) {
return node;
}
const borderPadding = this._borderPadding;
// Vertical split (childNode1 = left half, childNode2 = right half).
if (widthDifference > heightDifference) {
node.childNode1 = new TextureNode({
@ -130,12 +132,18 @@ TexturePacker.prototype._findNode = function (node, { width, height }) {
width,
height: nodeHeight,
});
node.childNode2 = new TextureNode({
x: rectangle.x + width,
y: rectangle.y,
width: widthDifference,
height: nodeHeight,
});
// Apply padding only along the vertical "cut".
const widthDifferencePadded = widthDifference - borderPadding;
if (widthDifferencePadded > 0) {
node.childNode2 = new TextureNode({
x: rectangle.x + width + borderPadding,
y: rectangle.y,
width: widthDifferencePadded,
height: nodeHeight,
});
}
return this._findNode(node.childNode1, { width, height });
}
@ -147,12 +155,19 @@ TexturePacker.prototype._findNode = function (node, { width, height }) {
width: nodeWidth,
height,
});
node.childNode2 = new TextureNode({
x: rectangle.x,
y: rectangle.y + height,
width: nodeWidth,
height: heightDifference,
});
// Apply padding only along the horizontal "cut".
const heightDifferencePadded = heightDifference - borderPadding;
if (heightDifferencePadded > 0) {
node.childNode2 = new TextureNode({
x: rectangle.x,
y: rectangle.y + height + borderPadding,
width: nodeWidth,
height: heightDifferencePadded,
});
}
return this._findNode(node.childNode1, { width, height });
}

File diff suppressed because it is too large Load Diff

View File

@ -118,8 +118,17 @@ export async function buildGalleryList(options = {}) {
};
const galleryFiles = await globby(
galleryFilesPattern.map((pattern) => join(rootDirectory, pattern, "**/*")),
galleryFilesPattern.map((pattern) =>
// globby can only work with paths using '/' but node on windows uses '\'
// convert them right before passing to globby to ensure all joins work as expected
join(rootDirectory, pattern, "**/*").replaceAll("\\", "/"),
),
);
if (galleryFiles.length === 0) {
console.warn(
"Did not find any gallery files. Please check the configuration is correct",
);
}
const yamlFiles = galleryFiles.filter((path) =>
basename(path).match(galleryItemConfig),
);

View File

@ -9,8 +9,8 @@ import { fileURLToPath } from "node:url";
* @returns {number} exit code from the tsc command
*/
export default async function typescriptCompile(configPath) {
const tsPath = import.meta.resolve("typescript");
const binPath = fileURLToPath(join(tsPath, "../../bin/tsc"));
const tsPath = fileURLToPath(import.meta.resolve("typescript"));
const binPath = join(tsPath, "../../bin/tsc");
return new Promise((resolve, reject) => {
const ls = spawn(binPath, ["-p", configPath]);

View File

@ -10,15 +10,6 @@ import { buildGalleryList } from "../packages/sandcastle/scripts/buildGallery.js
const __dirname = dirname(fileURLToPath(import.meta.url));
const projectRoot = join(__dirname, "..");
// async function importSandcastleBuildFunctions() {
// // Import asynchronously, for now, because this script is not included or run in the release zip;
// const buildGalleryScriptPath = join(
// __dirname,
// "../packages/sandcastle/index.js",
// );
// return await import(pathToFileURL(buildGalleryScriptPath).href);
// }
/**
* Parses Sandcastle config file and returns its values.
* @returns {Promise<Record<string,any>>} A promise that resolves to the config values.
@ -52,10 +43,7 @@ export async function buildSandcastleApp({
outputToBuildDir,
includeDevelopment,
}) {
// const { join, dirname } = path;
const __dirname = dirname(fileURLToPath(import.meta.url));
// const { createSandcastleConfig, buildStatic } =
// await importSandcastleBuildFunctions();
const version = await getVersion();
let config;
if (outputToBuildDir) {
@ -168,8 +156,6 @@ export async function buildSandcastleGallery({
metadata,
} = gallery ?? {};
// const { buildGalleryList } = await importSandcastleBuildFunctions();
await buildGalleryList({
rootDirectory,
publicDirectory: outputDir,