From 8a4b12c4d6045d470526c61746451b04bc080ce7 Mon Sep 17 00:00:00 2001 From: evanpelle Date: Sun, 17 May 2026 12:54:57 -0700 Subject: [PATCH] move WebGL atlases into resources/atlases/, route through assetUrl() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/client/render/gl/assets/ held 11 atlas files (PNGs + JSON metadata) that bypassed the asset-manifest pipeline — they were imported via Vite's ?url query, bundled, and served same-origin instead of going through the CDN like every other game asset. Moved them to resources/atlases/, switched the PNG imports to assetUrl("atlases/...") so they flow through the manifest, and updated the JSON metadata imports to "resources/atlases/..." paths. Also dropped an orphan copy of MissileSiloIconWhite.svg (no callers; resources/images/ already had the canonical version). render-settings.json stays in src/ — it's renderer tuning config consumed at bundle time, not a URL-served asset. --- .../atlases}/emoji-atlas-meta.json | 0 .../atlases}/emoji-atlas.png | Bin .../atlases}/flag-atlas-meta.json | 0 .../atlases}/flag-atlas.png | Bin .../atlases}/fx-atlas-meta.json | 0 .../assets => resources/atlases}/fx-atlas.png | Bin .../atlases}/icon-atlas.png | Bin .../atlases}/msdf-atlas.json | 0 .../atlases}/msdf-atlas.png | Bin .../atlases}/status-atlas-meta.json | 0 .../atlases}/status-atlas.png | Bin .../atlases}/unit-atlas.png | Bin .../render/gl/assets/MissileSiloIconWhite.svg | 72 ------------------ .../render/gl/passes/conquest-popup-pass.ts | 4 +- .../gl/passes/fx-pass/fx-sprite-pass.ts | 6 +- .../render/gl/passes/name-pass/atlas-data.ts | 6 +- .../gl/passes/name-pass/debug-program.ts | 2 +- .../gl/passes/name-pass/icon-program.ts | 10 ++- .../passes/name-pass/status-icon-program.ts | 6 +- .../gl/passes/name-pass/text-program.ts | 4 +- .../render/gl/passes/radial-menu-pass.ts | 6 +- .../render/gl/passes/structure-level-pass.ts | 4 +- src/client/render/gl/passes/structure-pass.ts | 4 +- src/client/render/gl/passes/unit-pass.ts | 4 +- 24 files changed, 35 insertions(+), 93 deletions(-) rename {src/client/render/gl/assets => resources/atlases}/emoji-atlas-meta.json (100%) rename {src/client/render/gl/assets => resources/atlases}/emoji-atlas.png (100%) rename {src/client/render/gl/assets => resources/atlases}/flag-atlas-meta.json (100%) rename {src/client/render/gl/assets => resources/atlases}/flag-atlas.png (100%) rename {src/client/render/gl/assets => resources/atlases}/fx-atlas-meta.json (100%) rename {src/client/render/gl/assets => resources/atlases}/fx-atlas.png (100%) rename {src/client/render/gl/assets => resources/atlases}/icon-atlas.png (100%) rename {src/client/render/gl/assets => resources/atlases}/msdf-atlas.json (100%) rename {src/client/render/gl/assets => resources/atlases}/msdf-atlas.png (100%) rename {src/client/render/gl/assets => resources/atlases}/status-atlas-meta.json (100%) rename {src/client/render/gl/assets => resources/atlases}/status-atlas.png (100%) rename {src/client/render/gl/assets => resources/atlases}/unit-atlas.png (100%) delete mode 100644 src/client/render/gl/assets/MissileSiloIconWhite.svg diff --git a/src/client/render/gl/assets/emoji-atlas-meta.json b/resources/atlases/emoji-atlas-meta.json similarity index 100% rename from src/client/render/gl/assets/emoji-atlas-meta.json rename to resources/atlases/emoji-atlas-meta.json diff --git a/src/client/render/gl/assets/emoji-atlas.png b/resources/atlases/emoji-atlas.png similarity index 100% rename from src/client/render/gl/assets/emoji-atlas.png rename to resources/atlases/emoji-atlas.png diff --git a/src/client/render/gl/assets/flag-atlas-meta.json b/resources/atlases/flag-atlas-meta.json similarity index 100% rename from src/client/render/gl/assets/flag-atlas-meta.json rename to resources/atlases/flag-atlas-meta.json diff --git a/src/client/render/gl/assets/flag-atlas.png b/resources/atlases/flag-atlas.png similarity index 100% rename from src/client/render/gl/assets/flag-atlas.png rename to resources/atlases/flag-atlas.png diff --git a/src/client/render/gl/assets/fx-atlas-meta.json b/resources/atlases/fx-atlas-meta.json similarity index 100% rename from src/client/render/gl/assets/fx-atlas-meta.json rename to resources/atlases/fx-atlas-meta.json diff --git a/src/client/render/gl/assets/fx-atlas.png b/resources/atlases/fx-atlas.png similarity index 100% rename from src/client/render/gl/assets/fx-atlas.png rename to resources/atlases/fx-atlas.png diff --git a/src/client/render/gl/assets/icon-atlas.png b/resources/atlases/icon-atlas.png similarity index 100% rename from src/client/render/gl/assets/icon-atlas.png rename to resources/atlases/icon-atlas.png diff --git a/src/client/render/gl/assets/msdf-atlas.json b/resources/atlases/msdf-atlas.json similarity index 100% rename from src/client/render/gl/assets/msdf-atlas.json rename to resources/atlases/msdf-atlas.json diff --git a/src/client/render/gl/assets/msdf-atlas.png b/resources/atlases/msdf-atlas.png similarity index 100% rename from src/client/render/gl/assets/msdf-atlas.png rename to resources/atlases/msdf-atlas.png diff --git a/src/client/render/gl/assets/status-atlas-meta.json b/resources/atlases/status-atlas-meta.json similarity index 100% rename from src/client/render/gl/assets/status-atlas-meta.json rename to resources/atlases/status-atlas-meta.json diff --git a/src/client/render/gl/assets/status-atlas.png b/resources/atlases/status-atlas.png similarity index 100% rename from src/client/render/gl/assets/status-atlas.png rename to resources/atlases/status-atlas.png diff --git a/src/client/render/gl/assets/unit-atlas.png b/resources/atlases/unit-atlas.png similarity index 100% rename from src/client/render/gl/assets/unit-atlas.png rename to resources/atlases/unit-atlas.png diff --git a/src/client/render/gl/assets/MissileSiloIconWhite.svg b/src/client/render/gl/assets/MissileSiloIconWhite.svg deleted file mode 100644 index 4235be74e..000000000 --- a/src/client/render/gl/assets/MissileSiloIconWhite.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/src/client/render/gl/passes/conquest-popup-pass.ts b/src/client/render/gl/passes/conquest-popup-pass.ts index 01cb68640..f45ff4c3f 100644 --- a/src/client/render/gl/passes/conquest-popup-pass.ts +++ b/src/client/render/gl/passes/conquest-popup-pass.ts @@ -15,10 +15,12 @@ import { buildGlyphMetricsTex } from "./name-pass/data-textures"; import { layoutString } from "./name-pass/text-layout"; import { CHAR_RANGE, MAX_CHARS } from "./name-pass/types"; -import atlasUrl from "../assets/msdf-atlas.png?url"; +import { assetUrl } from "src/core/AssetUrls"; import fragSrc from "../shaders/conquest-popup/conquest-popup.frag.glsl?raw"; import vertSrc from "../shaders/conquest-popup/conquest-popup.vert.glsl?raw"; +const atlasUrl = assetUrl("atlases/msdf-atlas.png"); + // --------------------------------------------------------------------------- // Constants // --------------------------------------------------------------------------- diff --git a/src/client/render/gl/passes/fx-pass/fx-sprite-pass.ts b/src/client/render/gl/passes/fx-pass/fx-sprite-pass.ts index ecd61d0a6..aeebb1ea8 100644 --- a/src/client/render/gl/passes/fx-pass/fx-sprite-pass.ts +++ b/src/client/render/gl/passes/fx-pass/fx-sprite-pass.ts @@ -18,12 +18,14 @@ import { DynamicInstanceBuffer } from "../../dynamic-buffer"; import type { RenderSettings } from "../../render-settings"; import { createProgram, shaderSrc } from "../../utils/gl-utils"; -import fxAtlasMeta from "../../assets/fx-atlas-meta.json"; -import fxAtlasUrl from "../../assets/fx-atlas.png?url"; +import fxAtlasMeta from "resources/atlases/fx-atlas-meta.json"; +import { assetUrl } from "src/core/AssetUrls"; import spriteFragSrc from "../../shaders/fx/sprite.frag.glsl?raw"; import spriteVertSrc from "../../shaders/fx/sprite.vert.glsl?raw"; +const fxAtlasUrl = assetUrl("atlases/fx-atlas.png"); + // --------------------------------------------------------------------------- // FX type indices (atlas row) // --------------------------------------------------------------------------- diff --git a/src/client/render/gl/passes/name-pass/atlas-data.ts b/src/client/render/gl/passes/name-pass/atlas-data.ts index 73ef508c3..65f49a285 100644 --- a/src/client/render/gl/passes/name-pass/atlas-data.ts +++ b/src/client/render/gl/passes/name-pass/atlas-data.ts @@ -3,9 +3,9 @@ * kerning data, and icon atlas index maps from static JSON assets. */ -import emojiAtlasMeta from "../../assets/emoji-atlas-meta.json"; -import flagAtlasMeta from "../../assets/flag-atlas-meta.json"; -import atlasData from "../../assets/msdf-atlas.json"; +import emojiAtlasMeta from "resources/atlases/emoji-atlas-meta.json"; +import flagAtlasMeta from "resources/atlases/flag-atlas-meta.json"; +import atlasData from "resources/atlases/msdf-atlas.json"; import type { BMChar, BMKerning, ParsedAtlas } from "./types"; import { CHAR_RANGE } from "./types"; diff --git a/src/client/render/gl/passes/name-pass/debug-program.ts b/src/client/render/gl/passes/name-pass/debug-program.ts index 71eab14d6..fb9ae01d5 100644 --- a/src/client/render/gl/passes/name-pass/debug-program.ts +++ b/src/client/render/gl/passes/name-pass/debug-program.ts @@ -5,7 +5,7 @@ * The shared playerDataTex is passed in but not owned/deleted. */ -import flagAtlasMeta from "../../assets/flag-atlas-meta.json"; +import flagAtlasMeta from "resources/atlases/flag-atlas-meta.json"; import type { RenderSettings } from "../../render-settings"; import debugBoxFragSrc from "../../shaders/name/debug-box.frag.glsl?raw"; import debugBoxVertSrc from "../../shaders/name/debug-box.vert.glsl?raw"; diff --git a/src/client/render/gl/passes/name-pass/icon-program.ts b/src/client/render/gl/passes/name-pass/icon-program.ts index fb04f6353..02825dc02 100644 --- a/src/client/render/gl/passes/name-pass/icon-program.ts +++ b/src/client/render/gl/passes/name-pass/icon-program.ts @@ -5,16 +5,18 @@ * The shared playerDataTex is passed in but not owned/deleted. */ -import emojiAtlasMeta from "../../assets/emoji-atlas-meta.json"; -import emojiAtlasUrl from "../../assets/emoji-atlas.png?url"; -import flagAtlasMeta from "../../assets/flag-atlas-meta.json"; -import flagAtlasUrl from "../../assets/flag-atlas.png?url"; +import emojiAtlasMeta from "resources/atlases/emoji-atlas-meta.json"; +import flagAtlasMeta from "resources/atlases/flag-atlas-meta.json"; +import { assetUrl } from "src/core/AssetUrls"; import type { RenderSettings } from "../../render-settings"; import iconFragSrc from "../../shaders/name/icon.frag.glsl?raw"; import iconVertSrc from "../../shaders/name/icon.vert.glsl?raw"; import { createProgram } from "../../utils/gl-utils"; import type { ParsedAtlas } from "./types"; +const emojiAtlasUrl = assetUrl("atlases/emoji-atlas.png"); +const flagAtlasUrl = assetUrl("atlases/flag-atlas.png"); + export class IconProgram { private gl: WebGL2RenderingContext; private program: WebGLProgram; diff --git a/src/client/render/gl/passes/name-pass/status-icon-program.ts b/src/client/render/gl/passes/name-pass/status-icon-program.ts index 6f04ad5b6..07db99d6b 100644 --- a/src/client/render/gl/passes/name-pass/status-icon-program.ts +++ b/src/client/render/gl/passes/name-pass/status-icon-program.ts @@ -9,14 +9,16 @@ * The shared playerDataTex is passed in but not owned/deleted. */ -import statusAtlasMeta from "../../assets/status-atlas-meta.json"; -import statusAtlasUrl from "../../assets/status-atlas.png?url"; +import statusAtlasMeta from "resources/atlases/status-atlas-meta.json"; +import { assetUrl } from "src/core/AssetUrls"; import type { RenderSettings } from "../../render-settings"; import statusFragSrc from "../../shaders/name/status-icon.frag.glsl?raw"; import statusVertSrc from "../../shaders/name/status-icon.vert.glsl?raw"; import { createProgram } from "../../utils/gl-utils"; import type { ParsedAtlas } from "./types"; +const statusAtlasUrl = assetUrl("atlases/status-atlas.png"); + const MAX_STATUS_ICONS = 8; export class StatusIconProgram { diff --git a/src/client/render/gl/passes/name-pass/text-program.ts b/src/client/render/gl/passes/name-pass/text-program.ts index 8db2cadae..8c3805090 100644 --- a/src/client/render/gl/passes/name-pass/text-program.ts +++ b/src/client/render/gl/passes/name-pass/text-program.ts @@ -6,7 +6,7 @@ * and bound at draw time but not owned/deleted by this class. */ -import atlasUrl from "../../assets/msdf-atlas.png?url"; +import { assetUrl } from "src/core/AssetUrls"; import type { RenderSettings } from "../../render-settings"; import nameFragSrc from "../../shaders/name/name.frag.glsl?raw"; import nameVertSrc from "../../shaders/name/name.vert.glsl?raw"; @@ -14,6 +14,8 @@ import { createProgram, shaderSrc } from "../../utils/gl-utils"; import type { ParsedAtlas } from "./types"; import { LINES_PER_PLAYER, MAX_CHARS } from "./types"; +const atlasUrl = assetUrl("atlases/msdf-atlas.png"); + export interface TextProgramTextures { glyphMetrics: WebGLTexture; cursor: WebGLTexture; diff --git a/src/client/render/gl/passes/radial-menu-pass.ts b/src/client/render/gl/passes/radial-menu-pass.ts index d195897b9..2b9596588 100644 --- a/src/client/render/gl/passes/radial-menu-pass.ts +++ b/src/client/render/gl/passes/radial-menu-pass.ts @@ -20,8 +20,10 @@ import arcVertSrc from "../shaders/radial-menu/arcs.vert.glsl?raw"; import iconFragSrc from "../shaders/radial-menu/icon.frag.glsl?raw"; import iconVertSrc from "../shaders/radial-menu/icon.vert.glsl?raw"; -import emojiAtlasMeta from "../assets/emoji-atlas-meta.json"; -import emojiAtlasUrl from "../assets/emoji-atlas.png?url"; +import emojiAtlasMeta from "resources/atlases/emoji-atlas-meta.json"; +import { assetUrl } from "src/core/AssetUrls"; + +const emojiAtlasUrl = assetUrl("atlases/emoji-atlas.png"); // --------------------------------------------------------------------------- // Ring layout configs (CSS pixels) diff --git a/src/client/render/gl/passes/structure-level-pass.ts b/src/client/render/gl/passes/structure-level-pass.ts index 27e616458..b50cf29f8 100644 --- a/src/client/render/gl/passes/structure-level-pass.ts +++ b/src/client/render/gl/passes/structure-level-pass.ts @@ -26,10 +26,12 @@ import { buildGlyphMetricsTex } from "./name-pass/data-textures"; import { layoutString } from "./name-pass/text-layout"; import { CHAR_RANGE, MAX_CHARS } from "./name-pass/types"; -import atlasUrl from "../assets/msdf-atlas.png?url"; +import { assetUrl } from "src/core/AssetUrls"; import fragSrc from "../shaders/structure-level/structure-level.frag.glsl?raw"; import vertSrc from "../shaders/structure-level/structure-level.vert.glsl?raw"; +const atlasUrl = assetUrl("atlases/msdf-atlas.png"); + // --------------------------------------------------------------------------- // Constants // --------------------------------------------------------------------------- diff --git a/src/client/render/gl/passes/structure-pass.ts b/src/client/render/gl/passes/structure-pass.ts index d5874fad8..836bb7880 100644 --- a/src/client/render/gl/passes/structure-pass.ts +++ b/src/client/render/gl/passes/structure-pass.ts @@ -28,11 +28,11 @@ import type { RenderSettings } from "../render-settings"; import { getPaletteSize } from "../utils/color-utils"; import { createProgram, shaderSrc } from "../utils/gl-utils"; +import { assetUrl } from "src/core/AssetUrls"; import structureFragSrc from "../shaders/structure/structure.frag.glsl?raw"; import structureVertSrc from "../shaders/structure/structure.vert.glsl?raw"; -// Pre-built icon atlas (generated by scripts/generate-sprite-atlases.mjs) -import iconAtlasUrl from "../assets/icon-atlas.png?url"; +const iconAtlasUrl = assetUrl("atlases/icon-atlas.png"); // --------------------------------------------------------------------------- // Constants diff --git a/src/client/render/gl/passes/unit-pass.ts b/src/client/render/gl/passes/unit-pass.ts index 08be21d47..2b8803984 100644 --- a/src/client/render/gl/passes/unit-pass.ts +++ b/src/client/render/gl/passes/unit-pass.ts @@ -32,6 +32,7 @@ * Shells emit 2 instances (pos + lastPos) to match live game's 2-pixel trail. */ +import { assetUrl } from "src/core/AssetUrls"; import type { RendererConfig, UnitState } from "../../types"; import { TrainType, @@ -53,8 +54,7 @@ import unitVertSrc from "../shaders/unit/unit.vert.glsl?raw"; import { getPaletteSize } from "../utils/color-utils"; import { createProgram, shaderSrc } from "../utils/gl-utils"; -// Pre-built sprite atlas (generated by scripts/generate-sprite-atlases.mjs) -import unitAtlasUrl from "../assets/unit-atlas.png?url"; +const unitAtlasUrl = assetUrl("atlases/unit-atlas.png"); // --------------------------------------------------------------------------- // Constants