diff --git a/src/@types/EngineGpuHandles.d.ts b/src/@types/EngineGpuHandles.d.ts index 796e955a..bd28f101 100644 --- a/src/@types/EngineGpuHandles.d.ts +++ b/src/@types/EngineGpuHandles.d.ts @@ -33,10 +33,10 @@ * GPU bag rather than the whole `EngineState`. */ -import type { PointRenderer } from '../services/gpu/pointRenderer'; -import type { PostProcess } from '../services/gpu/postProcess'; -import type { createPickRenderer } from '../services/gpu/pickRenderer'; -import type { FilamentRenderer } from '../services/gpu/filamentRenderer'; +import type { PointRenderer } from '../services/gpu/renderers/pointRenderer'; +import type { PostProcess } from '../services/gpu/passes/postProcess'; +import type { createPickRenderer } from '../services/gpu/renderers/pickRenderer'; +import type { FilamentRenderer } from '../services/gpu/renderers/filamentRenderer'; export type EngineGpuHandles = { renderer: PointRenderer | null; diff --git a/src/data/defaults.ts b/src/data/defaults.ts index 41ec5146..659e1be0 100644 --- a/src/data/defaults.ts +++ b/src/data/defaults.ts @@ -107,7 +107,7 @@ export const DEFAULT_DEPTH_FADE_ENABLED = true; * Procedural Milky Way impostor defaults ON. The single screen-aligned * quad at the world origin gives the user a visceral "you are here" * sense before they fly out into the cosmic-web view. See - * `services/gpu/milkyWayRenderer.ts` and `utils/math/milkyWayFade.ts` + * `services/gpu/renderers/milkyWayRenderer.ts` and `utils/math/milkyWayFade.ts` * for the rendering rationale and the distance-fade band. */ export const DEFAULT_MILKY_WAY_ENABLED = true; @@ -128,7 +128,7 @@ export const DEFAULT_MILKY_WAY_ENABLED = true; * For local-dev clones without the offline DisPerSE pipeline run, the * file is missing → `loadFilaments` returns null silently → the * renderer skips the overlay regardless of this default. No regression - * for that path. See `services/gpu/filamentRenderer.ts`. + * for that path. See `services/gpu/renderers/filamentRenderer.ts`. */ export const DEFAULT_FILAMENTS_ENABLED = true; diff --git a/src/services/engine/frame/renderFrame.ts b/src/services/engine/frame/renderFrame.ts index c430d269..d4ac8b8c 100644 --- a/src/services/engine/frame/renderFrame.ts +++ b/src/services/engine/frame/renderFrame.ts @@ -92,12 +92,12 @@ import type { OrbitCamera, PointCloud } from '../../../@types'; import type { Source } from '../../../data/sources'; import type { BiasMode } from '../../../data/biasMode'; import type { ToneMapCurve } from '../../../data/toneMapCurve'; -import type { PointRenderer } from '../../gpu/pointRenderer'; -import type { PostProcess } from '../../gpu/postProcess'; -import type { QuadRenderer } from '../../gpu/quadRenderer'; -import type { DiskRenderer } from '../../gpu/diskRenderer'; -import type { MilkyWayRenderer } from '../../gpu/milkyWayRenderer'; -import type { FilamentRenderer } from '../../gpu/filamentRenderer'; +import type { PointRenderer } from '../../gpu/renderers/pointRenderer'; +import type { PostProcess } from '../../gpu/passes/postProcess'; +import type { QuadRenderer } from '../../gpu/renderers/quadRenderer'; +import type { DiskRenderer } from '../../gpu/renderers/diskRenderer'; +import type { MilkyWayRenderer } from '../../gpu/renderers/milkyWayRenderer'; +import type { FilamentRenderer } from '../../gpu/renderers/filamentRenderer'; import type { ThumbnailSubsystem } from '../subsystems/thumbnailSubsystem'; import type { FamousMetaEntry, FamousXrefMap } from '../../loading/fetchers/famousMetaFetcher'; import { milkyWayFadeAlpha } from '../../../utils/math/milkyWayFade'; diff --git a/src/services/engine/frame/runFrame.ts b/src/services/engine/frame/runFrame.ts index 4950cafa..3409851e 100644 --- a/src/services/engine/frame/runFrame.ts +++ b/src/services/engine/frame/runFrame.ts @@ -73,10 +73,10 @@ import type { EngineCallbacks, EngineState } from '../../../@types'; import type { Source } from '../../../data/sources'; -import type { QuadRenderer } from '../../gpu/quadRenderer'; -import type { DiskRenderer } from '../../gpu/diskRenderer'; -import type { MilkyWayRenderer } from '../../gpu/milkyWayRenderer'; -import type { FilamentRenderer } from '../../gpu/filamentRenderer'; +import type { QuadRenderer } from '../../gpu/renderers/quadRenderer'; +import type { DiskRenderer } from '../../gpu/renderers/diskRenderer'; +import type { MilkyWayRenderer } from '../../gpu/renderers/milkyWayRenderer'; +import type { FilamentRenderer } from '../../gpu/renderers/filamentRenderer'; import type { FpsCounter } from '../subsystems/fpsCounter'; import { computeViewProj, updatePosition } from '../../camera/orbitCamera'; diff --git a/src/services/engine/interaction/clickHandler.ts b/src/services/engine/interaction/clickHandler.ts index bac15250..b6ce1c8b 100644 --- a/src/services/engine/interaction/clickHandler.ts +++ b/src/services/engine/interaction/clickHandler.ts @@ -67,7 +67,7 @@ import type { PointCloud, PointInfo } from '../../../@types'; import { Source } from '../../../data/sources'; -import type { createPickRenderer } from '../../gpu/pickRenderer'; +import type { createPickRenderer } from '../../gpu/renderers/pickRenderer'; /** * Snapshot of the renderer's per-source draw records the picker diff --git a/src/services/engine/phases/initGpu.ts b/src/services/engine/phases/initGpu.ts index d7e43190..234fe589 100644 --- a/src/services/engine/phases/initGpu.ts +++ b/src/services/engine/phases/initGpu.ts @@ -71,13 +71,13 @@ */ import { initGpu as gpuInitGpu, resizeCanvasToDisplay } from '../../gpu/device'; -import { PointRenderer } from '../../gpu/pointRenderer'; -import { createPostProcess } from '../../gpu/postProcess'; -import { QuadRenderer } from '../../gpu/quadRenderer'; -import { DiskRenderer } from '../../gpu/diskRenderer'; -import { ProceduralDiskRenderer } from '../../gpu/proceduralDiskRenderer'; -import { MilkyWayRenderer } from '../../gpu/milkyWayRenderer'; -import { FilamentRenderer } from '../../gpu/filamentRenderer'; +import { PointRenderer } from '../../gpu/renderers/pointRenderer'; +import { createPostProcess } from '../../gpu/passes/postProcess'; +import { QuadRenderer } from '../../gpu/renderers/quadRenderer'; +import { DiskRenderer } from '../../gpu/renderers/diskRenderer'; +import { ProceduralDiskRenderer } from '../../gpu/renderers/proceduralDiskRenderer'; +import { MilkyWayRenderer } from '../../gpu/renderers/milkyWayRenderer'; +import { FilamentRenderer } from '../../gpu/renderers/filamentRenderer'; import { POINT_SOURCE_REGISTRY, wirePointSourceSlot } from '../wiring/pointSourceRegistry'; import type { EngineState } from '../../../@types'; diff --git a/src/services/engine/phases/wireInput.ts b/src/services/engine/phases/wireInput.ts index 0890dbf2..c0b7a735 100644 --- a/src/services/engine/phases/wireInput.ts +++ b/src/services/engine/phases/wireInput.ts @@ -79,7 +79,7 @@ import { Source } from '../../../data/sources'; import { createOrbitCamera } from '../../camera/orbitCamera'; import { attachOrbitControls } from '../../camera/orbitControls'; -import { createPickRenderer } from '../../gpu/pickRenderer'; +import { createPickRenderer } from '../../gpu/renderers/pickRenderer'; import { createClickResolver } from '../interaction/clickHandler'; import { attachEngineInputs } from '../interaction/inputBindings'; import { computeInitialCamera } from '../camera/cameraFraming'; diff --git a/src/services/engine/subsystems/thumbnailSubsystem.ts b/src/services/engine/subsystems/thumbnailSubsystem.ts index 55868e4a..610a538f 100644 --- a/src/services/engine/subsystems/thumbnailSubsystem.ts +++ b/src/services/engine/subsystems/thumbnailSubsystem.ts @@ -70,11 +70,11 @@ import { Source } from '../../../data/sources'; import { pickColourIndex } from '../../../data/colourIndex'; import type { PointCloud, QuadInstance } from '../../../@types'; import type { OrbitCamera } from '../../../@types'; -import { TextureAtlas } from '../../gpu/textureAtlas'; +import { TextureAtlas } from '../../gpu/resources/textureAtlas'; import { PriorityQueue } from '../../../utils/concurrency/priorityQueue'; -import type { QuadRenderer } from '../../gpu/quadRenderer'; -import { DiskRenderer, type DiskInstance } from '../../gpu/diskRenderer'; -import { ProceduralDiskRenderer } from '../../gpu/proceduralDiskRenderer'; +import type { QuadRenderer } from '../../gpu/renderers/quadRenderer'; +import { DiskRenderer, type DiskInstance } from '../../gpu/renderers/diskRenderer'; +import { ProceduralDiskRenderer } from '../../gpu/renderers/proceduralDiskRenderer'; import type { ProceduralDiskInstance } from '../../../@types/ProceduralDiskInstance'; import { fetchGalaxyBitmap } from '../../../utils/network/galaxyImageFetcher'; import { cartesianToRaDecZ } from '../../../utils/math'; diff --git a/src/services/gpu/fontMetrics.ts b/src/services/gpu/labels/fontMetrics.ts similarity index 100% rename from src/services/gpu/fontMetrics.ts rename to src/services/gpu/labels/fontMetrics.ts diff --git a/src/services/gpu/labelLayout.ts b/src/services/gpu/labels/labelLayout.ts similarity index 100% rename from src/services/gpu/labelLayout.ts rename to src/services/gpu/labels/labelLayout.ts diff --git a/src/services/gpu/youAreHereVisibility.ts b/src/services/gpu/labels/youAreHereVisibility.ts similarity index 100% rename from src/services/gpu/youAreHereVisibility.ts rename to src/services/gpu/labels/youAreHereVisibility.ts diff --git a/src/services/gpu/postProcess.ts b/src/services/gpu/passes/postProcess.ts similarity index 98% rename from src/services/gpu/postProcess.ts rename to src/services/gpu/passes/postProcess.ts index 7f0abb51..280adc45 100644 --- a/src/services/gpu/postProcess.ts +++ b/src/services/gpu/passes/postProcess.ts @@ -96,10 +96,10 @@ // compiles a strictly-smaller GPUShaderModule from disjoint source. // Both modules import their shared structs from `shaders/toneMap/io.wesl` // so the vertex-to-fragment interface stays byte-identical. -import vsCode from './shaders/toneMap/vertex.wesl?static'; -import fsCode from './shaders/toneMap/fragment.wesl?static'; -import { ToneMapCurve } from '../../data/toneMapCurve'; -import { createShaderModuleWithDevLog } from './shaderCompileLogger'; +import vsCode from '../shaders/toneMap/vertex.wesl?static'; +import fsCode from '../shaders/toneMap/fragment.wesl?static'; +import { ToneMapCurve } from '../../../data/toneMapCurve'; +import { createShaderModuleWithDevLog } from '../shaderCompileLogger'; /** * Plain `{ width, height }` pair, kept local to this module. We diff --git a/src/services/gpu/diskRenderer.ts b/src/services/gpu/renderers/diskRenderer.ts similarity index 97% rename from src/services/gpu/diskRenderer.ts rename to src/services/gpu/renderers/diskRenderer.ts index 950003d4..53adda8f 100644 --- a/src/services/gpu/diskRenderer.ts +++ b/src/services/gpu/renderers/diskRenderer.ts @@ -27,10 +27,10 @@ */ import type { mat4 } from 'gl-matrix'; -import type { GpuContext } from '../../@types'; -import vsCode from './shaders/disks/vertex.wesl?static'; -import fsCode from './shaders/disks/fragment.wesl?static'; -import { createShaderModuleWithDevLog } from './shaderCompileLogger'; +import type { GpuContext } from '../../../@types'; +import vsCode from '../shaders/disks/vertex.wesl?static'; +import fsCode from '../shaders/disks/fragment.wesl?static'; +import { createShaderModuleWithDevLog } from '../shaderCompileLogger'; export type DiskInstance = { x: number; diff --git a/src/services/gpu/filamentRenderer.ts b/src/services/gpu/renderers/filamentRenderer.ts similarity index 97% rename from src/services/gpu/filamentRenderer.ts rename to src/services/gpu/renderers/filamentRenderer.ts index 19cc56b4..36468d54 100644 --- a/src/services/gpu/filamentRenderer.ts +++ b/src/services/gpu/renderers/filamentRenderer.ts @@ -22,12 +22,12 @@ * - clear() → drops the instance buffer * - destroy() → releases all GPU resources */ -import vsCode from './shaders/filaments/vertex.wesl?static'; -import fsCode from './shaders/filaments/fragment.wesl?static'; -import type { FilamentCloud } from '../../@types/FilamentCloud'; +import vsCode from '../shaders/filaments/vertex.wesl?static'; +import fsCode from '../shaders/filaments/fragment.wesl?static'; +import type { FilamentCloud } from '../../../@types/FilamentCloud'; import type { mat4 } from 'gl-matrix'; -import { CloudFade } from './cloudFade'; -import { createShaderModuleWithDevLog } from './shaderCompileLogger'; +import { CloudFade } from '../resources/cloudFade'; +import { createShaderModuleWithDevLog } from '../shaderCompileLogger'; const FLOATS_PER_SEGMENT = 8; // startxyz + startD + endxyz + endD diff --git a/src/services/gpu/milkyWayRenderer.ts b/src/services/gpu/renderers/milkyWayRenderer.ts similarity index 98% rename from src/services/gpu/milkyWayRenderer.ts rename to src/services/gpu/renderers/milkyWayRenderer.ts index af5ae836..9443fbc2 100644 --- a/src/services/gpu/milkyWayRenderer.ts +++ b/src/services/gpu/renderers/milkyWayRenderer.ts @@ -86,9 +86,9 @@ // for the procedural-galaxy helpers. Sharing modules across pipelines // would invite the WebGPU 'auto' bind-group-layout trap — sidestepped // here by giving each stage its own module from disjoint sources. -import vsCode from './shaders/milkyWay/vertex.wesl?static'; -import fsCode from './shaders/milkyWay/fragment.wesl?static'; -import { createShaderModuleWithDevLog } from './shaderCompileLogger'; +import vsCode from '../shaders/milkyWay/vertex.wesl?static'; +import fsCode from '../shaders/milkyWay/fragment.wesl?static'; +import { createShaderModuleWithDevLog } from '../shaderCompileLogger'; type Init = { device: GPUDevice; diff --git a/src/services/gpu/pickRenderer.ts b/src/services/gpu/renderers/pickRenderer.ts similarity index 99% rename from src/services/gpu/pickRenderer.ts rename to src/services/gpu/renderers/pickRenderer.ts index 1c8c7baf..d25f5679 100644 --- a/src/services/gpu/pickRenderer.ts +++ b/src/services/gpu/renderers/pickRenderer.ts @@ -58,11 +58,11 @@ // shared with PointRenderer, but we compile our OWN GPUShaderModule from // it; never share modules across pipelines (see the `auto` bind-group- // layout trap noted in pointRenderer.ts). -import vsCode from './shaders/points/vertex.wesl?static'; -import pickFsCode from './shaders/points/pickFragment.wesl?static'; -import type { Source } from '../../data/sources'; +import vsCode from '../shaders/points/vertex.wesl?static'; +import pickFsCode from '../shaders/points/pickFragment.wesl?static'; +import type { Source } from '../../../data/sources'; import type { PointRenderer } from './pointRenderer'; -import { createShaderModuleWithDevLog } from './shaderCompileLogger'; +import { createShaderModuleWithDevLog } from '../shaderCompileLogger'; // ─── Types ──────────────────────────────────────────────────────────────────── diff --git a/src/services/gpu/pointRenderer.ts b/src/services/gpu/renderers/pointRenderer.ts similarity index 98% rename from src/services/gpu/pointRenderer.ts rename to src/services/gpu/renderers/pointRenderer.ts index 6c7b27d8..36277354 100644 --- a/src/services/gpu/pointRenderer.ts +++ b/src/services/gpu/renderers/pointRenderer.ts @@ -40,15 +40,15 @@ */ import { mat4 } from 'gl-matrix'; -import type { PointCloud } from '../../@types'; -import { ALL_SOURCES, Source } from '../../data/sources'; -import { BiasMode } from '../../data/biasMode'; -import { type SchechterTriple } from '../../data/surveyFluxLimits'; +import type { PointCloud } from '../../../@types'; +import { ALL_SOURCES, Source } from '../../../data/sources'; +import { BiasMode } from '../../../data/biasMode'; +import { type SchechterTriple } from '../../../data/surveyFluxLimits'; import { type BuildPointInterleavedBufferInput, type BuildPointInterleavedBufferMode, type BuildPointInterleavedBufferResult, -} from '../engine/bake/buildPointInterleavedBuffer'; +} from '../../engine/bake/buildPointInterleavedBuffer'; // `?worker` is a Vite-specific import suffix. It instructs the bundler to // emit `buildPointInterleavedBuffer.worker.ts` as a separate worker chunk @@ -61,15 +61,15 @@ import { // In Node-only test environments the `?worker` suffix isn't resolvable; // tests inject a synchronous fallback via `setBuildBufferFactory` instead // of importing this module. See the `BuildBufferFactory` type below. -import BuildPointBufferWorker from '../engine/bake/buildPointInterleavedBuffer.worker?worker'; +import BuildPointBufferWorker from '../../engine/bake/buildPointInterleavedBuffer.worker?worker'; // Lazy-Schechter worker import — same `?worker` Vite suffix as the main // vertex bake, but for the much smaller (single Float32Array) Schechter // integral. Spawned by `setBiasMode(BiasMode.Schechter)` the first time // the user selects that mode; subsequent toggles reuse the cached // `Float32Array` per source for instant re-toggle. -import ComputeSchechterRatiosWorker from '../engine/bake/computeSchechterRatios.worker?worker'; -import { type ComputeSchechterRatiosInput } from '../engine/bake/computeSchechterRatios'; +import ComputeSchechterRatiosWorker from '../../engine/bake/computeSchechterRatios.worker?worker'; +import { type ComputeSchechterRatiosInput } from '../../engine/bake/computeSchechterRatios'; // Lazy-angular-reweight worker import — same `?worker` Vite suffix. The // HEALPix bake is much cheaper than the Schechter integral (~100-300 ms for @@ -78,8 +78,8 @@ import { type ComputeSchechterRatiosInput } from '../engine/bake/computeSchechte // `setBiasMode(BiasMode.AngularReweight)` the first time the user picks // that mode; subsequent toggles reuse `cachedAngularWeights` for instant // re-toggle. -import ComputeAngularWeightsWorker from '../engine/bake/computeAngularWeights.worker?worker'; -import { type ComputeAngularWeightsInput } from '../engine/bake/computeAngularWeights'; +import ComputeAngularWeightsWorker from '../../engine/bake/computeAngularWeights.worker?worker'; +import { type ComputeAngularWeightsInput } from '../../engine/bake/computeAngularWeights'; // `?static` is wesl-plugin's Vite import suffix. It runs the WESL linker at // build time and hands us a plain WGSL string with all `import` statements @@ -97,10 +97,10 @@ import { type ComputeAngularWeightsInput } from '../engine/bake/computeAngularWe // fragment GPUShaderModule from disjoint sources, eliminating a class of // selection-on-wrong-galaxy bugs that came from one shader module servicing // two pipelines with diverging fragment paths. -import vsCode from './shaders/points/vertex.wesl?static'; -import colorFsCode from './shaders/points/colorFragment.wesl?static'; -import { CloudFade } from './cloudFade'; -import { createShaderModuleWithDevLog } from './shaderCompileLogger'; +import vsCode from '../shaders/points/vertex.wesl?static'; +import colorFsCode from '../shaders/points/colorFragment.wesl?static'; +import { CloudFade } from '../resources/cloudFade'; +import { createShaderModuleWithDevLog } from '../shaderCompileLogger'; // ─── Layout constants ───────────────────────────────────────────────────────── diff --git a/src/services/gpu/proceduralDiskRenderer.ts b/src/services/gpu/renderers/proceduralDiskRenderer.ts similarity index 95% rename from src/services/gpu/proceduralDiskRenderer.ts rename to src/services/gpu/renderers/proceduralDiskRenderer.ts index c812e838..fbad46e0 100644 --- a/src/services/gpu/proceduralDiskRenderer.ts +++ b/src/services/gpu/renderers/proceduralDiskRenderer.ts @@ -11,10 +11,10 @@ * is just the JS-side pipeline wiring. */ -import vsCode from './shaders/proceduralDisks/vertex.wesl?static'; -import fsCode from './shaders/proceduralDisks/fragment.wesl?static'; -import type { ProceduralDiskInstance } from '../../@types/ProceduralDiskInstance'; -import { createShaderModuleWithDevLog } from './shaderCompileLogger'; +import vsCode from '../shaders/proceduralDisks/vertex.wesl?static'; +import fsCode from '../shaders/proceduralDisks/fragment.wesl?static'; +import type { ProceduralDiskInstance } from '../../../@types/ProceduralDiskInstance'; +import { createShaderModuleWithDevLog } from '../shaderCompileLogger'; const STRIDE_FLOATS = 12; // 3 vec4 per instance const STRIDE_BYTES = STRIDE_FLOATS * 4; diff --git a/src/services/gpu/quadRenderer.ts b/src/services/gpu/renderers/quadRenderer.ts similarity index 97% rename from src/services/gpu/quadRenderer.ts rename to src/services/gpu/renderers/quadRenderer.ts index 59e1d34b..a57e0a42 100644 --- a/src/services/gpu/quadRenderer.ts +++ b/src/services/gpu/renderers/quadRenderer.ts @@ -14,10 +14,10 @@ */ import type { mat4 } from 'gl-matrix'; -import type { GpuContext, QuadInstance } from '../../@types'; -import vsCode from './shaders/quads/vertex.wesl?static'; -import fsCode from './shaders/quads/fragment.wesl?static'; -import { createShaderModuleWithDevLog } from './shaderCompileLogger'; +import type { GpuContext, QuadInstance } from '../../../@types'; +import vsCode from '../shaders/quads/vertex.wesl?static'; +import fsCode from '../shaders/quads/fragment.wesl?static'; +import { createShaderModuleWithDevLog } from '../shaderCompileLogger'; /** * Per-instance vertex attributes packed as 12 floats / 48 bytes: diff --git a/src/services/gpu/cloudFade.ts b/src/services/gpu/resources/cloudFade.ts similarity index 100% rename from src/services/gpu/cloudFade.ts rename to src/services/gpu/resources/cloudFade.ts diff --git a/src/services/gpu/textureAtlas.ts b/src/services/gpu/resources/textureAtlas.ts similarity index 100% rename from src/services/gpu/textureAtlas.ts rename to src/services/gpu/resources/textureAtlas.ts diff --git a/src/services/gpu/shaders/filaments/fragment.wesl b/src/services/gpu/shaders/filaments/fragment.wesl index 5386705b..c788b0c8 100644 --- a/src/services/gpu/shaders/filaments/fragment.wesl +++ b/src/services/gpu/shaders/filaments/fragment.wesl @@ -39,7 +39,7 @@ import package::lib::masks::edgeBandMask; @group(0) @binding(0) var u : Uniforms; -// Per-cloud fade-in (CloudFade — see src/services/gpu/cloudFade.ts). +// Per-cloud fade-in (CloudFade — see src/services/gpu/resources/cloudFade.ts). // 'CloudUniforms' is imported from 'lib/cloudFade.wesl' (shared with // points.wesl). The CPU-side 'CloudFade' class produces the same // 16-byte layout for every consumer, so the shared shader struct is diff --git a/src/services/gpu/shaders/lib/cloudFade.wesl b/src/services/gpu/shaders/lib/cloudFade.wesl index 92c6e79c..5890ddb5 100644 --- a/src/services/gpu/shaders/lib/cloudFade.wesl +++ b/src/services/gpu/shaders/lib/cloudFade.wesl @@ -4,12 +4,12 @@ // skeleton, future overlays) has a tiny 16-byte uniform buffer at // '@group(1) @binding(0)' carrying the smoothstep-shaped fade-in // opacity. The CPU side that owns the buffer + bind group + per-frame -// 'writeBuffer' lives in 'src/services/gpu/cloudFade.ts'; this lib is +// 'writeBuffer' lives in 'src/services/gpu/resources/cloudFade.ts'; this lib is // the GPU half of the same contract. // // ## Why a SHARED struct // -// The CPU-side 'CloudFade' class (services/gpu/cloudFade.ts) emits a +// The CPU-side 'CloudFade' class (services/gpu/resources/cloudFade.ts) emits a // SINGLE 16-byte layout — 'opacity: f32 + sourceCode: u32 + 8 bytes pad' // — for every consumer. Both the points renderer and the filaments // renderer bind buffers built by the same class, and the bytes are @@ -64,7 +64,7 @@ struct CloudUniforms { // stage to compose '(sourceCode << 27u) | instance_index' for the // selection-halo + pick-output paths. Filaments doesn't read this // slot today, but the CPU producer ('CloudFade.writeFrame' in - // services/gpu/cloudFade.ts) writes it for every cloud regardless, + // services/gpu/resources/cloudFade.ts) writes it for every cloud regardless, // so the byte is already there for a future filament feature to // opt into. sourceCode: u32, diff --git a/src/utils/network/galaxyImageFetcher.ts b/src/utils/network/galaxyImageFetcher.ts index 0b8c8531..7c22b5ce 100644 --- a/src/utils/network/galaxyImageFetcher.ts +++ b/src/utils/network/galaxyImageFetcher.ts @@ -24,7 +24,7 @@ */ import { sdssThumbnailUrl, dssThumbnailUrl } from '../math'; -import { SLOT_SIDE } from '../../services/gpu/textureAtlas'; +import { SLOT_SIDE } from '../../services/gpu/resources/textureAtlas'; export type FetchGalaxyBitmapInput = { ra: number; diff --git a/tests/services/engine/interaction/clickHandler.test.ts b/tests/services/engine/interaction/clickHandler.test.ts index 5de90234..6debf633 100644 --- a/tests/services/engine/interaction/clickHandler.test.ts +++ b/tests/services/engine/interaction/clickHandler.test.ts @@ -24,7 +24,7 @@ import { } from '../../../../src/services/engine/interaction/clickHandler'; import { Source } from '../../../../src/data/sources'; import type { PointCloud, PointInfo } from '../../../../src/@types'; -import type { createPickRenderer } from '../../../../src/services/gpu/pickRenderer'; +import type { createPickRenderer } from '../../../../src/services/gpu/renderers/pickRenderer'; type PickRenderer = ReturnType; diff --git a/tests/services/gpu/fontMetrics.test.ts b/tests/services/gpu/labels/fontMetrics.test.ts similarity index 97% rename from tests/services/gpu/fontMetrics.test.ts rename to tests/services/gpu/labels/fontMetrics.test.ts index aa3d22d9..320cd1e0 100644 --- a/tests/services/gpu/fontMetrics.test.ts +++ b/tests/services/gpu/labels/fontMetrics.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import { parseFontMetrics, lookupGlyph, type FontMetrics } from '../../../src/services/gpu/fontMetrics'; +import { parseFontMetrics, lookupGlyph, type FontMetrics } from '../../../../src/services/gpu/labels/fontMetrics'; const FIXTURE = { pages: ['jetbrains-mono.png'], diff --git a/tests/services/gpu/labelLayout.test.ts b/tests/services/gpu/labels/labelLayout.test.ts similarity index 90% rename from tests/services/gpu/labelLayout.test.ts rename to tests/services/gpu/labels/labelLayout.test.ts index 5d53bd15..9bee1a43 100644 --- a/tests/services/gpu/labelLayout.test.ts +++ b/tests/services/gpu/labels/labelLayout.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import { layoutLabel, type GlyphQuad } from '../../../src/services/gpu/labelLayout'; -import { parseFontMetrics } from '../../../src/services/gpu/fontMetrics'; +import { layoutLabel, type GlyphQuad } from '../../../../src/services/gpu/labels/labelLayout'; +import { parseFontMetrics } from '../../../../src/services/gpu/labels/fontMetrics'; const FIXTURE = { pages: ['atlas.png'], diff --git a/tests/services/gpu/youAreHereVisibility.test.ts b/tests/services/gpu/labels/youAreHereVisibility.test.ts similarity index 93% rename from tests/services/gpu/youAreHereVisibility.test.ts rename to tests/services/gpu/labels/youAreHereVisibility.test.ts index 9d17cf4f..8aa42655 100644 --- a/tests/services/gpu/youAreHereVisibility.test.ts +++ b/tests/services/gpu/labels/youAreHereVisibility.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import { youAreHereAlpha, YOU_ARE_HERE_NEAR_MPC, YOU_ARE_HERE_FAR_MPC } from '../../../src/services/gpu/youAreHereVisibility'; +import { youAreHereAlpha, YOU_ARE_HERE_NEAR_MPC, YOU_ARE_HERE_FAR_MPC } from '../../../../src/services/gpu/labels/youAreHereVisibility'; describe('youAreHereAlpha', () => { it('is 1.0 when camera is closer than NEAR threshold', () => { diff --git a/tests/services/gpu/postProcess.test.ts b/tests/services/gpu/passes/postProcess.test.ts similarity index 98% rename from tests/services/gpu/postProcess.test.ts rename to tests/services/gpu/passes/postProcess.test.ts index 50f495cd..85e4b4f7 100644 --- a/tests/services/gpu/postProcess.test.ts +++ b/tests/services/gpu/passes/postProcess.test.ts @@ -23,7 +23,7 @@ import { asinhStretch, gamma2, acesFilmic, -} from '../../../src/services/gpu/postProcess'; +} from '../../../../src/services/gpu/passes/postProcess'; beforeAll(() => { // Same WebGPU global stubs the other GPU module tests use; mirror diff --git a/tests/services/gpu/toneMap.test.ts b/tests/services/gpu/passes/toneMap.test.ts similarity index 98% rename from tests/services/gpu/toneMap.test.ts rename to tests/services/gpu/passes/toneMap.test.ts index 93457264..1ff68d0a 100644 --- a/tests/services/gpu/toneMap.test.ts +++ b/tests/services/gpu/passes/toneMap.test.ts @@ -19,7 +19,7 @@ import { asinhStretch, gamma2, acesFilmic, -} from '../../../src/services/gpu/postProcess'; +} from '../../../../src/services/gpu/passes/postProcess'; const ALL_CURVES = [linearClamp, reinhardExtended, asinhStretch, gamma2, acesFilmic]; diff --git a/tests/services/gpu/filamentRenderer.test.ts b/tests/services/gpu/renderers/filamentRenderer.test.ts similarity index 91% rename from tests/services/gpu/filamentRenderer.test.ts rename to tests/services/gpu/renderers/filamentRenderer.test.ts index 2d6e1ebd..cd1ed044 100644 --- a/tests/services/gpu/filamentRenderer.test.ts +++ b/tests/services/gpu/renderers/filamentRenderer.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; -import { buildSegmentInstances } from '../../../src/services/gpu/filamentRenderer'; -import type { FilamentCloud } from '../../../src/@types/FilamentCloud'; +import { buildSegmentInstances } from '../../../../src/services/gpu/renderers/filamentRenderer'; +import type { FilamentCloud } from '../../../../src/@types/FilamentCloud'; describe('buildSegmentInstances', () => { it('emits one instance per consecutive vertex pair within each strip', () => { diff --git a/tests/services/gpu/milkyWayRenderer.test.ts b/tests/services/gpu/renderers/milkyWayRenderer.test.ts similarity index 93% rename from tests/services/gpu/milkyWayRenderer.test.ts rename to tests/services/gpu/renderers/milkyWayRenderer.test.ts index 46f100f2..1f4554df 100644 --- a/tests/services/gpu/milkyWayRenderer.test.ts +++ b/tests/services/gpu/renderers/milkyWayRenderer.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import { MilkyWayRenderer } from '../../../src/services/gpu/milkyWayRenderer'; +import { MilkyWayRenderer } from '../../../../src/services/gpu/renderers/milkyWayRenderer'; describe('MilkyWayRenderer', () => { it('exports the class as a constructor', () => { diff --git a/tests/services/gpu/pickRenderer.test.ts b/tests/services/gpu/renderers/pickRenderer.test.ts similarity index 97% rename from tests/services/gpu/pickRenderer.test.ts rename to tests/services/gpu/renderers/pickRenderer.test.ts index c84135eb..04fd1925 100644 --- a/tests/services/gpu/pickRenderer.test.ts +++ b/tests/services/gpu/renderers/pickRenderer.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, beforeAll, vi } from 'vitest'; -import { createPickRenderer } from '../../../src/services/gpu/pickRenderer'; -import { PointRenderer } from '../../../src/services/gpu/pointRenderer'; -import { Source } from '../../../src/data/sources'; +import { createPickRenderer } from '../../../../src/services/gpu/renderers/pickRenderer'; +import { PointRenderer } from '../../../../src/services/gpu/renderers/pointRenderer'; +import { Source } from '../../../../src/data/sources'; beforeAll(() => { // Same WebGPU global stubs the other gpu tests use; mirror their pattern. diff --git a/tests/services/gpu/pointRenderer.test.ts b/tests/services/gpu/renderers/pointRenderer.test.ts similarity index 98% rename from tests/services/gpu/pointRenderer.test.ts rename to tests/services/gpu/renderers/pointRenderer.test.ts index 227a64d8..c413bc6e 100644 --- a/tests/services/gpu/pointRenderer.test.ts +++ b/tests/services/gpu/renderers/pointRenderer.test.ts @@ -23,11 +23,11 @@ */ import { describe, it, expect, beforeAll, afterAll, vi } from 'vitest'; -import { PointRenderer } from '../../../src/services/gpu/pointRenderer'; -import { buildPointInterleavedBuffer } from '../../../src/services/engine/bake/buildPointInterleavedBuffer'; -import { Source } from '../../../src/data/sources'; -import { BiasMode } from '../../../src/data/biasMode'; -import type { PointCloud } from '../../../src/@types'; +import { PointRenderer } from '../../../../src/services/gpu/renderers/pointRenderer'; +import { buildPointInterleavedBuffer } from '../../../../src/services/engine/bake/buildPointInterleavedBuffer'; +import { Source } from '../../../../src/data/sources'; +import { BiasMode } from '../../../../src/data/biasMode'; +import type { PointCloud } from '../../../../src/@types'; // `GPUBufferUsage` is a browser-global enum exposed by the WebGPU runtime; // Node has no idea what it is. Vitest runs in Node, so referencing diff --git a/tests/services/gpu/proceduralDiskRenderer.test.ts b/tests/services/gpu/renderers/proceduralDiskRenderer.test.ts similarity index 85% rename from tests/services/gpu/proceduralDiskRenderer.test.ts rename to tests/services/gpu/renderers/proceduralDiskRenderer.test.ts index 56b309e2..3ccad9cb 100644 --- a/tests/services/gpu/proceduralDiskRenderer.test.ts +++ b/tests/services/gpu/renderers/proceduralDiskRenderer.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import { ProceduralDiskRenderer } from '../../../src/services/gpu/proceduralDiskRenderer'; +import { ProceduralDiskRenderer } from '../../../../src/services/gpu/renderers/proceduralDiskRenderer'; describe('ProceduralDiskRenderer', () => { it('exports the class as a value', () => { diff --git a/tests/services/gpu/textureAtlas.test.ts b/tests/services/gpu/resources/textureAtlas.test.ts similarity index 98% rename from tests/services/gpu/textureAtlas.test.ts rename to tests/services/gpu/resources/textureAtlas.test.ts index a11749d8..6fb9d8b6 100644 --- a/tests/services/gpu/textureAtlas.test.ts +++ b/tests/services/gpu/resources/textureAtlas.test.ts @@ -4,7 +4,7 @@ import { ATLAS_SIDE, SLOT_SIDE, SLOT_COUNT, -} from '../../../src/services/gpu/textureAtlas'; +} from '../../../../src/services/gpu/resources/textureAtlas'; describe('TextureAtlas slot state machine', () => { // Construct without a real GPU device — pass `null as any`. The state-machine