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: #### Fixes :wrench:
- Billboards using `imageSubRegion` now render as expected. [#12585](https://github.com/CesiumGS/cesium/issues/12585) - 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: #### Additions :tada:

View File

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

View File

@ -9,8 +9,8 @@ import { fileURLToPath } from "node:url";
* @returns {number} exit code from the tsc command * @returns {number} exit code from the tsc command
*/ */
export default async function typescriptCompile(configPath) { export default async function typescriptCompile(configPath) {
const tsPath = import.meta.resolve("typescript"); const tsPath = fileURLToPath(import.meta.resolve("typescript"));
const binPath = fileURLToPath(join(tsPath, "../../bin/tsc")); const binPath = join(tsPath, "../../bin/tsc");
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const ls = spawn(binPath, ["-p", configPath]); 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 __dirname = dirname(fileURLToPath(import.meta.url));
const projectRoot = join(__dirname, ".."); 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. * Parses Sandcastle config file and returns its values.
* @returns {Promise<Record<string,any>>} A promise that resolves to the config values. * @returns {Promise<Record<string,any>>} A promise that resolves to the config values.
@ -52,10 +43,7 @@ export async function buildSandcastleApp({
outputToBuildDir, outputToBuildDir,
includeDevelopment, includeDevelopment,
}) { }) {
// const { join, dirname } = path;
const __dirname = dirname(fileURLToPath(import.meta.url)); const __dirname = dirname(fileURLToPath(import.meta.url));
// const { createSandcastleConfig, buildStatic } =
// await importSandcastleBuildFunctions();
const version = await getVersion(); const version = await getVersion();
let config; let config;
if (outputToBuildDir) { if (outputToBuildDir) {
@ -168,8 +156,6 @@ export async function buildSandcastleGallery({
metadata, metadata,
} = gallery ?? {}; } = gallery ?? {};
// const { buildGalleryList } = await importSandcastleBuildFunctions();
await buildGalleryList({ await buildGalleryList({
rootDirectory, rootDirectory,
publicDirectory: outputDir, publicDirectory: outputDir,