{"version":3,"sources":["../src/arena/FloatArena.ts","../src/utils/binding-alloc.ts","../src/includes/register.ts","../src/utils/glsl-wgsl.ts","../src/schema/ShadoStructSchema.ts","../src/schema/ShadoSchemaBuilder.ts","../src/utils/embedded-proxy.ts","../src/utils/thin-accessors.ts","../src/backings/encodeGpuFloatUpload.ts","../src/backings/StorageBacking.ts","../src/backings/DataTexBacking.ts","../src/decorators/index.ts","../src/core/Shado.ts","../src/extensions/NameplateData.ts","../src/msdf/index.ts"],"names":["BABYLON","isVarArray","isStructRef","resolveCtor","floatStrideOf","field","isVector","isMatrix","isScalar","genericASModuleSource","emitASUnmanagedFromSchema","buildOpsForParent","BABYLON2"],"mappings":"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","file":"chunk-YH5Q343O.cjs","sourcesContent":["export class FloatArena {\n  private ab: ArrayBuffer;\n  private f32: Float32Array;\n  private dv: DataView;\n  private dirty = true;\n  private listeners: Array<() => void> = [];\n  private canResize = false;\n\n  constructor(initialFloats = 1024, maxFloats = 1 << 22) {\n    try {\n      // @ts-ignore\n      this.ab = new ArrayBuffer(initialFloats * 4, {\n        maxByteLength: maxFloats * 4,\n      });\n      this.canResize = this.isResizableAB(this.ab);\n    } catch {\n      this.ab = new ArrayBuffer(initialFloats * 4);\n    }\n    this.f32 = new Float32Array(this.ab);\n    this.dv = new DataView(this.ab, this.f32.byteOffset, this.f32.byteLength);\n  }\n\n  private isResizableAB(ab: ArrayBuffer): boolean {\n    const any = ab as any;\n    if (typeof any.resizable === 'boolean') return any.resizable;\n    if (typeof any.maxByteLength === 'number') return any.maxByteLength > ab.byteLength;\n    return false;\n  }\n\n  onRealloc(cb: () => void) {\n    this.listeners.push(cb);\n  }\n\n  private rebroadcast() {\n    for (const fn of this.listeners) fn();\n  }\n\n  ensureCapacity(nextF: number) {\n    if (nextF <= this.f32.length) return;\n    const newF = Math.max(nextF, this.f32.length ? this.f32.length * 2 : 1024);\n\n    if (this.canResize && this.isResizableAB(this.ab)) {\n      try {\n        // @ts-ignore\n        (this.ab as any).resize(newF * 4);\n        this.f32 = new Float32Array(this.ab);\n        this.dv = new DataView(this.ab, this.f32.byteOffset, this.f32.byteLength);\n        this.dirty = true;\n        this.rebroadcast();\n        return;\n      } catch {\n        this.canResize = false;\n      }\n    }\n\n    const nextAB = new ArrayBuffer(newF * 4);\n    const nextF32 = new Float32Array(nextAB);\n    nextF32.set(this.f32);\n    this.ab = nextAB;\n    this.f32 = nextF32;\n    this.dv = new DataView(this.ab, this.f32.byteOffset, this.f32.byteLength);\n    this.dirty = true;\n    this.rebroadcast();\n  }\n\n  write(offF: number, src: ArrayLike<number>, lenF = (src as any).length ?? 0) {\n    this.ensureCapacity(offF + lenF);\n    if ((src as any).subarray) {\n      this.f32.set((src as any).subarray(0, lenF), offF);\n    } else {\n      for (let i = 0; i < lenF; i++) this.f32[offF + i] = (src as any)[i];\n    }\n    this.dirty = true;\n  }\n\n  view(offF: number, lenF: number): Float32Array {\n    return new Float32Array(this.ab, this.f32.byteOffset + offF * 4, lenF);\n  }\n\n  dataView(): DataView {\n    return this.dv;\n  }\n  take(): Float32Array {\n    return this.f32;\n  }\n  isDirty() {\n    return this.dirty;\n  }\n  markClean() {\n    this.dirty = false;\n  }\n  public markDirty() {\n    this.dirty = true;\n  }\n  adopt(next: Float32Array) {\n    this.ab = next.buffer as any;\n    this.f32 = next;\n    this.dv = new DataView(this.ab, this.f32.byteOffset, this.f32.byteLength);\n    this.canResize = this.isResizableAB(this.ab);\n    this.dirty = true;\n    this.rebroadcast();\n  }\n}\n","export class BindingAlloc {\n  private next = 10;\n  private used = new Map<string, number>();\n  constructor(startAt = 10) {\n    this.next = startAt;\n  }\n  takeFor(symbol: string, count = 1): number {\n    if (this.used.has(symbol)) return this.used.get(symbol)!;\n    const b = this.next;\n    this.used.set(symbol, b);\n    this.next += count;\n    return b;\n  }\n  take(count = 1): number {\n    const b = this.next;\n    this.next += count;\n    return b;\n  }\n}\nconst RESERVED_TYPES = new Set(['FragmentInputs']);\nexport function safeTypeName(name: string) {\n  return RESERVED_TYPES.has(name) ? `${name}_User` : name;\n}\n","import { BABYLON } from '../babylon';\nimport type { ShadoStructSchema } from '../schema/ShadoStructSchema';\nimport { resolveCtor } from '../utils/type-helpers';\n\nexport function setIncludeChunkWGSL(name: string, wgsl: string) {\n  const Eff: any = BABYLON.Effect;\n  const Store: any = BABYLON.ShaderStore;\n  for (const s of [\n    Eff?.IncludesShadersStoreWGSL,\n    Store?.IncludesShadersStoreWGSL,\n    Store?.ShadersStoreWGSL?.IncludesShadersStore,\n    Eff?.ShadersStoreWGSL?.IncludesShadersStore,\n  ]) {\n    if (s) s[name] = wgsl;\n  }\n}\n\nexport function setIncludeChunkFX(name: string, fx: string) {\n  const Eff: any = BABYLON.Effect;\n  const Store: any = BABYLON.ShaderStore;\n  for (const s of [\n    Eff?.IncludesShadersStoreWGSL,\n    Eff?.ShadersStoreWGSL?.IncludesShadersStore,\n    Store?.IncludesShadersStoreWGSL,\n    Store?.ShadersStoreWGSL?.IncludesShadersStore,\n  ]) {\n    if (s) delete s[name];\n  }\n  for (const s of [Eff?.IncludesShadersStore, Store?.IncludesShadersStore]) {\n    if (s) s[name] = fx;\n  }\n}\n\nexport function setIncludeChunkBoth(name: string, glsl: string, wgsl: string) {\n  setIncludeChunkFX(name, glsl);\n  setIncludeChunkWGSL(name, wgsl);\n}\n\nexport function registerIncludesOnEngine(schema: ShadoStructSchema, customName?: string) {\n  for (const f of schema.fields as any) {\n    const isVarArray = typeof f.type === 'object' && !!f.type?.arrayOf;\n    const isStructRef = f.type && typeof f.type === 'object' && 'structOf' in f.type;\n    if (isStructRef) {\n      const childCtor = resolveCtor(f.type.structOf);\n      if (!childCtor?.getSchema)\n        throw new Error(\n          `Field ${f.name} in ${schema.name} is a struct but structOf has no getSchema()`\n        );\n      const child = childCtor.getSchema();\n      registerIncludesOnEngine(child);\n    } else if (isVarArray && f.type.arrayOf?.structOf) {\n      const child = resolveCtor(f.type.arrayOf.structOf).getSchema();\n      registerIncludesOnEngine(child);\n    }\n  }\n  const name = customName ?? schema.name;\n  setIncludeChunkFX(name, schema.emitHeaderStruct());\n  setIncludeChunkFX(`${name}Storage`, schema.emitGLSLStorage(0, 0));\n  setIncludeChunkFX(`${name}Offsets`, schema.emitOffsets());\n\n  setIncludeChunkWGSL(name, (schema as any).emitHeaderStructWGSL());\n  setIncludeChunkWGSL(`${name}Offsets`, (schema as any).emitOffsetsWGSL());\n  setIncludeChunkWGSL(`${name}Storage`, (schema as any).emitWGSLStorage());\n}\n","import type { MatrixType, ScalarType, VectorType } from '../types';\n\nexport function toWGSLType(t: ScalarType | VectorType | MatrixType): string {\n  switch (t) {\n    case 'f32':\n      return 'f32';\n    case 'i32':\n      return 'i32';\n    case 'u32':\n      return 'u32';\n    case 'vec2':\n      return 'vec2f';\n    case 'vec3':\n      return 'vec3f';\n    case 'vec4':\n      return 'vec4f';\n    case 'mat2':\n      return 'mat2x2f';\n    case 'mat3':\n      return 'mat3x3f';\n    case 'mat4':\n      return 'mat4x4f';\n    default:\n      throw new Error(`Unknown WGSL type: ${t as any}`);\n  }\n}\n\nexport function toGLSLType(t: ScalarType | VectorType | MatrixType): string {\n  switch (t) {\n    case 'f32':\n      return 'float';\n    case 'i32':\n      return 'int';\n    case 'u32':\n      return 'uint';\n    case 'vec2':\n      return 'vec2';\n    case 'vec3':\n      return 'vec3';\n    case 'vec4':\n      return 'vec4';\n    case 'mat2':\n      return 'mat2';\n    case 'mat3':\n      return 'mat3';\n    case 'mat4':\n      return 'mat4';\n    default:\n      throw new Error(`Unknown GLSL type: ${t as any}`);\n  }\n}\n\nexport const lc = (s: string) => s.charAt(0).toLowerCase() + s.slice(1);\nexport const roundUpFloats = (x: number, a: number) => Math.ceil(x / a) * a;\n","import type { FieldDef } from '../types';\nimport { lc, toGLSLType, toWGSLType } from '../utils/glsl-wgsl';\nimport { floatStrideOf, isStructRef, isVarArray, resolveCtor } from '../utils/type-helpers';\n\nexport class ShadoStructSchema {\n  public readonly name: string;\n  public readonly fields: ReadonlyArray<FieldDef>;\n  public readonly headerFloatCount: number;\n\n  public readonly embeddedStructs: Record<\n    string,\n    {\n      schema: ShadoStructSchema;\n      headerFloatOffset: number;\n      headerFloatSize: number;\n    }\n  > = {};\n  public readonly structArrays: Record<\n    string,\n    { schema: ShadoStructSchema; floatStride: number; ctor: any }\n  > = {};\n  public readonly varArrays: Record<string, { elemType: any; floatStride: number }>;\n\n  constructor(name: string, laidOut: FieldDef[], headerFloatCount: number) {\n    this.name = name;\n    this.fields = laidOut;\n    this.headerFloatCount = headerFloatCount;\n\n    this.varArrays = {};\n    for (const f of laidOut) {\n      if (isVarArray(f.type)) {\n        const elem = (f.type as any).arrayOf;\n        if (!isStructRef(elem)) {\n          this.varArrays[f.name] = {\n            elemType: elem,\n            floatStride: floatStrideOf(elem),\n          };\n        }\n      }\n    }\n\n    for (const f of laidOut) {\n      if (isVarArray(f.type) && isStructRef((f.type as any).arrayOf)) {\n        const childCtor = resolveCtor((f.type as any).arrayOf.structOf);\n        const childSchema = childCtor.getSchema();\n        (this as any).structArrays[f.name] = {\n          schema: childSchema,\n          floatStride: childSchema.headerFloatCount,\n          ctor: childCtor,\n        };\n      } else if (isStructRef(f.type)) {\n        const childCtor = resolveCtor(f.type.structOf);\n        const childSchema = childCtor.getSchema();\n        (this as any).embeddedStructs[f.name] = {\n          schema: childSchema,\n          headerFloatOffset: f.headerFloatOffset ?? 0,\n          headerFloatSize: f.headerFloatSize ?? childSchema.headerFloatCount,\n        };\n      }\n    }\n  }\n\n  public emitHeaderStructWGSL(): string {\n    const name = this.name;\n    const L: string[] = [];\n    for (const f of this.fields) {\n      if (isVarArray(f.type)) continue;\n      if (isStructRef(f.type)) {\n        const childCtor = resolveCtor(f.type.structOf);\n        const childSchema = childCtor.getSchema();\n        L.push(`  ${f.name}: ${childSchema.name}Header;`);\n      } else {\n        L.push(`  ${f.name}: ${toWGSLType(f.type as any)},`);\n      }\n    }\n    if (!L.length) L.push('  _dummy: f32,');\n    return `struct ${name}Header {\\n${L.join('\\n')}\\n};`;\n  }\n\n  public emitOffsetsWGSL(): string {\n    const name = this.name;\n    const L: string[] = [];\n    L.push(`const ${name}_STRIDE_F : i32 = ${this.headerFloatCount};`);\n    for (const f of this.fields) {\n      if (isVarArray(f.type)) continue;\n      L.push(`const ${name}_${f.name}_OFF : i32 = ${f.headerFloatOffset ?? 0};`);\n    }\n    return L.join('\\n');\n  }\n\n  public emitHeaderStruct(): string {\n    const name = this.name;\n    const L: string[] = [];\n    for (const f of this.fields) {\n      if (isVarArray(f.type)) continue;\n      if (isStructRef(f.type)) {\n        const childCtor = resolveCtor(f.type.structOf);\n        const childSchema = childCtor.getSchema();\n        L.push(`  ${childSchema.name}Header ${f.name};`);\n      } else {\n        L.push(`  ${toGLSLType(f.type as any)} ${f.name};`);\n      }\n    }\n    if (!L.length) L.push('  float _dummy;');\n    return `struct ${name}Header {\\n${L.join('\\n')}\\n};`;\n  }\n\n  public emitOffsets(): string {\n    const name = this.name;\n    const L: string[] = [];\n    L.push(`const int ${name}_STRIDE_F = ${this.headerFloatCount};`);\n    for (const f of this.fields) {\n      if (isVarArray(f.type)) continue;\n      L.push(`const int ${name}_${f.name}_OFF = ${f.headerFloatOffset ?? 0};`);\n    }\n    return L.join('\\n');\n  }\n\n  public emitGLSLStorage(group = 1, startBinding = 12): string {\n    const name = this.name;\n    const lname = lc(name);\n    const headerFloats = this.headerFloatCount;\n    const L: string[] = [];\n\n    // ---------- Common: header struct ----------\n    L.push(this.emitHeaderStruct());\n    L.push(`const int ${name}_HEADER_FLOATS = ${headerFloats};\\n`);\n\n    // ---------- Single backing resource + fetch ----------\n    L.push(`#ifdef WEBGPU_NEXT\nlayout(set = ${group}, binding = ${startBinding}) readonly buffer ${name}Buf { float data[]; } ${lname}Buf;\nfloat ${name}_fetch(int i) { return ${lname}Buf.data[i]; }\n// NOTE: On storage buffers we synthesize fetch4() from 4 scalar loads.\n// (Still far fewer lines in the generated helpers; GPU may coalesce).\nvec4 ${name}_fetch4(int i4) {\n  return vec4(${name}_fetch(i4+0), ${name}_fetch(i4+1), ${name}_fetch(i4+2), ${name}_fetch(i4+3));\n}\n#else\nuniform highp sampler2D u${name}BufTex;\nuniform int u${name}BufTexWidth;   // width in TEXELS (not floats)\n\n// Scalar read from RGBA32F at float index 'li'\nfloat ${name}_fetch(int li) {\n  int t = li >> 2;           // texel index\n  int c = li & 3;            // channel 0..3\n  int x = t % u${name}BufTexWidth;\n  int y = t / u${name}BufTexWidth;\n  vec4 v = texelFetch(u${name}BufTex, ivec2(x,y), 0);\n  return c == 0 ? v.r : (c == 1 ? v.g : (c == 2 ? v.b : v.a));\n}\n\n// Aligned vec4 read: li4 MUST be a multiple of 4 (float index)\nvec4 ${name}_fetch4(int li4) {\n  int t = li4 >> 2;          // texel index\n  int x = t % u${name}BufTexWidth;\n  int y = t / u${name}BufTexWidth;\n  return texelFetch(u${name}BufTex, ivec2(x,y), 0);\n}\n#endif\n`);\n\n    // ---------- Header base + helper ----------\n    L.push(`uniform int u${name}HeaderBase;\\n`);\n\n    // ---------- Per-field Base/Stride/Count uniforms ----------\n    for (const field of Object.keys(this.varArrays)) {\n      L.push(\n        `uniform int u${name}_${field}Base;`,\n        `uniform int u${name}_${field}Stride;`,\n        `uniform int u${name}_${field}Count;\\n`\n      );\n    }\n    for (const field of Object.keys(this.structArrays)) {\n      const child = this.structArrays[field].schema;\n      L.push(\n        `uniform int u${name}_${field}Base;`,\n        `uniform int u${name}_${field}Stride;  // = ${child.headerFloatCount}`,\n        `uniform int u${name}_${field}Count;\\n`\n      );\n    }\n\n    // ---------- Var-array accessors (no 'rec') ----------\n    for (const [field, meta] of Object.entries(this.varArrays)) {\n      const t = meta.elemType;\n      // scalar\n      if (t === 'f32' || t === 'i32' || t === 'u32') {\n        L.push(`\nfloat ${name}_${field}_get(int j) {\n  int base = u${name}_${field}Base + j * u${name}_${field}Stride;\n  return ${name}_fetch(base);\n}\nint ${name}_${field}_count() { return u${name}_${field}Count; }\n`);\n        continue;\n      }\n\n      // vector/matrix helpers use as few fetches as possible\n      if (t === 'vec2') {\n        L.push(`\nvec2 ${name}_${field}_get(int j) {\n  int base = u${name}_${field}Base + j * u${name}_${field}Stride;\n  // stride may be 2; base may not be 4-aligned → use scalar fallback\n  return vec2(${name}_fetch(base+0), ${name}_fetch(base+1));\n}\nint ${name}_${field}_count() { return u${name}_${field}Count; }\n`);\n      } else if (t === 'vec3') {\n        L.push(`\nvec3 ${name}_${field}_get(int j) {\n  int base = u${name}_${field}Base + j * u${name}_${field}Stride;\n  // layout is padded to 4 floats → one fetch4\n  vec4 v = ${name}_fetch4(base);\n  return v.xyz;\n}\nint ${name}_${field}_count() { return u${name}_${field}Count; }\n`);\n      } else if (t === 'vec4') {\n        L.push(`\nvec4 ${name}_${field}_get(int j) {\n  int base = u${name}_${field}Base + j * u${name}_${field}Stride;\n  return ${name}_fetch4(base);\n}\nint ${name}_${field}_count() { return u${name}_${field}Count; }\n`);\n      } else if (t === 'mat2') {\n        L.push(`\nmat2 ${name}_${field}_get(int j) {\n  int base = u${name}_${field}Base + j * u${name}_${field}Stride;\n  vec4 v = ${name}_fetch4(base);            // [m00,m10,m01,m11] column-major\n  return mat2(v.x, v.y, v.z, v.w);\n}\nint ${name}_${field}_count() { return u${name}_${field}Count; }\n`);\n      } else if (t === 'mat3') {\n        L.push(`\nmat3 ${name}_${field}_get(int j) {\n  int base = u${name}_${field}Base + j * u${name}_${field}Stride;\n  // three padded columns at +0, +4, +8\n  vec4 c0 = ${name}_fetch4(base + 0);\n  vec4 c1 = ${name}_fetch4(base + 4);\n  vec4 c2 = ${name}_fetch4(base + 8);\n  return mat3(c0.xyz, c1.xyz, c2.xyz);\n}\nint ${name}_${field}_count() { return u${name}_${field}Count; }\n`);\n      } else {\n        // mat4\n        L.push(`\nmat4 ${name}_${field}_get(int j) {\n  int base = u${name}_${field}Base + j * u${name}_${field}Stride;\n  vec4 c0 = ${name}_fetch4(base + 0);\n  vec4 c1 = ${name}_fetch4(base + 4);\n  vec4 c2 = ${name}_fetch4(base + 8);\n  vec4 c3 = ${name}_fetch4(base + 12);\n  return mat4(c0, c1, c2, c3);              // column-major\n}\nint ${name}_${field}_count() { return u${name}_${field}Count; }\n`);\n      }\n    }\n\n    // ---------- Struct-array accessors (no 'rec') ----------\n    for (const [field, meta] of Object.entries(this.structArrays)) {\n      const child = meta.schema;\n      L.push(`\n${child.name}Header ${name}_${field}_get(int j) {\n  int base = u${name}_${field}Base + j * u${name}_${field}Stride;\n  ${child.name}Header h;\n`);\n      for (const cf of child.fields) {\n        if (isVarArray(cf.type)) continue;\n        const off = cf.headerFloatOffset ?? 0;\n        if (cf.type === 'f32') {\n          L.push(`  h.${cf.name} = ${name}_fetch(base + ${off});`);\n        } else if (cf.type === 'i32') {\n          L.push(`  h.${cf.name} = int(${name}_fetch(base + ${off}));`);\n        } else if (cf.type === 'u32') {\n          L.push(`  h.${cf.name} = uint(${name}_fetch(base + ${off}));`);\n        } else if (cf.type === 'vec2') {\n          L.push(\n            `  { vec2 v = vec2(${name}_fetch(base+${off + 0}), ${name}_fetch(base+${off + 1})); h.${cf.name} = v; }`\n          );\n        } else if (cf.type === 'vec3') {\n          L.push(`  { vec4 v = ${name}_fetch4(base + ${off}); h.${cf.name} = v.xyz; }`);\n        } else if (cf.type === 'vec4') {\n          L.push(`  h.${cf.name} = ${name}_fetch4(base + ${off});`);\n        } else if (cf.type === 'mat2') {\n          L.push(\n            `  { vec4 v = ${name}_fetch4(base + ${off}); h.${cf.name} = mat2(v.x, v.y, v.z, v.w); }`\n          );\n        } else if (cf.type === 'mat3') {\n          L.push(`  { vec4 c0 = ${name}_fetch4(base + ${off + 0});\n             vec4 c1 = ${name}_fetch4(base + ${off + 4});\n             vec4 c2 = ${name}_fetch4(base + ${off + 8});\n             h.${cf.name} = mat3(c0.xyz, c1.xyz, c2.xyz); }`);\n        } else {\n          // mat4\n          L.push(`  { vec4 c0 = ${name}_fetch4(base + ${off + 0});\n             vec4 c1 = ${name}_fetch4(base + ${off + 4});\n             vec4 c2 = ${name}_fetch4(base + ${off + 8});\n             vec4 c3 = ${name}_fetch4(base + ${off + 12});\n             h.${cf.name} = mat4(c0, c1, c2, c3); }`);\n        }\n      }\n      L.push(`  return h;\\n}\\n`);\n      L.push(`int ${name}_${field}_count() { return u${name}_${field}Count; }\\n`);\n    }\n\n    // ---------- Header loader (no 'rec') ----------\n    L.push(`\n${name}Header ${name}_loadHeader() {\n  int base = u${name}HeaderBase;\n  ${name}Header h;\n`);\n    for (const f of this.fields) {\n      if (isVarArray(f.type)) continue;\n      const off = f.headerFloatOffset ?? 0;\n      if (f.type === 'f32') {\n        L.push(`  h.${f.name} = ${name}_fetch(base + ${off});`);\n      } else if (f.type === 'i32') {\n        L.push(`  h.${f.name} = int(${name}_fetch(base + ${off}));`);\n      } else if (f.type === 'u32') {\n        L.push(`  h.${f.name} = uint(${name}_fetch(base + ${off}));`);\n      } else if (f.type === 'vec2') {\n        L.push(\n          `  { vec2 v = vec2(${name}_fetch(base+${off + 0}), ${name}_fetch(base+${off + 1})); h.${f.name} = v; }`\n        );\n      } else if (f.type === 'vec3') {\n        L.push(`  { vec4 v = ${name}_fetch4(base + ${off}); h.${f.name} = v.xyz; }`);\n      } else if (f.type === 'vec4') {\n        L.push(`  h.${f.name} = ${name}_fetch4(base + ${off});`);\n      } else if (f.type === 'mat2') {\n        L.push(\n          `  { vec4 v = ${name}_fetch4(base + ${off}); h.${f.name} = mat2(v.x, v.y, v.z, v.w); }`\n        );\n      } else if (f.type === 'mat3') {\n        L.push(`  { vec4 c0 = ${name}_fetch4(base + ${off + 0});\n           vec4 c1 = ${name}_fetch4(base + ${off + 4});\n           vec4 c2 = ${name}_fetch4(base + ${off + 8});\n           h.${f.name} = mat3(c0.xyz, c1.xyz, c2.xyz); }`);\n      } else {\n        // mat4\n        L.push(`  { vec4 c0 = ${name}_fetch4(base + ${off + 0});\n           vec4 c1 = ${name}_fetch4(base + ${off + 4});\n           vec4 c2 = ${name}_fetch4(base + ${off + 8});\n           vec4 c3 = ${name}_fetch4(base + ${off + 12});\n           h.${f.name} = mat4(c0, c1, c2, c3); }`);\n      }\n    }\n\n    // Inline-load embedded children (within header stream)\n    for (const f of this.fields) {\n      if (!isStructRef(f.type)) continue;\n      const off = f.headerFloatOffset ?? 0;\n      const childCtor = resolveCtor(f.type.structOf);\n      const child = childCtor.getSchema();\n      for (const cf of child.fields) {\n        if (isVarArray(cf.type)) continue;\n        const coff = (cf.headerFloatOffset ?? 0) + off;\n        if (cf.type === 'f32') {\n          L.push(`  h.${f.name}.${cf.name} = ${name}_fetch(base + ${coff});`);\n        } else if (cf.type === 'i32') {\n          L.push(`  h.${f.name}.${cf.name} = int(${name}_fetch(base + ${coff}));`);\n        } else if (cf.type === 'u32') {\n          L.push(`  h.${f.name}.${cf.name} = uint(${name}_fetch(base + ${coff}));`);\n        } else if (cf.type === 'vec2') {\n          L.push(`  { vec2 v = vec2(${name}_fetch(base+${coff + 0}), ${name}_fetch(base+${coff + 1}));\n              h.${f.name}.${cf.name} = v; }`);\n        } else if (cf.type === 'vec3') {\n          L.push(`  { vec4 v = ${name}_fetch4(base + ${coff});\n              h.${f.name}.${cf.name} = v.xyz; }`);\n        } else if (cf.type === 'vec4') {\n          L.push(`  h.${f.name}.${cf.name} = ${name}_fetch4(base + ${coff});`);\n        } else if (cf.type === 'mat2') {\n          L.push(`  { vec4 v = ${name}_fetch4(base + ${coff});\n              h.${f.name}.${cf.name} = mat2(v.x, v.y, v.z, v.w); }`);\n        } else if (cf.type === 'mat3') {\n          L.push(`  { vec4 c0 = ${name}_fetch4(base + ${coff + 0});\n              vec4 c1 = ${name}_fetch4(base + ${coff + 4});\n              vec4 c2 = ${name}_fetch4(base + ${coff + 8});\n              h.${f.name}.${cf.name} = mat3(c0.xyz, c1.xyz, c2.xyz); }`);\n        } else {\n          // mat4\n          L.push(`  { vec4 c0 = ${name}_fetch4(base + ${coff + 0});\n              vec4 c1 = ${name}_fetch4(base + ${coff + 4});\n              vec4 c2 = ${name}_fetch4(base + ${coff + 8});\n              vec4 c3 = ${name}_fetch4(base + ${coff + 12});\n              h.${f.name}.${cf.name} = mat4(c0, c1, c2, c3); }`);\n        }\n      }\n    }\n    L.push('  return h;\\n}\\n');\n\n    return L.join('\\n');\n  }\n\n  public emitWGSLStorage(): string {\n    const name = this.name;\n    const lname = lc(name);\n    const header = this.emitHeaderStructWGSL();\n    const offsets = this.emitOffsetsWGSL();\n    const headerFloats = this.headerFloatCount;\n\n    // Build a flat param table layout (int32) and remember indices.\n    const paramNames: string[] = [];\n    const push = (s: string) => {\n      paramNames.push(s);\n      return paramNames.length - 1;\n    };\n\n    const PI_HeaderBase = push('HeaderBase');\n    const varIdx: Record<string, { Base: number; Stride: number; Count: number }> = {};\n    for (const f of Object.keys(this.varArrays)) {\n      varIdx[f] = {\n        Base: push(`${f}Base`),\n        Stride: push(`${f}Stride`),\n        Count: push(`${f}Count`),\n      };\n    }\n    const structIdx: Record<string, { Base: number; Stride: number; Count: number }> = {};\n    for (const f of Object.keys(this.structArrays)) {\n      structIdx[f] = {\n        Base: push(`${f}Base`),\n        Stride: push(`${f}Stride`),\n        Count: push(`${f}Count`),\n      };\n    }\n    // Build WGSL\n    return `\n${header}\nconst ${name}_HEADER_FLOATS : i32 = ${headerFloats};\n${offsets}\n\n// Arena (data) SSBO\nvar<storage, read> ${lname}Buf : array<f32>;\n// Params SSBO (packed i32 per the indices below)\nvar<storage, read> ${lname}Params : array<i32>;\n\n// Param indices (generated)\n${[\n  `const u${name}_HeaderBase_I : i32 = ${PI_HeaderBase};`,\n  ...Object.entries(varIdx).flatMap(([f, i]) => [\n    `const u${name}_${f}Base_I   : i32 = ${i.Base};`,\n    `const u${name}_${f}Stride_I : i32 = ${i.Stride};`,\n    `const u${name}_${f}Count_I  : i32 = ${i.Count};`,\n  ]),\n  ...Object.entries(structIdx).flatMap(([f, i]) => [\n    `const u${name}_${f}Base_I   : i32 = ${i.Base};`,\n    `const u${name}_${f}Stride_I : i32 = ${i.Stride};`,\n    `const u${name}_${f}Count_I  : i32 = ${i.Count};`,\n  ]),\n].join('\\n')}\n\n// Low-level fetch from arena\nfn ${name}_fetch(i:i32)->f32 { return ${lname}Buf[i]; }\nfn ${name}_fetch4(i:i32)->vec4f {\n  return vec4f(${lname}Buf[i+0], ${lname}Buf[i+1], ${lname}Buf[i+2], ${lname}Buf[i+3]);\n}\n\n// Param getters\nfn u${name}_HeaderBase()->i32 { return ${lname}Params[u${name}_HeaderBase_I]; }\n\n${Object.keys(this.varArrays)\n  .map(\n    f => `\nfn u${name}_${f}Base()  -> i32 { return ${lname}Params[u${name}_${f}Base_I]; }\nfn u${name}_${f}Stride()-> i32 { return ${lname}Params[u${name}_${f}Stride_I]; }\nfn u${name}_${f}Count() -> i32 { return ${lname}Params[u${name}_${f}Count_I]; }\n`\n  )\n  .join('')}\n\n${Object.keys(this.structArrays)\n  .map(\n    f => `\nfn u${name}_${f}Base()  -> i32 { return ${lname}Params[u${name}_${f}Base_I]; }\nfn u${name}_${f}Stride()-> i32 { return ${lname}Params[u${name}_${f}Stride_I]; }\nfn u${name}_${f}Count() -> i32 { return ${lname}Params[u${name}_${f}Count_I]; }\n`\n  )\n  .join('')}\n\n// Var-array getters (unchanged API, but pull bases/strides/counts from params SSBO)\n${Object.entries(this.varArrays)\n  .map(([field, meta]) => {\n    const t = (meta as any).elemType;\n    const base = `u${name}_${field}Base()`;\n    const stride = `u${name}_${field}Stride()`;\n    const count = `u${name}_${field}Count()`;\n    if (t === 'f32')\n      return `\nfn ${name}_${field}_get(j:i32)->f32 {\n  let b = ${base} + j * ${stride};\n  return ${name}_fetch(b);\n}\nfn ${name}_${field}_count()->i32 { return ${count}; }`;\n    if (t === 'i32' || t === 'u32')\n      return `\nfn ${name}_${field}_get(j:i32)->${t} {\n  let b = ${base} + j * ${stride};\n  return ${t}(${name}_fetch(b));\n}\nfn ${name}_${field}_count()->i32 { return ${count}; }`;\n    if (t === 'vec2')\n      return `\nfn ${name}_${field}_get(j:i32)->vec2f {\n  let b = ${base} + j * ${stride};\n  return vec2f(${name}_fetch(b+0), ${name}_fetch(b+1));\n}\nfn ${name}_${field}_count()->i32 { return ${count}; }`;\n    if (t === 'vec3')\n      return `\nfn ${name}_${field}_get(j:i32)->vec3f {\n  let b = ${base} + j * ${stride};\n  let v = ${name}_fetch4(b);\n  return v.xyz;\n}\nfn ${name}_${field}_count()->i32 { return ${count}; }`;\n    if (t === 'vec4')\n      return `\nfn ${name}_${field}_get(j:i32)->vec4f {\n  let b = ${base} + j * ${stride};\n  return ${name}_fetch4(b);\n}\nfn ${name}_${field}_count()->i32 { return ${count}; }`;\n    if (t === 'mat2')\n      return `\nfn ${name}_${field}_get(j:i32)->mat2x2f {\n  let b = ${base} + j * ${stride};\n  let v = ${name}_fetch4(b);\n  return mat2x2f(v.x, v.z, v.y, v.w);\n}\nfn ${name}_${field}_count()->i32 { return ${count}; }`;\n    if (t === 'mat3')\n      return `\nfn ${name}_${field}_get(j:i32)->mat3x3f {\n  let b = ${base} + j * ${stride};\n  let c0 = ${name}_fetch4(b + 0);\n  let c1 = ${name}_fetch4(b + 4);\n  let c2 = ${name}_fetch4(b + 8);\n  return mat3x3f(c0.xyz, c1.xyz, c2.xyz);\n}\nfn ${name}_${field}_count()->i32 { return ${count}; }`;\n    return `\nfn ${name}_${field}_get(j:i32)->mat4x4f {\n  let b = ${base} + j * ${stride};\n  let c0 = ${name}_fetch4(b + 0);\n  let c1 = ${name}_fetch4(b + 4);\n  let c2 = ${name}_fetch4(b + 8);\n  let c3 = ${name}_fetch4(b + 12);\n  return mat4x4f(c0, c1, c2, c3);\n}\nfn ${name}_${field}_count()->i32 { return ${count}; }`;\n  })\n  .join('\\n')}\n\n// Struct-array getters (same idea)\n${Object.entries(this.structArrays)\n  .map(([field, meta]) => {\n    const child = meta.schema;\n    return `\nfn ${name}_${field}_get(j:i32)->${child.name}Header {\n  let base = u${name}_${field}Base() + j * u${name}_${field}Stride();\n  var h: ${child.name}Header;\n${child.fields\n  .filter(cf => !(cf as any).type?.arrayOf)\n  .map(cf => {\n    const off = cf.headerFloatOffset ?? 0;\n    const dst = `h.${cf.name}`;\n    if (cf.type === 'f32') return `  ${dst} = ${name}_fetch(base + ${off});`;\n    if (cf.type === 'i32') return `  ${dst} = i32(${name}_fetch(base + ${off}));`;\n    if (cf.type === 'u32') return `  ${dst} = u32(${name}_fetch(base + ${off}));`;\n    if (cf.type === 'vec2')\n      return `  ${dst} = vec2f(${name}_fetch(base+${off + 0}), ${name}_fetch(base+${off + 1}));`;\n    if (cf.type === 'vec3') return `  ${dst} = ${name}_fetch4(base + ${off}).xyz;`;\n    if (cf.type === 'vec4') return `  ${dst} = ${name}_fetch4(base + ${off});`;\n    if (cf.type === 'mat2')\n      return `  ${dst} = mat2x2f(${name}_fetch4(base + ${off}).x, ${name}_fetch4(base + ${off}).z, ${name}_fetch4(base + ${off}).y, ${name}_fetch4(base + ${off}).w);`;\n    if (cf.type === 'mat3')\n      return `  ${dst} = mat3x3f(${name}_fetch4(base + ${off + 0}).xyz, ${name}_fetch4(base + ${off + 4}).xyz, ${name}_fetch4(base + ${off + 8}).xyz);`;\n    return `  ${dst} = mat4x4f(${name}_fetch4(base + ${off + 0}), ${name}_fetch4(base + ${off + 4}), ${name}_fetch4(base + ${off + 8}), ${name}_fetch4(base + ${off + 12}));`;\n  })\n  .join('\\n')}\n  return h;\n}\nfn ${name}_${field}_count()->i32 { return u${name}_${field}Count(); }`;\n  })\n  .join('\\n')}\n\n// Header loader\nfn ${name}_loadHeader()->${name}Header {\n  let base = u${name}_HeaderBase();\n  var h: ${name}Header;\n${this.fields\n  .filter(f => !isVarArray(f.type))\n  .map(f => {\n    const off = f.headerFloatOffset ?? 0;\n    const dst = `h.${f.name}`;\n    if (f.type === 'f32') return `  ${dst} = ${name}_fetch(base + ${off});`;\n    if (f.type === 'i32') return `  ${dst} = i32(${name}_fetch(base + ${off}));`;\n    if (f.type === 'u32') return `  ${dst} = u32(${name}_fetch(base + ${off}));`;\n    if (f.type === 'vec2')\n      return `  ${dst} = vec2f(${name}_fetch(base+${off + 0}), ${name}_fetch(base+${off + 1}));`;\n    if (f.type === 'vec3') return `  ${dst} = ${name}_fetch4(base + ${off}).xyz;`;\n    if (f.type === 'vec4') return `  ${dst} = ${name}_fetch4(base + ${off});`;\n    if (f.type === 'mat2')\n      return `  ${dst} = mat2x2f(${name}_fetch4(base + ${off}).x, ${name}_fetch4(base + ${off}).z, ${name}_fetch4(base + ${off}).y, ${name}_fetch4(base + ${off}).w);`;\n    if (f.type === 'mat3')\n      return `  ${dst} = mat3x3f(${name}_fetch4(base + ${off + 0}).xyz, ${name}_fetch4(base + ${off + 4}).xyz, ${name}_fetch4(base + ${off + 8}).xyz);`;\n    return `  ${dst} = mat4x4f(${name}_fetch4(base + ${off + 0}), ${name}_fetch4(base + ${off + 4}), ${name}_fetch4(base + ${off + 8}), ${name}_fetch4(base + ${off + 12}));`;\n  })\n  .join('\\n')}\n  return h;\n}\n`;\n  }\n\n  public debugShaderCode(engine: any): void {\n    const isWebGPU = engine?._isWebGPU ?? engine?.getClassName?.() === 'WebGPUEngine';\n    if (!isWebGPU) {\n      console.log(this.emitHeaderStruct());\n      console.log(this.emitGLSLStorage());\n      console.log(this.emitOffsets());\n    } else {\n      console.log(this.emitHeaderStructWGSL());\n      console.log(this.emitWGSLStorage());\n      console.log(this.emitOffsetsWGSL());\n    }\n  }\n\n  public materialIOFor(engine: any) {\n    const isWebGPU = engine?._isWebGPU ?? engine?.getClassName?.() === 'WebGPUEngine';\n    const name = this.name;\n\n    const uniforms: string[] = [];\n    const samplers: string[] = [];\n    if (!isWebGPU) {\n      samplers.push(`u${name}BufTex`);\n      uniforms.push(`u${name}BufTexWidth`);\n    }\n    uniforms.push(`u${name}HeaderBase`);\n    for (const field of Object.keys(this.varArrays)) {\n      uniforms.push(`u${name}_${field}Base`, `u${name}_${field}Stride`, `u${name}_${field}Count`);\n    }\n    for (const field of Object.keys(this.structArrays)) {\n      uniforms.push(`u${name}_${field}Base`, `u${name}_${field}Stride`, `u${name}_${field}Count`);\n    }\n    const uniq = (a: string[]) => [...new Set(a)];\n    return { uniforms: uniq(uniforms), samplers: uniq(samplers) };\n  }\n}\n","import type { FieldDef, FieldType } from '../types';\nimport { roundUpFloats } from '../utils/glsl-wgsl';\nimport {\n  isVector,\n  floatStrideOf,\n  isMatrix,\n  isStructRef,\n  isVarArray,\n  resolveCtor,\n} from '../utils/type-helpers';\nimport { ShadoStructSchema } from './ShadoStructSchema';\nimport type { ShadoConfig } from '../decorators';\n\nexport class ShadoSchemaBuilder {\n  private _name: string;\n  private fields: FieldDef[] = [];\n  private built = false;\n  private _config: ShadoConfig;\n\n  constructor(name: string, config: ShadoConfig = {}) {\n    this._name = name;\n    this._config = config;\n  }\n\n  public registerField(name: string, type: FieldType): this {\n    if (this.built) throw new Error('Schema already built');\n    this.fields.push({ name, type });\n    return this;\n  }\n\n  public build(): ShadoStructSchema {\n    if (this.built) throw new Error('Schema already built');\n    this.built = true;\n\n    const sorted = this.fields.slice();\n\n    let fcursor = 0;\n    for (const f of sorted) {\n      if (isVarArray(f.type)) continue;\n\n      if (isStructRef(f.type)) {\n        const childCtor = resolveCtor(f.type.structOf);\n        const childSchema = childCtor.getSchema();\n        const size = childSchema.headerFloatCount;\n        const align = 4;\n        f.headerFloatOffset = roundUpFloats(fcursor, align);\n        f.headerFloatSize = size;\n        fcursor = f.headerFloatOffset + size;\n      } else {\n        const size = floatStrideOf(f.type as any);\n        const align = isVector(f.type as any) || isMatrix(f.type as any) ? 4 : 1;\n        f.headerFloatOffset = roundUpFloats(fcursor, align);\n        f.headerFloatSize = size;\n        fcursor = f.headerFloatOffset + size;\n      }\n    }\n    fcursor = roundUpFloats(fcursor, 4);\n    const schema = new ShadoStructSchema(this._name, sorted, fcursor);\n    (schema as any).config = this._config;\n    return schema;\n  }\n}\n","import type { Shado } from '../core/Shado';\nimport type { ShadoStructSchema } from '../schema/ShadoStructSchema';\nimport { isVarArray, isScalar } from './type-helpers';\n\nexport function createEmbeddedProxyFromArena(\n  parent: Shado,\n  childCtor: { getSchema(): ShadoStructSchema },\n  baseFloatOffset: number\n): any {\n  const schema = childCtor.getSchema();\n  const view = (parent as any)._arena.dataView();\n  const baseByte = baseFloatOffset * 4;\n\n  const proxy: any = {};\n  for (const f of schema.fields) {\n    if (isVarArray(f.type) || f?.headerFloatOffset === undefined) {\n      continue;\n    } // header-only\n    const offB = baseByte + f.headerFloatOffset * 4;\n    const szF = f.headerFloatSize;\n    if (isScalar(f.type as any)) {\n      Object.defineProperty(proxy, f.name, {\n        get: () => {\n          switch (f.type) {\n            case 'f32':\n              return view.getFloat32(offB, true);\n            case 'i32':\n              return view.getInt32(offB, true);\n            case 'u32':\n              return view.getUint32(offB, true);\n            default:\n              throw new Error(`Unsupported scalar type: ${f.type}`);\n          }\n        },\n        set: (v: number) => {\n          if (v === null) return;\n          switch (f.type) {\n            case 'f32':\n              view.setFloat32(offB, v, true);\n              break;\n            case 'i32':\n              view.setInt32(offB, v | 0, true);\n              break;\n            case 'u32':\n              view.setUint32(offB, v >>> 0, true);\n              break;\n            default:\n              throw new Error(`Unsupported scalar type: ${f.type}`);\n          }\n          parent.emitHeaderDirty(offB, 4);\n        },\n        enumerable: true,\n        configurable: true,\n      });\n    } else {\n      const live = (parent as any)._arena.view(offB >> 2, szF);\n      Object.defineProperty(proxy, f.name, {\n        get: () => live,\n        set: (arr: ArrayLike<number>) => {\n          if (arr === null) return;\n          const L = Math.min(live.length, (arr as any).length ?? 0);\n          for (let i = 0; i < L; i++) {\n            live[i] = (arr as any)[i];\n          }\n          parent.emitHeaderDirty(offB, L * 4);\n        },\n        enumerable: true,\n        configurable: true,\n      });\n    }\n  }\n  return proxy;\n}\n","// thin-accessors.ts\nimport { isScalar, floatStrideOf } from './type-helpers';\n\nexport function installThinAccessors(Ctor: any) {\n  if (Ctor.__thinInstalled) return;\n  const schema = Ctor.getSchema();\n  const proto = Ctor.prototype;\n\n  // parent arena & dataview (host if present, else self)\n  Object.defineProperty(proto, '_hostOrSelf', {\n    get() {\n      return this._host ?? this;\n    },\n  });\n  Object.defineProperty(proto, '_dv', {\n    get() {\n      return this._hostOrSelf._arena.dataView();\n    },\n  });\n  Object.defineProperty(proto, '_arenaRef', {\n    get() {\n      return this._hostOrSelf._arena;\n    },\n  });\n\n  proto._markDirty = function (offF: number, lenF: number) {\n    this._hostOrSelf.emitHeaderDirty((this._baseF + offF) * 4, lenF * 4);\n  };\n\n  for (const f of schema.fields) {\n    if (f.type?.arrayOf || f.type?.structOf) continue; // only plain fields here\n    const offF = (f.headerFloatOffset ?? 0) | 0;\n    const lenF = f.headerFloatSize ?? floatStrideOf(f.type);\n\n    if (isScalar(f.type)) {\n      const kind = f.type; // \"f32\" | \"i32\" | \"u32\"\n      Object.defineProperty(proto, f.name, {\n        get() {\n          const b = (this._baseF + offF) * 4;\n          switch (kind) {\n            case 'f32':\n              return this._dv.getFloat32(b, true);\n            case 'i32':\n              return this._dv.getInt32(b, true);\n            case 'u32':\n              return this._dv.getUint32(b, true);\n          }\n        },\n        set(v: number) {\n          const b = (this._baseF + offF) * 4;\n          switch (kind) {\n            case 'f32':\n              this._dv.setFloat32(b, v, true);\n              break;\n            case 'i32':\n              this._dv.setInt32(b, v | 0, true);\n              break;\n            case 'u32':\n              this._dv.setUint32(b, v >>> 0, true);\n              break;\n          }\n          this._markDirty(offF, 1);\n        },\n        enumerable: true,\n      });\n    } else {\n      // vec/mat: live alias that refreshes if parent arena re-adopts memory\n      const cacheKey = `__live_${f.name}`;\n      Object.defineProperty(proto, f.name, {\n        get() {\n          let v = this[cacheKey];\n          const buf = this._arenaRef.take().buffer;\n          if (!v || v.buffer !== buf) {\n            v = this._arenaRef.view(this._baseF + offF, lenF);\n            this[cacheKey] = v;\n          }\n          return v;\n        },\n        set(arr: ArrayLike<number>) {\n          const L = Math.min(lenF, (arr as any)?.length ?? 0);\n          this._arenaRef.write(this._baseF + offF, arr, L);\n          this._markDirty(offF, L);\n        },\n        enumerable: true,\n      });\n    }\n  }\n\n  Ctor.__thinInstalled = true;\n}\n","type Segment = { offF: number; lenF: number; capF: number };\n\ntype SchemaField = {\n  name: string;\n  type: any;\n  headerFloatOffset?: number;\n};\n\ntype StructSchema = {\n  fields: SchemaField[];\n  headerFloatCount?: number;\n  structArrays?: Record<string, { schema: StructSchema; headerFloatCount?: number }>;\n};\n\nfunction encodeIntegerFields(\n  out: Float32Array,\n  dataView: DataView,\n  baseF: number,\n  fields: SchemaField[]\n) {\n  for (const field of fields) {\n    if (field.type?.arrayOf) continue;\n    const offF = baseF + ((field.headerFloatOffset ?? 0) | 0);\n    const offBytes = offF * 4;\n    if (field.type === 'i32') {\n      out[offF] = dataView.getInt32(offBytes, true);\n    } else if (field.type === 'u32') {\n      out[offF] = dataView.getUint32(offBytes, true);\n    } else if (field.type?.structOf?.fields) {\n      encodeIntegerFields(out, dataView, offF, field.type.structOf.fields);\n    }\n  }\n}\n\nexport function encodeGpuFloatUpload(\n  schema: StructSchema,\n  owner: any,\n  payload: Float32Array\n): Float32Array {\n  const out = payload.slice();\n  const dataView = owner.arena.dataView();\n\n  encodeIntegerFields(out, dataView, owner._headerSeg.offF | 0, schema.fields);\n\n  for (const [field, meta] of Object.entries(schema.structArrays ?? {})) {\n    const seg = owner._structSeg[field] as Segment | undefined;\n    const count = (owner._structArrayCount?.[field] as number) | 0;\n    if (!seg || count <= 0) continue;\n\n    const childSchema = meta.schema;\n    const stride = childSchema.headerFloatCount ?? 0;\n    for (let i = 0; i < count; i++) {\n      encodeIntegerFields(out, dataView, (seg.offF | 0) + i * stride, childSchema.fields);\n    }\n  }\n\n  return out;\n}\n","import { BABYLON } from '../babylon';\nimport type { BackendKind, GPUBacking, Segment } from '../types';\nimport { encodeGpuFloatUpload } from './encodeGpuFloatUpload';\n\nexport class StorageBacking implements GPUBacking {\n  public kind: BackendKind = 'storage';\n  private buf?: any;\n  private bufCapBytes = 0;\n\n  private paramsBuf?: any;\n  private paramsCapBytes = 0;\n\n  private paramsScratch = new Int32Array(64);\n\n  constructor(\n    private engine: any,\n    private schema: any,\n    private owner: any\n  ) {}\n\n  commit() {\n    const payload = encodeGpuFloatUpload(this.schema, this.owner, this.owner.prepareUnifiedForUpload());\n    if (!payload) return;\n    const needBytes = Math.max(16, payload.byteLength);\n    const RW = BABYLON.Constants.BUFFER_CREATIONFLAG_READWRITE;\n\n    if (!this.buf || this.bufCapBytes < needBytes) {\n      this.buf?.dispose?.();\n      this.buf = new BABYLON.StorageBuffer(this.engine, needBytes, RW);\n      this.bufCapBytes = needBytes;\n    }\n    this.buf.update(payload);\n  }\n\n  private buildParams(): Int32Array {\n    const self = this.owner;\n    const sch = this.schema;\n    const nInts =\n      1 + Object.keys(sch.varArrays).length * 3 + Object.keys(sch.structArrays).length * 3;\n    if (this.paramsScratch.length < nInts) {\n      this.paramsScratch = new Int32Array(Math.max(nInts, this.paramsScratch.length * 2));\n    }\n    let w = 0;\n    this.paramsScratch[w++] = self._headerSeg.offF | 0;\n    for (const f of Object.keys(sch.varArrays)) {\n      const seg: Segment = self._varSeg[f];\n      const stride = sch.varArrays[f].floatStride | 0;\n      const count = Math.floor((seg?.lenF ?? 0) / stride) | 0;\n      this.paramsScratch[w++] = seg?.offF | 0;\n      this.paramsScratch[w++] = stride;\n      this.paramsScratch[w++] = count;\n    }\n    for (const f of Object.keys(sch.structArrays)) {\n      const seg: Segment = self._structSeg[f];\n      const stride = sch.structArrays[f].schema.headerFloatCount | 0;\n      const count = self._structArrayCount?.[f] | 0;\n      this.paramsScratch[w++] = seg?.offF | 0;\n      this.paramsScratch[w++] = stride;\n      this.paramsScratch[w++] = count;\n    }\n    return this.paramsScratch.subarray(0, w);\n  }\n\n  bind(effect: any, includeName: string) {\n    if (!this.buf) return;\n    this.applyBindings(effect, includeName);\n  }\n\n  bindMaterial(material: any, includeName: string) {\n    if (!this.buf) return;\n    this.applyBindings(material, includeName);\n  }\n\n  private applyBindings(target: any, includeName: string) {\n    const lname = includeName.charAt(0).toLowerCase() + includeName.slice(1);\n    if (typeof target.setStorageBuffer === 'function') {\n      target.setStorageBuffer(`${lname}Buf`, this.buf);\n    } else {\n      this.engine.setStorageBuffer(`${lname}Buf`, this.buf);\n    }\n\n    const params = this.buildParams();\n    const needBytes = Math.max(16, params.byteLength);\n    const RW = BABYLON.Constants.BUFFER_CREATIONFLAG_READWRITE;\n    if (!this.paramsBuf || this.paramsCapBytes < needBytes) {\n      this.paramsBuf?.dispose?.();\n      this.paramsBuf = new BABYLON.StorageBuffer(this.engine, needBytes, RW);\n      this.paramsCapBytes = needBytes;\n    }\n    if ((this as any).owner._arena?.isDirty()) {\n      this.paramsBuf.update(params);\n      (this as any).owner._arena?.markClean();\n    }\n    if (typeof target.setStorageBuffer === 'function') {\n      target.setStorageBuffer(`${lname}Params`, this.paramsBuf);\n    } else {\n      this.engine.setStorageBuffer(`${lname}Params`, this.paramsBuf);\n    }\n  }\n\n  dispose() {\n    this.buf?.dispose?.();\n    this.buf = undefined;\n    this.bufCapBytes = 0;\n    this.paramsBuf?.dispose?.();\n    this.paramsBuf = undefined;\n    this.paramsCapBytes = 0;\n  }\n}\n","import type { BackendKind, GPUBacking, Segment } from '../types';\nimport { BABYLON } from '../babylon';\nimport type { Shado } from '../core/Shado';\nimport { encodeGpuFloatUpload } from './encodeGpuFloatUpload';\n\nexport class DataTexBacking implements GPUBacking {\n  public kind: BackendKind = 'datatex';\n  private bufTex?: any;\n  private texW = 2048;\n  private texH = 1;\n  private capTexels = this.texW * this.texH;\n  private capFloats = this.capTexels * 4;\n\n  private staging?: Float32Array;\n  private lastUsedFloats = 0;\n\n  constructor(\n    private engine: any,\n    private schema: any,\n    private owner: Shado\n  ) {}\n\n  reserveFloats(minFloats: number) {\n    if (minFloats <= this.capFloats && this.bufTex) return;\n    const needTexels = Math.max(1, Math.ceil(minFloats / 4));\n    const needH = Math.max(1, Math.ceil(needTexels / this.texW));\n    this.texH = Math.max(this.texH, needH);\n    this.capTexels = this.texW * this.texH;\n    this.capFloats = this.capTexels * 4;\n\n    const initData =\n      this.staging && this.staging.length === this.capFloats\n        ? this.staging\n        : new Float32Array(this.capFloats);\n\n    this.bufTex?.dispose?.();\n    this.bufTex = new BABYLON.RawTexture(\n      initData,\n      this.texW,\n      this.texH,\n      BABYLON.Engine.TEXTUREFORMAT_RGBA,\n      this.engine,\n      false,\n      false,\n      BABYLON.Texture.NEAREST_SAMPLINGMODE,\n      BABYLON.Engine.TEXTURETYPE_FLOAT\n    );\n    this.bufTex.wrapU = this.bufTex.wrapV = BABYLON.Texture.CLAMP_ADDRESSMODE;\n    this.staging = initData;\n    this.lastUsedFloats = Math.min(this.lastUsedFloats, this.capFloats);\n  }\n\n  commit() {\n    const arena = this.owner.arena;\n    if (!arena?.isDirty?.()) return;\n    const payload: Float32Array = encodeGpuFloatUpload(\n      this.schema,\n      this.owner,\n      this.owner.prepareUnifiedForUpload()\n    );\n    this.reserveFloats(payload.length);\n\n    if (!this.staging || this.staging.length !== this.capFloats) {\n      this.staging = new Float32Array(this.capFloats);\n    }\n    this.staging.set(payload, 0);\n    if (payload.length < this.lastUsedFloats) {\n      this.staging.fill(0, payload.length, this.lastUsedFloats);\n    }\n    this.lastUsedFloats = payload.length;\n    this.bufTex!.update(this.staging);\n    arena.markClean?.();\n  }\n\n  bind(effect: any, includeName: string) {\n    if (!this.bufTex) return;\n    this.applyBindings(effect, includeName);\n  }\n\n  bindMaterial(material: any, includeName: string) {\n    if (!this.bufTex) return;\n    this.applyBindings(material, includeName);\n  }\n\n  private applyBindings(target: any, includeName: string) {\n    const self: any = this.owner;\n    const schema = this.schema;\n\n    // Bind buffer texture\n    target.setTexture(`u${includeName}BufTex`, this.bufTex);\n    target.setInt(`u${includeName}BufTexWidth`, this.texW);\n    target.setInt(`u${includeName}HeaderBase`, self._headerSeg.offF | 0);\n\n    // Bind var array uniforms\n    for (const f of Object.keys(schema.varArrays)) {\n      const seg: Segment = self._varSeg[f];\n      const stride = schema.varArrays[f].floatStride;\n      const count = Math.floor((seg?.lenF ?? 0) / stride);\n      target.setInt(`u${includeName}_${f}Base`, seg?.offF | 0);\n      target.setInt(`u${includeName}_${f}Stride`, stride | 0);\n      target.setInt(`u${includeName}_${f}Count`, count | 0);\n    }\n\n    // Bind struct array uniforms\n    for (const f of Object.keys(schema.structArrays)) {\n      const seg: Segment = self._structSeg[f];\n      const stride = schema.structArrays[f].schema.headerFloatCount;\n      const count = (self._structArrayCount?.[f] as number) | 0;\n      target.setInt(`u${includeName}_${f}Base`, seg?.offF | 0);\n      target.setInt(`u${includeName}_${f}Stride`, stride | 0);\n      target.setInt(`u${includeName}_${f}Count`, count | 0);\n    }\n  }\n\n  dispose() {\n    this.bufTex?.dispose?.();\n  }\n}\n","const CLASS_META_KEY = Symbol('gpu:classMeta');\nconst FIELD_META_KEY = Symbol('gpu:fieldMeta');\nconst META_FIELDS_KEY = '__gpu:fields:list';\n\nexport type PendingField = { name: string; type: any };\n\nexport type ShadoConfig = {\n  name?: string;\n  useWasm?: boolean;\n};\n\nexport function gpuStruct(meta: ShadoConfig = {}) {\n  return function (...args: any[]) {\n    args = args.filter(Boolean);\n    if (args.length === 1 && typeof args[0] === 'function') {\n      const ctor = args[0];\n      (Reflect as any).defineMetadata?.(CLASS_META_KEY, meta, ctor);\n      ctor[CLASS_META_KEY] = meta;\n      return;\n    }\n    if (args.length === 2 && typeof args[1] === 'object' && 'kind' in args[1]) {\n      const value = args[0] as Function;\n      const context = args[1];\n      (Reflect as any).defineMetadata?.(CLASS_META_KEY, meta, value);\n      (value as any)[CLASS_META_KEY] = meta;\n      const aggregated: PendingField[] =\n        (context.metadata?.[META_FIELDS_KEY] as PendingField[] | undefined) ?? [];\n      if (aggregated.length) {\n        (Reflect as any).defineMetadata?.(FIELD_META_KEY, aggregated, value);\n        (value as any)[FIELD_META_KEY] = aggregated;\n      }\n      return;\n    }\n  };\n}\n\nexport function field(typeOrIndex: any, maybeType?: any) {\n  const type = arguments.length > 1 ? maybeType : typeOrIndex;\n  return function (...args: any[]) {\n    args = args.filter(Boolean);\n    if (args.length === 2 && (typeof args[1] === 'string' || typeof args[1] === 'symbol')) {\n      const target = args[0];\n      const name = String(args[1]);\n      const ctor = target.constructor;\n      const arr: PendingField[] = ctor[FIELD_META_KEY] ?? [];\n      arr.push({ name, type });\n      ctor[FIELD_META_KEY] = arr;\n      return;\n    }\n    if (args.length === 2 && typeof args[1] === 'object' && 'kind' in args[1]) {\n      const context = args[1];\n      const name = String(context.name);\n      context.addInitializer(function (this: any) {\n        const ctor = typeof this === 'function' ? this : this?.constructor;\n        if (!ctor) return;\n        const arr: PendingField[] = ctor[FIELD_META_KEY] ?? [];\n        if (!arr.some((f: any) => f.name === name)) arr.push({ name, type });\n        ctor[FIELD_META_KEY] = arr;\n      });\n      return;\n    }\n  };\n}\n\nexport function readClassMeta(ctor: any): ShadoConfig {\n  return ((Reflect as any).getMetadata?.(CLASS_META_KEY, ctor) ??\n    ctor[CLASS_META_KEY] ??\n    {}) as ShadoConfig;\n}\nexport function readFields(ctor: any): PendingField[] {\n  return (\n    ((Reflect as any).getMetadata?.(FIELD_META_KEY, ctor) ??\n      ctor[FIELD_META_KEY] ??\n      []) as PendingField[]\n  ).slice();\n}\n","import { FloatArena } from '../arena/FloatArena';\nimport type {\n  DynamicMeta,\n  SchemaSpec,\n  ShadoBaseCtor,\n  ShadoConcreteCtor,\n  StorageSpec,\n  Segment,\n  DirtyHandler,\n  DirtyEvent,\n  InitializeConfig,\n  BackendKind,\n  WasmInitializeMode,\n} from '../types';\nimport { BindingAlloc } from '../utils/binding-alloc';\nimport { registerIncludesOnEngine } from '../includes/register';\nimport { ShadoSchemaBuilder } from '../schema/ShadoSchemaBuilder';\nimport { genericASModuleSource } from '../asc/generic';\nimport { buildOpsForParent } from '../asc/ops';\nimport {\n  isVarArray,\n  isStructRef,\n  isScalar,\n  floatStrideOf,\n  resolveCtor,\n} from '../utils/type-helpers';\nimport { createEmbeddedProxyFromArena } from '../utils/embedded-proxy';\nimport { emitASUnmanagedFromSchema } from '../asc/schema';\nimport { installThinAccessors } from '../utils/thin-accessors';\nimport { StorageBacking } from '../backings/StorageBacking';\nimport { DataTexBacking } from '../backings/DataTexBacking';\nimport { PendingField, readClassMeta, readFields } from '../decorators';\nimport type { AbstractEngine } from '@babylonjs/core';\nimport { BABYLON } from '../babylon';\nimport type { ShadoStructSchema } from '../schema/ShadoStructSchema';\n\nexport type ASCExtension = {\n  /** Extra AssemblyScript source to concat into the module (strings, not files). */\n  source?: (schema: ShadoStructSchema) => string | string[];\n  /** After instantiate: add custom ops under this class' ops tree. */\n  bind?: (schema: any, exports: any, ops: any) => void;\n};\n\nfunction normalizeWasmMode(\n  wasm: WasmInitializeMode | undefined\n):\n  | { mode: 'off' }\n  | { mode: 'runtime' }\n  | { mode: 'precompiled'; module: WebAssembly.Module | ArrayBuffer | Uint8Array } {\n  if (wasm === false || wasm === 'off') return { mode: 'off' };\n  if (!wasm || wasm === 'runtime') return { mode: 'runtime' };\n  if (typeof wasm === 'object') {\n    if (wasm.mode === 'off') return { mode: 'off' };\n    if (wasm.mode === 'precompiled') {\n      if (!wasm.module) {\n        throw new Error('WASM precompiled mode requires a module');\n      }\n      return { mode: 'precompiled', module: wasm.module };\n    }\n    return { mode: 'runtime' };\n  }\n  return { mode: 'runtime' };\n}\n\nfunction schemaUsesWasm(schema: ShadoStructSchema, meta: { useWasm?: boolean }): boolean {\n  return ((schema as any).config?.useWasm ?? meta.useWasm ?? true) !== false;\n}\n\nasync function loadRuntimeASC(): Promise<any> {\n  const dynamicImport = new Function('specifier', 'return import(specifier)') as (\n    specifier: string\n  ) => Promise<any>;\n  try {\n    await dynamicImport('binaryen');\n    const mod = await dynamicImport('assemblyscript/asc');\n    return mod?.default ?? mod;\n  } catch (e) {\n    throw new Error(\n      [\n        'AssemblyScript runtime compilation requires optional peer dependencies.',\n        'Install them with `npm i -D assemblyscript binaryen`, use `wasm: false`,',\n        'or pass `wasm: { mode: \"precompiled\", module }`.',\n        e instanceof Error ? e.message : String(e),\n      ].join('\\n')\n    );\n  }\n}\n\nexport abstract class Shado {\n  // Static counter for unique instance naming\n  private static _instanceCounter = 0;\n\n  // Per-instance binding allocator\n  private _bindingAlloc = new BindingAlloc(10);\n\n  private _dynamicMeta?: DynamicMeta;\n  private _manualSchemas: SchemaSpec[] = [];\n  private _extraStorages: StorageSpec[] = [];\n  private _samplers: string[] = [];\n  private _vsBody = '';\n  private _fsBody = '';\n\n  private _built = false;\n  private _schemas: SchemaSpec[] = [];\n\n  private _isDisposed = false;\n  private _engineObs?: any; // engine.onDispose\n  private _engineNewSceneObs?: any; // engine.onNewSceneAdded\n  private _sceneObs: Array<{ scene: any; obs: any }> = [];\n\n  _dirty(): this {\n    this._built = false;\n    return this;\n  }\n\n  setDynamicMeta(meta: DynamicMeta): this {\n    this._dynamicMeta = meta;\n    return this._dirty();\n  }\n  setSchemas(schemas: SchemaSpec[]): this {\n    this._manualSchemas = schemas;\n    return this._dirty();\n  }\n  addExtraStorage(s: StorageSpec): this {\n    this._extraStorages.push(s);\n    return this;\n  }\n  setSamplers(symbols: string[]): this {\n    this._samplers = symbols;\n    return this;\n  }\n  setBodies(vsBody: string, fsBody: string): this {\n    this._vsBody = vsBody;\n    this._fsBody = fsBody;\n    return this;\n  }\n\n  public readonly headerRaw: ArrayBuffer;\n  // Instance-level schema instead of static\n  private static _schema: ShadoStructSchema;\n  public static backingPreference?: BackendKind;\n  protected readonly _view: DataView;\n  private _visibleCount = 1;\n  public getVisibleCount(): number {\n    return this._visibleCount;\n  }\n\n  private _backing: DataTexBacking | StorageBacking;\n  private _includeName: string;\n  private _instanceId: number;\n\n  protected _arena = new FloatArena();\n  protected _headerSeg: Segment = { offF: 0, lenF: 0, capF: 0 };\n  private _liveVecs: Record<string, Float32Array> = {};\n\n  protected _varSeg: Record<string, Segment> = {};\n  protected _structSeg: Record<string, Segment> = {};\n  protected _engine!: any;\n  protected _structArrayCount: Record<string, number> = {};\n  protected _structArraySlots: Record<string, Shado[]> = {};\n  protected _structArrayUnsubs: Record<string, Array<() => void>> = {};\n  protected _structArrayIndex: Record<string, Map<Shado, number>> = {};\n\n  private _dirtyHandlers?: DirtyHandler[];\n\n  private _structVersion = 0;\n  private _lastSyncedStructVersion = -1;\n  private _lastSyncedBuffer: ArrayBuffer | null = null;\n\n  public wasmModule?: {\n    instance: WebAssembly.Instance;\n    memory: WebAssembly.Memory;\n    alloc: (n: number) => number;\n    exports: Record<string, any>;\n    ops: any;\n    ready?: boolean;\n  };\n\n  public static wasmCompiled?: boolean;\n  public static compiledWasmModule?: WebAssembly.Module;\n\n  private __wasmBasePtr = 0;\n  private __wasmArenaFloats = 0;\n  private _useWasm: boolean;\n\n  protected static get shadoBase() {\n    const ctor = this as any as ShadoBaseCtor;\n    return ctor;\n  }\n\n  protected constructor(engine: AbstractEngine, childInstance: boolean = false) {\n    // Build instance-level schema\n    const ctor = this as any as ShadoBaseCtor;\n    const schema = ctor.getSchema([]);\n\n    // Generate unique instance ID and include name\n    this._instanceId = Shado._instanceCounter++;\n    this._includeName = schema.name; //`${schema.name}_${this._instanceId}`;\n\n    const meta = readClassMeta(this.constructor);\n    const wasmMode = (this.constructor as any).__shadoWasmMode;\n    this._useWasm = schemaUsesWasm(schema, meta) && wasmMode !== 'off';\n\n    this._engine = engine;\n    for (const scene of engine.scenes) {\n      const obs = scene.onDisposeObservable.addOnce(() => this.dispose());\n      this._sceneObs.push({ scene, obs });\n    }\n    this._engineNewSceneObs = engine.onNewSceneAddedObservable.add(scene => {\n      const obs = scene.onDisposeObservable.addOnce(() => this.dispose());\n      this._sceneObs.push({ scene, obs });\n    });\n    this._engineObs = engine.onDisposeObservable.addOnce(() => this.dispose());\n\n    // Initialize headerRaw and _view\n    this.headerRaw = new ArrayBuffer(schema.headerFloatCount * 4);\n    this._view = new DataView(this.headerRaw);\n\n    // CPU header buffer for live properties\n    this._headerSeg = {\n      offF: 0,\n      lenF: schema.headerFloatCount,\n      capF: schema.headerFloatCount,\n    };\n    this._ensureArenaLayout();\n    (this as any)._headerDV = this._arena.dataView();\n\n    this._arena.onRealloc(() => {\n      // Re-create vec/mat live arrays\n      for (const f of schema.fields) {\n        if (isVarArray(f.type) || isStructRef(f.type) || isScalar(f.type)) continue;\n        const offF = (f.headerFloatOffset ?? 0) + this._headerSeg.offF;\n        const lenF = f.headerFloatSize ?? floatStrideOf(f.type);\n        this._liveVecs[f.name] = this._arena.view(offF, lenF);\n      }\n    });\n\n    // Set up property definitions\n    for (const f of schema.fields) {\n      if (isVarArray(f.type)) continue;\n\n      // Offset within the arena (for arena.write and arena.view)\n      const offFloatsArena = (f.headerFloatOffset ?? 0) + this._headerSeg.offF;\n      // Offset relative to header start (for DataView, which already has header offset built in)\n      const offFloatsHeader = f.headerFloatOffset ?? 0;\n      const offBytesHeader = offFloatsHeader * 4;\n      const sizeFloats = f.headerFloatSize ?? floatStrideOf(f.type as any);\n\n      if (isStructRef(f.type)) {\n        const childCtor = resolveCtor(f.type.structOf);\n        const childProxy = createEmbeddedProxyFromArena(this, childCtor, offFloatsArena);\n        Object.defineProperty(this, f.name, {\n          get: () => childProxy,\n          set: v => {\n            if (v === null) return;\n            if (v?.headerRaw) {\n              const src = new Float32Array(v.headerRaw);\n              this._arena.write(offFloatsArena, src, src.length);\n            }\n          },\n          enumerable: true,\n          configurable: true,\n        });\n        continue;\n      }\n\n      if (isScalar(f.type)) {\n        Object.defineProperty(this, f.name, {\n          get() {\n            //this._refreshViewsIfGrown();\n            switch (f.type) {\n              case 'f32':\n                return this._arena.dataView().getFloat32(offBytesHeader, true);\n              case 'i32':\n                return this._arena.dataView().getInt32(offBytesHeader, true);\n              case 'u32':\n                return this._arena.dataView().getUint32(offBytesHeader, true);\n            }\n          },\n          set(v: number) {\n            if (v === null) return;\n            // this._refreshViewsIfGrown();\n            switch (f.type) {\n              case 'f32':\n                this._arena.dataView().setFloat32(offBytesHeader, v, true);\n                break;\n              case 'i32':\n                this._arena.dataView().setInt32(offBytesHeader, v | 0, true);\n                break;\n              case 'u32':\n                this._arena.dataView().setUint32(offBytesHeader, v >>> 0, true);\n                break;\n            }\n            this.emitHeaderDirty(offBytesHeader, 4);\n          },\n          enumerable: true,\n          configurable: true,\n        });\n      } else {\n        // vec/mat: live view\n        this._liveVecs[f.name] = this._arena.view(offFloatsArena, sizeFloats);\n        Object.defineProperty(this, f.name, {\n          get() {\n            return this._liveVecs[f.name];\n          },\n          set(arr: ArrayLike<number>) {\n            if (arr === null) return;\n            const live = this._liveVecs[f.name];\n            const L = Math.min(live.length, (arr as any).length ?? 0);\n            for (let i = 0; i < L; i++) live[i] = (arr as any)[i];\n            this.emitHeaderDirty(offBytesHeader, L * 4);\n          },\n          enumerable: true,\n          configurable: true,\n        });\n      }\n    }\n\n    // Register shader includes for this instance with unique name\n    if (!childInstance) {\n      //  this.registerIncludes();\n    }\n\n    // WASM init if not child instance, otherwise Parent has taken care of this\n    if (!childInstance && this._useWasm) {\n      this.initWasmArena();\n    }\n\n    const isWebGPU = (engine as any)?._isWebGPU ?? engine?.getClassName?.() === 'WebGPUEngine';\n    const wantsStorageBacking = (this.constructor as any).backingPreference === 'storage';\n    if (wantsStorageBacking && !isWebGPU) {\n      throw new Error(\n        `Shado ${schema.name} requires storage buffer backend, but engine is not WebGPU.`\n      );\n    }\n    this._backing =\n      isWebGPU && wantsStorageBacking\n        ? new StorageBacking(engine, schema, this)\n        : new DataTexBacking(engine, schema, this);\n  }\n\n  protected getBaseOffset(): number {\n    return this.__wasmBasePtr;\n  }\n\n  public getWasmMemory(): WebAssembly.Memory | undefined {\n    return this.wasmModule?.memory;\n  }\n\n  public getWasmArenaBasePtr(): number {\n    this._prepareForWasm();\n    return this.__wasmBasePtr >>> 0;\n  }\n\n  public getStructArrayPtr(field: string): number {\n    this._prepareForWasm();\n    const seg = this._structSeg[field];\n    if (!this.wasmModule || !seg) return 0;\n    return (this.__wasmBasePtr + (seg.offF | 0) * 4) >>> 0;\n  }\n\n  public getStructArrayCapacity(field: string): number {\n    const schema = this.getSchema();\n    const meta = schema.structArrays[field];\n    if (!meta) {\n      throw new Error(`'${field}' is not a struct var-array on ${schema.name}`);\n    }\n    const strideF = meta.schema.headerFloatCount | 0;\n    const seg = this._structSeg[field];\n    return strideF > 0 && seg ? Math.floor((seg.capF | 0) / strideF) : 0;\n  }\n\n  public getStructArrayStrideBytes(field: string): number {\n    const schema = this.getSchema();\n    const meta = schema.structArrays[field];\n    if (!meta) {\n      throw new Error(`'${field}' is not a struct var-array on ${schema.name}`);\n    }\n    return (meta.schema.headerFloatCount | 0) * 4;\n  }\n\n  public markArenaDirty(): void {\n    this._arena.markDirty?.();\n  }\n\n  protected getFieldOffset(field: string): number {\n    const seg = this._structSeg[field];\n    if (!seg) return -1;\n    return this.__wasmBasePtr + (seg.offF | 0) * 4;\n  }\n\n  public prepareUnifiedForUpload(): Float32Array {\n    return this._arena.take();\n  }\n\n  static async initialize(\n    this: ShadoConcreteCtor,\n    engine: any,\n    { logShaderCode, logAscCode, backend, debugWasm, additionalFields, wasm }: InitializeConfig = {\n      logShaderCode: false,\n      logAscCode: false,\n      backend: 'datatex',\n      debugWasm: false,\n      wasm: 'runtime',\n      additionalFields: [],\n    }\n  ): Promise<boolean> {\n    try {\n      this.schema = this.getSchema(additionalFields ?? []);\n      const meta = readClassMeta(this);\n      const wantsWasm = schemaUsesWasm(this.schema, meta);\n      const wasmMode = normalizeWasmMode(wasm);\n      (this as any).__shadoWasmMode = wantsWasm ? wasmMode.mode : 'off';\n      if (wantsWasm && wasmMode.mode !== 'off') {\n        await (this as any).initWasm(debugWasm, wasmMode);\n      }\n      this.registerIncludes();\n      if (logShaderCode) {\n        this.debugShaderCode(engine);\n      }\n      if (logAscCode) {\n        this.debugAscCode();\n      }\n      this.backingPreference = backend ?? 'datatex';\n      return true;\n    } catch (e) {\n      // eslint-disable-next-line no-console\n      console.error(`[${this.name}.initialize] Error:`, e);\n      BABYLON.Logger?.Warn?.(e instanceof Error ? e.message : String(e));\n      return false;\n    }\n  }\n\n  /**\n   * Build schema for this instance (called once per instance).\n   * This replaces the static getSchema() pattern.\n   */\n  public static buildSchema(): ShadoStructSchema {\n    // Check if the class has a manually-defined static schema (legacy pattern)\n    const ctor = this.constructor as any;\n    if (ctor.schema) {\n      return ctor.schema;\n    }\n\n    // Otherwise, build from decorators\n    const meta = readClassMeta(this.constructor);\n    const name = meta.name ?? (this.constructor as any).name ?? 'AnonymousStruct';\n    const dec = readFields(this.constructor);\n    if (!dec.length) {\n      throw new Error(\n        `No schema for ${name} (constructor: ${this.constructor.name}). ` +\n          `Decorate with @field(). Fields found: ${dec.length}. ` +\n          `Meta: ${JSON.stringify(meta)}`\n      );\n    }\n    const b = new ShadoSchemaBuilder(name, meta);\n    for (const f of dec) b.registerField(f.name, f.type);\n    return b.build();\n  }\n\n  static async initWasm(\n    this: ShadoConcreteCtor,\n    debugWasm: boolean = false,\n    wasmConfig:\n      | { mode: 'runtime' }\n      | { mode: 'precompiled'; module: WebAssembly.Module | ArrayBuffer | Uint8Array } = {\n      mode: 'runtime',\n    }\n  ) {\n    const ctor = this as ShadoBaseCtor;\n    if (ctor.wasmCompiled) return;\n\n    if (wasmConfig.mode === 'precompiled') {\n      if (!wasmConfig.module) {\n        throw new Error(\n          `${(ctor as any).name}.initWasm({ mode: 'precompiled' }) requires a module`\n        );\n      }\n      ctor.compiledWasmModule =\n        wasmConfig.module instanceof WebAssembly.Module\n          ? wasmConfig.module\n          : await WebAssembly.compile(wasmConfig.module as BufferSource);\n      ctor.wasmCompiled = true;\n      return;\n    }\n\n    const asc = await loadRuntimeASC();\n    if (asc.ready) {\n      try {\n        await asc.ready;\n      } catch (e) {\n        console.warn(e);\n      }\n    }\n    const schema = ctor.getSchema([]);\n\n    const entry = 'input.ts',\n      out = 'out.wasm';\n    let wasmBytes: ArrayBuffer | null = null;\n    const parts: string[] = [];\n    parts.push(genericASModuleSource());\n    parts.push(emitASUnmanagedFromSchema(schema));\n    const ext: ASCExtension | undefined = (this as any).ascExtension;\n    if (ext?.source) {\n      const s = ext.source(schema);\n      if (Array.isArray(s)) parts.push(...s);\n      else parts.push(s);\n    }\n    const source = parts.join('\\n\\n');\n\n    const td = new TextDecoder();\n    let stdoutStr = '';\n    let stderrStr = '';\n    const io = {\n      readFile: (n: string) => (n.endsWith(entry) ? source : null),\n      writeFile: (n: string, data: ArrayBuffer) => {\n        if (n.endsWith(out)) wasmBytes = data;\n        return true;\n      },\n      listFiles: () => [],\n      stdout: {\n        write: (chunk: string | Uint8Array) => {\n          stdoutStr += typeof chunk === 'string' ? chunk : td.decode(chunk);\n        },\n      },\n      stderr: {\n        write: (chunk: string | Uint8Array) => {\n          stderrStr += typeof chunk === 'string' ? chunk : td.decode(chunk);\n        },\n      },\n    };\n    const args = [\n      entry,\n      '--outFile',\n      out,\n      // Enable debug options when requested:\n      ...(debugWasm ? ['--debug'] : ['--optimizeLevel', '4']),\n      '--noAssert',\n      '--enable',\n      'simd', // Enable SIMD\n      '--runtime',\n      'stub',\n      '--noColors',\n    ];\n    const exitCode = await asc.main(args, io as any).catch((err: unknown) => {\n      // asc crashed before producing diagnostics\n      const msg = err instanceof Error ? (err.stack ?? err.message) : String(err);\n      throw new Error(`AssemblyScript invocation failed:\\n${msg}`);\n    });\n    const stripAnsi = (s: string) => s.replace(/\\\\x1B\\[[0-9;]*m/g, '');\n\n    if (exitCode?.error !== null || !wasmBytes) {\n      const errText = stripAnsi((stderrStr || stdoutStr || '').trim());\n      // Optional: parse a structured diagnostic list you can surface in UI\n      const diags = [];\n      const re = /(ERROR|WARNING)\\s+TS\\d+:\\s+([^\\n]+)\\n\\s+at\\s+([^\\s:]+):(\\d+):(\\d+)/g;\n      let m: RegExpExecArray | null;\n      while ((m = re.exec(errText))) {\n        diags.push({\n          severity: m[1],\n          message: m[2],\n          file: m[3],\n          line: +m[4],\n          column: +m[5],\n        });\n      }\n      const details = diags.length\n        ? `\\n\\nDiagnostics:\\n${diags\n            .map(d => `- ${d.severity} ${d.file}:${d.line}:${d.column} – ${d.message}`)\n            .join('\\n')}`\n        : '';\n      throw new Error(\n        `AssemblyScript compilation failed (exit ${JSON.stringify(exitCode) ?? '?'}).\\n\\n` +\n          `${errText || '(no compiler output)'}${details}`\n      );\n    }\n\n    ctor.compiledWasmModule = await WebAssembly.compile(wasmBytes as ArrayBuffer).catch(e => {\n      const errText = (stderrStr || stdoutStr || '').trim();\n      throw new Error(\n        `Error compiling ASC module: ${e?.message ?? e}\\n\\n${\n          errText ? `Compiler output:\\n${errText}` : ''\n        }`\n      );\n    });\n\n    ctor.wasmCompiled = true;\n  }\n\n  public initWasmArena(bytesHint?: number) {\n    if (!this._useWasm) return;\n    const Ctor = this.constructor as ShadoConcreteCtor;\n    if (!Ctor.wasmCompiled || !Ctor.compiledWasmModule) {\n      throw new Error(`${Ctor.name}.initWasm() was not awaited`);\n    }\n\n    const instance = new WebAssembly.Instance(Ctor.compiledWasmModule, {\n      env: {\n        abort(e: any) {\n          console.log('Called abort', e);\n        },\n      },\n    });\n\n    const memory = instance.exports.memory as WebAssembly.Memory;\n    const alloc = instance.exports.alloc as (n: number) => number;\n    const exports = instance.exports as any;\n\n    // Utilities to tag base-requirement on leaf wasm functions:\n    const needsBase = (fn: Function) => (\n      Object.defineProperty(fn, '__needsBase', { value: true }),\n      fn\n    );\n    const noBase = (fn: Function) => (\n      Object.defineProperty(fn, '__needsBase', { value: false }),\n      fn\n    );\n\n    // Which export names obviously do NOT need base:\n    const NO_BASE_NAMES = new Set(['alloc', 'free', 'memory', '__indirect_function_table']);\n\n    // Deep map + tag: all functions default to needsBase except those listed\n    function decorateOpsTree<T extends object>(root: T): T {\n      const seen = new WeakMap<object, any>();\n      const walk = (obj: any): any => {\n        if (typeof obj !== 'object' || obj === null) return obj;\n        const hit = seen.get(obj);\n        if (hit) return hit;\n        const out: any = Array.isArray(obj) ? [] : Object.create(null);\n        seen.set(obj, out);\n        for (const k of Object.keys(obj)) {\n          const v = obj[k];\n          if (typeof v === 'function') {\n            out[k] = NO_BASE_NAMES.has(k) ? noBase(v) : needsBase(v);\n          } else if (v && typeof v === 'object') {\n            out[k] = walk(v);\n          } else {\n            out[k] = v;\n          }\n        }\n        return out;\n      };\n      return walk(root);\n    }\n\n    // Build default ops\n    const ops = buildOpsForParent(this.getSchema(), exports);\n    Object.assign(ops, exports);\n    const ext: ASCExtension | undefined = Ctor.ascExtension;\n\n    if (ext?.bind) ext.bind(this.getSchema(), exports, ops);\n\n    // Tag everything once; store alongside asc bundle\n    const opsBound = decorateOpsTree(ops);\n    this.wasmModule = {\n      instance,\n      memory,\n      alloc,\n      exports,\n      ops: opsBound,\n    };\n    (Ctor as any).wasmModule = this.wasmModule;\n\n    // Save current arena data before adopting WASM memory\n    const currentData = this._arena.take().slice();\n\n    // Allocate enough space for the entire arena in WASM memory\n    const floats = Math.max(currentData.length, bytesHint ? bytesHint >> 2 : 0);\n    const bytes = floats * 4;\n\n    const ptr = this.wasmModule.alloc(bytes | 0);\n    const view = new Float32Array(this.wasmModule.memory.buffer, ptr, floats);\n    this.__wasmArenaFloats = floats;\n\n    // Copy existing data to WASM memory\n    view.set(currentData);\n\n    // Adopt WASM memory and update references\n    this._arena.adopt(view);\n    (this as any)._headerDV = this._arena.dataView();\n    this.__wasmBasePtr = ptr;\n    this._lastMemBuf = this.wasmModule.memory.buffer;\n\n    this.syncStructArrayHeaderFields?.();\n  }\n\n  public onDirty(cb: DirtyHandler): () => void {\n    (this._dirtyHandlers ??= []).push(cb);\n    let alive = true;\n    return () => {\n      if (!alive) return;\n      alive = false;\n      const a = this._dirtyHandlers;\n      if (!a) return;\n      const i = a.indexOf(cb);\n      if (i >= 0) a.splice(i, 1);\n    };\n  }\n  public emitHeaderDirty(byteOffset?: number, byteLength?: number) {\n    this._arena.markDirty?.();\n    const a = this._dirtyHandlers;\n    if (!a) return;\n    const ev: DirtyEvent = { kind: 'header', byteOffset, byteLength };\n    for (let i = 0; i < a.length; i++) a[i](ev);\n  }\n\n  generateWGSL(): string {\n    this.#ensureBuiltSchemas();\n    const alloc = this._bindingAlloc;\n    const preamble: string[] = [];\n    for (const sch of this._schemas) {\n      preamble.push(this.#emitSchemaWGSL(sch));\n    }\n    for (const s of this._extraStorages) {\n      // const bind = alloc.takeFor(`ssbo:${s.storageName}`);\n      preamble.push(`var<storage, ${s.access ?? 'read'}> ${s.storageName} : array<f32>;`);\n      preamble.push('');\n    }\n    for (const sym of this._samplers) {\n      preamble.push(this.#emitSamplerPair(sym, alloc));\n    }\n    preamble.push(this.#emitFSIn());\n    const rewritten = this.#rewriteScalarUniformRefs(\n      [this._vsBody, this._fsBody].join('\\n\\n'),\n      this._schemas\n    );\n    const out = [preamble.join('\\n'), rewritten].join('\\n');\n    this.#mustBalanceBraces(out);\n    return out;\n  }\n\n  #ensureBuiltSchemas() {\n    if (this._built) return;\n    if (this._manualSchemas.length > 0) {\n      this._schemas = this._manualSchemas;\n    } else if (this._dynamicMeta) {\n      const fields: any[] = [];\n      const pushI32 = (k: string) => fields.push({ name: k, ty: 'i32' });\n      for (const k of Object.keys(this._dynamicMeta.bases ?? {})) pushI32(k);\n      for (const k of Object.keys(this._dynamicMeta.strides ?? {})) pushI32(k);\n      for (const k of Object.keys(this._dynamicMeta.counts ?? {})) pushI32(k);\n      for (const k of this._dynamicMeta.extraI32 ?? []) pushI32(k);\n      this._schemas = [\n        {\n          name: 'AutoSchema',\n          storageName: this._dynamicMeta.storageName,\n          uboFields: fields,\n        },\n      ];\n    } else {\n      this._schemas = [];\n    }\n    this._built = true;\n  }\n\n  #emitSchemaWGSL(s: any): string {\n    const uboType = `${s.name}UBO`;\n    const uboStruct = [\n      `// === ${s.name} bindings ===`,\n      `struct ${uboType} {`,\n      ...s.uboFields.map(\n        (f: any) => `  ${f.name} : ${f.ty},${f.comment ? ` // ${f.comment}` : ''}`\n      ),\n      `};`,\n    ].join('\\n');\n    const uboBinding = this._bindingAlloc.takeFor(`ubo:${s.name}`);\n    const ssboBinding = this._bindingAlloc.takeFor(`ssbo:${s.storageName}`);\n    return [\n      uboStruct,\n      `@group(0) @binding(${uboBinding}) var<uniform> u${s.name} : ${uboType};`,\n      `@group(0) @binding(${ssboBinding}) var<storage, read> ${s.storageName} : array<f32>;`,\n      ``,\n      `fn ${s.name}_fetch(i: i32) -> f32 { return ${s.storageName}[i]; }`,\n      `fn ${s.name}_fetch4(i: i32) -> vec4f {`,\n      `  return vec4f(${s.storageName}[i+0], ${s.storageName}[i+1], ${s.storageName}[i+2], ${s.storageName}[i+3]);`,\n      `}`,\n      ``,\n    ].join('\\n');\n  }\n\n  #emitSamplerPair(symbol: string, alloc: any): string {\n    const sampB = alloc.takeFor(`sampler:${symbol}`);\n    const texB = alloc.takeFor(`texture:${symbol}`);\n    return [\n      `@group(0) @binding(${sampB}) var ${symbol}Sampler : sampler;`,\n      `@group(0) @binding(${texB})  var ${symbol}        : texture_2d<f32>;`,\n      ``,\n    ].join('\\n');\n  }\n\n  #emitFSIn(): string {\n    return [\n      `struct FSIn {`,\n      `  @builtin(position) pos : vec4f,`,\n      `  @location(0) vUV : vec2f,`,\n      `  @location(1) vColor : vec4f,`,\n      `};`,\n      ``,\n    ].join('\\n');\n  }\n\n  #rewriteScalarUniformRefs(wgsl: string, schemas: any[]): string {\n    for (const s of schemas) {\n      for (const f of s.uboFields) {\n        const re = new RegExp(`\\\\bu${s.name}_${f.name}\\\\b`, 'g');\n        wgsl = wgsl.replace(re, `u${s.name}.${f.name}`);\n      }\n    }\n    return wgsl;\n  }\n\n  #mustBalanceBraces(text: string) {\n    let n = 0;\n    for (const ch of text) {\n      if (ch === '{') n++;\n      else if (ch === '}') n--;\n    }\n    if (n !== 0) throw new Error(`WGSL emit error: unbalanced braces (${n}).`);\n  }\n\n  protected pickPrimaryChild() {\n    const schema = this.getSchema();\n    const entries = Object.entries(schema.structArrays ?? {});\n    if (!entries.length) throw new Error(`Shado '${schema.name}' has no struct-array fields (AoS)`);\n    // convention: take the first struct-array as the “instances” list\n    const [childField, meta] = entries[0] as [string, any];\n    const parent = schema; // ShadoStructSchema\n    const child = meta.schema; // ShadoStructSchema (AoS header)\n    return { parent, child, childField };\n  }\n\n  protected instanceHeaderNames() {\n    return {\n      visibleIndex: 'visibleIndex',\n      instances: 'instances',\n    };\n  }\n\n  protected instanceFieldNames() {\n    return {\n      visibleIndex: 'visibleIndex',\n      translation: 'translation',\n      color: 'color',\n      animation: 'animationBuffer',\n    };\n  }\n\n  public static shaderIO(engine: any): {\n    uniforms: string[];\n    samplers: string[];\n  } {\n    const isWebGPU = engine?._isWebGPU ?? engine?.getClassName?.() === 'WebGPUEngine';\n    const wantsStorageBacking = (this as any).backingPreference === 'storage';\n    return (this as any).getSchema().materialIOFor(isWebGPU && wantsStorageBacking ? engine : null);\n  }\n\n  public get arena(): FloatArena {\n    return this._arena;\n  }\n\n  public getSchema(): ShadoStructSchema {\n    const ctor = this.constructor as any as ShadoBaseCtor;\n\n    return ctor.getSchema([]);\n  }\n\n  /**\n   * Static method to build a schema for a class (used for static utilities).\n   */\n  public static getSchema(\n    this: ShadoBaseCtor,\n    extraFields: PendingField[] = []\n  ): ShadoStructSchema {\n    // Check if the class has a manually-defined static schema (legacy pattern)\n    if ((this as any).schema) {\n      return (this as any).schema;\n    }\n\n    // Check if we already built and cached the schema\n    if ((this as any).__cachedSchema) {\n      return (this as any).__cachedSchema;\n    }\n\n    const meta = readClassMeta(this);\n    const name = meta.name ?? (this as any).name ?? 'AnonymousStruct';\n    const dec = readFields(this);\n    for (const f of extraFields) dec.push(f);\n    if (!dec.length) throw new Error(`No schema for ${name}. Decorate with @field().`);\n    const b = new ShadoSchemaBuilder(name, meta);\n    for (const f of dec) b.registerField(f.name, f.type);\n    const schema = b.build();\n\n    // Cache it on the class\n    (this as any).__cachedSchema = schema;\n    return schema;\n  }\n\n  public static debugShaderCode(this: ShadoBaseCtor, engine: any): void {\n    const schema = (this as any).getSchema();\n    if (schema) schema.debugShaderCode(engine);\n  }\n\n  public static debugAscCode(this: ShadoBaseCtor): void {\n    // eslint-disable-next-line no-console\n    console.log('--- AssemblyScript code ---');\n    // eslint-disable-next-line no-console\n    console.debug(emitASUnmanagedFromSchema((this as any).getSchema()));\n  }\n\n  /**\n   * Static method kept for backward compatibility.\n   * New code should use instance.registerIncludes() instead.\n   */\n  public static registerIncludes(this: ShadoBaseCtor) {\n    registerIncludesOnEngine((this as any).getSchema());\n  }\n\n  /**\n   * Register shader includes for this specific instance.\n   * This uses the unique instance include name.\n   */\n  // public registerIncludes() {\n  //   registerIncludesOnEngine(this._schema, this._includeName);\n  // }\n\n  public generateWGSLPair(): { vs: string; fs: string } {\n    throw new Error('WGSL generation must be implemented in subclass');\n  }\n\n  public generateGLSLPair(): { vs: string; fs: string } {\n    throw new Error('GLSL generation must be implemented in subclass');\n  }\n\n  public getShaderNames(rewrite: boolean = true): { vertex: string; fragment: string } {\n    const effect = BABYLON.Effect as any;\n    const shaderStore = BABYLON.ShaderStore as any;\n    const isWebGPU = this._engine._isWebGPU ?? this._engine.getClassName?.() === 'WebGPUEngine';\n    const preferWGSL = isWebGPU && (this.constructor as any).backingPreference === 'storage';\n    // Use instance-specific include name instead of schema name\n    const idBase = this._includeName + this._instanceId;\n\n    if (preferWGSL) {\n      const vKey = `${idBase}VertexShader`;\n      const fKey = `${idBase}FragmentShader`;\n      if (rewrite || !shaderStore.ShadersStoreWGSL[vKey] || !shaderStore.ShadersStoreWGSL[fKey]) {\n        const { vs, fs } = this.generateWGSLPair();\n        shaderStore.ShadersStoreWGSL[vKey] = vs;\n        shaderStore.ShadersStoreWGSL[fKey] = fs;\n      }\n      return { vertex: idBase, fragment: idBase };\n    } else {\n      const vKey = `${idBase}VertexShader`;\n      const fKey = `${idBase}FragmentShader`;\n      if (rewrite || !effect.ShadersStore[vKey] || !effect.ShadersStore[fKey]) {\n        const { vs, fs } = this.generateGLSLPair();\n        effect.ShadersStore[vKey] = vs;\n        effect.ShadersStore[fKey] = fs;\n      }\n      return { vertex: idBase, fragment: idBase };\n    }\n  }\n\n  public setVarArray(field: string, data: Float32Array | number[]) {\n    if (this._isDisposed) return;\n    const schema = this.getSchema();\n    const meta = schema.varArrays[field];\n    if (!meta) throw new Error(`'${field}' is not a variable array field on ${schema?.name}`);\n    const src = data instanceof Float32Array ? data : new Float32Array(data);\n    const seg = this._varSeg[field] || (this._varSeg[field] = { offF: 0, lenF: 0, capF: 0 });\n    if (src.length > seg.capF) {\n      this._repack({\n        growVar: {\n          field,\n          newCapF: Math.max(src.length, Math.max(64, seg.capF * 2)),\n        },\n      });\n    }\n    this._arena.write(seg.offF, src, src.length);\n    seg.lenF = src.length;\n  }\n\n  private _opsBoundOnce: any;\n\n  private _bakeOpsOnce(raw: any) {\n    const self = this; // eslint-disable-line\n    const seen = new WeakMap<object, any>();\n\n    const clone = (obj: any): any => {\n      if (typeof obj !== 'object' || obj === null) return obj;\n      const hit = seen.get(obj);\n      if (hit) return hit;\n      const out: any = Array.isArray(obj) ? [] : Object.create(null);\n      seen.set(obj, out);\n      for (const k of Object.keys(obj)) {\n        const v = obj[k];\n        if (typeof v === 'function') {\n          const wantBase = v.__needsBase !== false;\n          out[k] = wantBase\n            ? (...args: any[]) => v(self._prepareForWasm(), ...args)\n            : (...args: any[]) => v(...args);\n        } else if (v && typeof v === 'object') {\n          out[k] = clone(v);\n        } else {\n          out[k] = v;\n        }\n      }\n      return out;\n    };\n\n    return clone(raw);\n  }\n\n  public get ops() {\n    if (!this._useWasm) return undefined;\n    if (!this._opsBoundOnce) {\n      if (!this.wasmModule) {\n        throw new Error(\n          `wasmModule module not initialized for ${this.getSchema()}. Did you forget to call .initialize() or set useWasm: false?`\n        );\n      }\n      this._opsBoundOnce = this._bakeOpsOnce(this.wasmModule.ops);\n    }\n    return this._opsBoundOnce;\n  }\n\n  protected _makeThinChild<T>(\n    field: string,\n    ChildCtor: new (...args: any[]) => T,\n    index: number\n  ): T {\n    const schema = this.getSchema();\n    const meta = schema.structArrays[field];\n    const strideF = meta.schema.headerFloatCount | 0;\n\n    installThinAccessors(ChildCtor);\n\n    const child = Object.create(ChildCtor.prototype);\n    child._engine = this._engine;\n    child._host = this;\n    child._baseF = this._structSeg[field].offF + index * strideF;\n\n    child.emitHeaderDirty = (byteOffset?: number, byteLength?: number) =>\n      this.emitHeaderDirty(byteOffset, byteLength);\n    child.dispose = () => {};\n\n    return child as T;\n  }\n\n  private _refreshStructArrayChildBases() {\n    const schema = this.getSchema();\n    for (const field of Object.keys(schema.structArrays)) {\n      const seg = this._structSeg[field];\n      const slots = this._structArraySlots[field];\n      if (!seg || !slots?.length) continue;\n\n      const strideF = schema.structArrays[field].schema.headerFloatCount | 0;\n      for (let i = 0; i < slots.length; i++) {\n        const child: any = slots[i];\n        if (!child || child._host !== this) continue;\n        child._baseF = seg.offF + i * strideF;\n        for (const key of Object.keys(child)) {\n          if (key.startsWith('__live_')) delete child[key];\n        }\n      }\n    }\n  }\n\n  public tickInstances(field: string, deltaTime: number) {\n    if (this._isDisposed || !this._useWasm) return;\n    const asc = this.wasmModule;\n    if (!asc) return;\n    const seg = this._structSeg[field];\n    const count = this._structArrayCount[field] | 0;\n    if (!count) return;\n\n    const base = this.__wasmBasePtr + seg.offF * 4;\n    asc.ops[field].orbitDelta(base, count, deltaTime, 0.1234, 0.6, 0.9, 0.15);\n    this._arena.markDirty?.();\n  }\n\n  protected _prepareForWasm(): number {\n    if (!this._useWasm) return 0;\n    this._refreshViewsIfGrown?.();\n    this.syncStructArrayHeaderFields();\n    return this.getBaseOffset();\n  }\n\n  protected syncStructArrayHeaderFields() {\n    if (!this._useWasm || !this.__wasmBasePtr) return;\n    const asc = this.wasmModule;\n    const buf = asc?.memory?.buffer;\n    if (this._lastSyncedBuffer === buf && this._lastSyncedStructVersion === this._structVersion)\n      return;\n    if (!buf) return;\n    const schema = this.getSchema();\n    for (const name of Object.keys(schema.structArrays)) {\n      const seg = this._structSeg[name];\n      const count = (this._structArrayCount[name] | 0) >>> 0;\n      const ptrField = `${name}Ptr`;\n      const cntField = `${name}Count`;\n\n      // Even if count==0, a valid pointer is nice to have\n      const ptr = seg ? (this.__wasmBasePtr + (seg.offF | 0) * 4) >>> 0 : 0;\n\n      // If the TS class has those fields, set them. This writes into wasm memory.\n      if ((this as any)[ptrField] !== undefined) (this as any)[ptrField] = ptr;\n      if ((this as any)[cntField] !== undefined) (this as any)[cntField] = count;\n    }\n    this._lastSyncedBuffer = buf;\n    this._lastSyncedStructVersion = this._structVersion;\n    this.emitHeaderDirty(); // one notification is enough\n  }\n\n  /** Create, attach, and return a child struct instance in the given var-array. */\n  public addStructToArray<T extends Shado = Shado>(field: string): T {\n    if (this._isDisposed) throw new Error('addStructToArray on disposed object');\n\n    const schema = this.getSchema();\n    const meta = schema.structArrays[field];\n    if (!meta) {\n      throw new Error(`'${field}' is not a struct var-array on ${schema.name}`);\n    }\n\n    // Ensure segment exists & capacity\n    const strideF = meta.schema.headerFloatCount;\n    const seg = (this._structSeg[field] ||= { offF: 0, lenF: 0, capF: 0 });\n    const count = (this._structArrayCount[field] || 0) | 0;\n    const needF = (count + 1) * strideF;\n    if (needF > seg.capF) {\n      this._repack({\n        growStruct: {\n          field,\n          newCapF: Math.max(needF, Math.max(strideF * 4, seg.capF * 2)),\n        },\n      });\n    }\n\n    seg.lenF = needF;\n    this._structArrayCount[field] = count + 1;\n\n    const child = this._makeThinChild<T>(field, meta.ctor, count);\n\n    (this._structArraySlots[field] ||= [])[count] = child as any;\n    (this._structArrayIndex[field] ||= new Map()).set(child as any, count);\n\n    this._structVersion++;\n    this.syncStructArrayHeaderFields();\n\n    return child;\n  }\n\n  public reserveStructArray(field: string, count: number): void {\n    if (this._isDisposed) return;\n\n    const schema = this.getSchema();\n    const meta = schema.structArrays[field];\n    if (!meta) {\n      throw new Error(`'${field}' is not a struct var-array on ${schema.name}`);\n    }\n\n    const nextCount = Math.max(0, count | 0);\n    const strideF = meta.schema.headerFloatCount | 0;\n    const needF = nextCount * strideF;\n    const seg = (this._structSeg[field] ||= { offF: 0, lenF: 0, capF: 0 });\n    if (needF > seg.capF) {\n      this._repack({\n        growStruct: {\n          field,\n          newCapF: Math.max(needF, Math.max(strideF * 4, seg.capF * 2)),\n        },\n      });\n    }\n  }\n\n  public getStructArrayCount(field: string): number {\n    const schema = this.getSchema();\n    if (!schema.structArrays[field]) {\n      throw new Error(`'${field}' is not a struct var-array on ${schema.name}`);\n    }\n    return this._structArrayCount[field] | 0;\n  }\n\n  public setStructArrayCount(field: string, count: number): void {\n    if (this._isDisposed) return;\n\n    const schema = this.getSchema();\n    const meta = schema.structArrays[field];\n    if (!meta) {\n      throw new Error(`'${field}' is not a struct var-array on ${schema.name}`);\n    }\n\n    const nextCount = Math.max(0, count | 0);\n    const strideF = meta.schema.headerFloatCount | 0;\n    this.reserveStructArray(field, nextCount);\n\n    const seg = (this._structSeg[field] ||= { offF: 0, lenF: 0, capF: 0 });\n    seg.lenF = nextCount * strideF;\n    this._structArrayCount[field] = nextCount;\n\n    const slots = (this._structArraySlots[field] ||= []);\n    slots.length = nextCount;\n    const index = (this._structArrayIndex[field] ||= new Map());\n    index.clear();\n    for (let i = 0; i < slots.length; i++) {\n      const child = slots[i];\n      if (!child) continue;\n      (child as any)._baseF = seg.offF + i * strideF;\n      index.set(child, i);\n    }\n\n    this._arena.markDirty?.();\n    this._structVersion++;\n    this.syncStructArrayHeaderFields();\n  }\n\n  public clearStructArray(field: string): void {\n    this.setStructArrayCount(field, 0);\n  }\n\n  public copyStructArrayElement(field: string, fromIndex: number, toIndex: number): void {\n    if (this._isDisposed) return;\n\n    const schema = this.getSchema();\n    const meta = schema.structArrays[field];\n    if (!meta) {\n      throw new Error(`'${field}' is not a struct var-array on ${schema.name}`);\n    }\n\n    const count = this._structArrayCount[field] | 0;\n    const from = fromIndex | 0;\n    const to = toIndex | 0;\n    if (from < 0 || from >= count || to < 0 || to >= count) {\n      throw new RangeError(\n        `copyStructArrayElement(${field}) index out of range: from=${from}, to=${to}, count=${count}`\n      );\n    }\n    if (from === to) return;\n\n    const strideF = meta.schema.headerFloatCount | 0;\n    const seg = this._structSeg[field];\n    const arena = this._arena.take();\n    const src = arena.slice(seg.offF + from * strideF, seg.offF + (from + 1) * strideF);\n    this._arena.write(seg.offF + to * strideF, src, strideF);\n\n    const slots = (this._structArraySlots[field] ||= []);\n    const index = (this._structArrayIndex[field] ||= new Map());\n    const child = slots[from];\n    slots[to] = child;\n    if (child) {\n      (child as any)._baseF = seg.offF + to * strideF;\n      for (const key of Object.keys(child as any)) {\n        if (key.startsWith('__live_')) delete (child as any)[key];\n      }\n      index.set(child, to);\n    }\n\n    this._structVersion++;\n    this.syncStructArrayHeaderFields();\n  }\n\n  public removeStructFromArray(\n    field: string,\n    index: number,\n    mode: 'swap' | 'stable' = 'swap'\n  ): Shado | undefined {\n    if (this._isDisposed) return undefined;\n\n    const schema = this.getSchema();\n    const meta = schema.structArrays[field];\n    if (!meta) {\n      throw new Error(`'${field}' is not a struct var-array on ${schema.name}`);\n    }\n\n    const count = this._structArrayCount[field] | 0;\n    const removeIndex = index | 0;\n    if (removeIndex < 0 || removeIndex >= count) {\n      throw new RangeError(\n        `removeStructFromArray(${field}) index out of range: index=${removeIndex}, count=${count}`\n      );\n    }\n\n    const strideF = meta.schema.headerFloatCount | 0;\n    const seg = this._structSeg[field];\n    const slots = (this._structArraySlots[field] ||= []);\n    const indexMap = (this._structArrayIndex[field] ||= new Map());\n    const removed = slots[removeIndex];\n    if (removed) indexMap.delete(removed);\n\n    if (mode === 'stable') {\n      const arena = this._arena.take();\n      for (let i = removeIndex + 1; i < count; i++) {\n        const src = arena.slice(seg.offF + i * strideF, seg.offF + (i + 1) * strideF);\n        this._arena.write(seg.offF + (i - 1) * strideF, src, strideF);\n        const child = slots[i];\n        slots[i - 1] = child;\n        if (child) {\n          (child as any)._baseF = seg.offF + (i - 1) * strideF;\n          for (const key of Object.keys(child as any)) {\n            if (key.startsWith('__live_')) delete (child as any)[key];\n          }\n          indexMap.set(child, i - 1);\n        }\n      }\n    } else {\n      const last = count - 1;\n      if (removeIndex !== last) {\n        const arena = this._arena.take();\n        const src = arena.slice(seg.offF + last * strideF, seg.offF + (last + 1) * strideF);\n        this._arena.write(seg.offF + removeIndex * strideF, src, strideF);\n        const moved = slots[last];\n        slots[removeIndex] = moved;\n        if (moved) {\n          (moved as any)._baseF = seg.offF + removeIndex * strideF;\n          for (const key of Object.keys(moved as any)) {\n            if (key.startsWith('__live_')) delete (moved as any)[key];\n          }\n          indexMap.set(moved, removeIndex);\n        }\n      }\n    }\n\n    slots.length = count - 1;\n    seg.lenF = (count - 1) * strideF;\n    this._structArrayCount[field] = count - 1;\n\n    this._arena.write(seg.offF + (count - 1) * strideF, new Float32Array(strideF), strideF);\n    this._arena.markDirty?.();\n    this._structVersion++;\n    this.syncStructArrayHeaderFields();\n\n    return removed;\n  }\n\n  public commitAndBind(effect: any) {\n    if (this._isDisposed) return;\n    this.commit();\n    this.bind(effect);\n  }\n\n  public commit() {\n    if (this._isDisposed) return;\n    this._backing.commit();\n  }\n\n  public bind(effect: any) {\n    if (this._isDisposed) return;\n    this._backing.bind(effect, this._includeName);\n  }\n\n  public bindMaterial(material: any) {\n    if (this._isDisposed) return;\n    (this._backing.bindMaterial ?? this._backing.bind).call(\n      this._backing,\n      material,\n      this._includeName\n    );\n  }\n\n  public dispose() {\n    if (this._isDisposed) return;\n    this._isDisposed = true;\n\n    // 1) Unsubscribe Babylon observers\n    try {\n      const eng: any = this._engine;\n      if (eng) {\n        if (this._engineObs) eng.onDisposeObservable.remove(this._engineObs);\n        if (this._engineNewSceneObs) eng.onNewSceneAddedObservable.remove(this._engineNewSceneObs);\n      }\n      for (const { scene, obs } of this._sceneObs) {\n        scene?.onDisposeObservable?.remove?.(obs);\n      }\n    } catch (e) {\n      console.warn('Error during Shado.dispose()', e);\n    }\n    this._engineObs = undefined;\n    this._engineNewSceneObs = undefined;\n    this._sceneObs.length = 0;\n\n    // 2) Unsubscribe child mirrors (onDirty relays)\n    try {\n      for (const k of Object.keys(this._structArrayUnsubs)) {\n        const arr = this._structArrayUnsubs[k];\n        if (arr) {\n          for (let i = 0; i < arr.length; i++) {\n            try {\n              arr[i]?.();\n            } catch (e) {\n              console.warn('Error during Shado.dispose()', e);\n            }\n            arr[i] = undefined as any;\n          }\n        }\n      }\n    } catch (e) {\n      console.warn('Error during Shado.dispose()', e);\n    }\n    this._structArrayUnsubs = {};\n    this._structArraySlots = {};\n    this._structArrayIndex = {};\n    this._structArrayCount = {};\n    this._dirtyHandlers = [];\n    // 3) Free wasmModule allocations (arena base + any owned pointers)\n    if (this._useWasm) {\n      try {\n        const asc = this.wasmModule;\n        const free = asc?.exports?.free as ((p: number) => void) | undefined;\n\n        // Free the arena base block if we have one\n        if (free && this.__wasmBasePtr) {\n          try {\n            free(this.__wasmBasePtr >>> 0);\n          } catch (e) {\n            console.warn('Error during Shado.dispose()', e);\n          }\n        }\n      } catch (e) {\n        console.warn('Error during Shado.dispose()', e);\n      }\n    }\n    this.__wasmBasePtr = 0;\n    this.__wasmArenaFloats = 0;\n    this._lastMemBuf = null;\n\n    // 4) Invalidate views so future writes no-op instead of crashing\n    try {\n      // Replace arena storage with a tiny inert view\n      (this as any)._arena.adopt(new Float32Array(1));\n    } catch (e) {\n      console.warn('Error during Shado.dispose()', e);\n    }\n    for (const k of Object.keys(this._liveVecs)) {\n      this._liveVecs[k] = new Float32Array(0);\n    }\n\n    // 5) Clear segments & versions\n    this._headerSeg = { offF: 0, lenF: 0, capF: 0 };\n    this._varSeg = {};\n    this._structSeg = {};\n    this._structVersion++;\n    this._lastSyncedStructVersion = this._structVersion;\n\n    // 6) Dispose GPU resources\n    try {\n      this._backing?.dispose?.();\n    } catch (e) {\n      console.warn('Error during Shado.dispose()', e);\n    }\n    this._backing = undefined as any;\n\n    // 7) Make public calls safe after dispose\n    this._engine = null as any;\n  }\n\n  protected onRefreshViewsIfGrown?(buf: ArrayBuffer): void;\n  protected _lastMemBuf: ArrayBuffer | null = null;\n\n  protected _refreshViewsIfGrown() {\n    if (!this._useWasm) return;\n    const asc = this.wasmModule;\n    if (!asc?.memory) return;\n    const buf = asc.memory.buffer;\n    if (buf !== this._lastMemBuf) {\n      this._lastMemBuf = buf;\n      const currentLenF = this._arena.take().length;\n      const next = new Float32Array(\n        buf,\n        this.getBaseOffset(),\n        Math.max(1, this.__wasmArenaFloats || currentLenF)\n      );\n      this._arena.adopt(next);\n      (this as any)._headerDV = this._arena.dataView();\n      this.syncStructArrayHeaderFields();\n      this?.onRefreshViewsIfGrown?.(buf);\n    }\n  }\n\n  private _ensureArenaLayout() {\n    const schema = this.getSchema();\n    type Entry = {\n      kind: 'header' | 'var' | 'struct';\n      name?: string;\n      seg: Segment;\n      stride?: number;\n    };\n    const entries: Entry[] = [];\n    entries.push({ kind: 'header', seg: this._headerSeg });\n    for (const name of Object.keys(schema.varArrays)) {\n      entries.push({\n        kind: 'var',\n        name,\n        seg: (this._varSeg[name] ??= { offF: 0, lenF: 0, capF: 0 }),\n        stride: schema.varArrays[name].floatStride,\n      });\n    }\n    for (const name of Object.keys(schema.structArrays)) {\n      entries.push({\n        kind: 'struct',\n        name,\n        seg: (this._structSeg[name] ??= { offF: 0, lenF: 0, capF: 0 }),\n        stride: schema.structArrays[name].floatStride,\n      });\n    }\n    let cursor = 0;\n    const round = (x: number, a: number) => Math.ceil(x / a) * a;\n    for (const e of entries) {\n      cursor = round(cursor, 4);\n      e.seg.offF = cursor;\n      cursor += e.seg.capF || 0;\n    }\n    this._arena.ensureCapacity(cursor);\n    this.syncStructArrayHeaderFields(); // after initial placement\n  }\n\n  private _repack(opts?: {\n    growVar?: { field: string; newCapF: number };\n    growStruct?: { field: string; newCapF: number };\n  }) {\n    this._refreshViewsIfGrown?.();\n\n    const prevView = this._arena.take();\n    const prev = new Float32Array(prevView);\n    const schema = this.getSchema();\n\n    const oldHeaderOff = this._headerSeg.offF | 0;\n    const oldHeaderLen = this._headerSeg.lenF | 0;\n    const newHeaderCap = this._headerSeg.capF;\n\n    const varFields = Object.keys(schema.varArrays);\n    const structFields = Object.keys(schema.structArrays);\n\n    const round = (x: number, a: number) => Math.ceil(x / a) * a;\n\n    const newVarCaps: Record<string, number> = {};\n    for (const f of varFields) {\n      const seg = (this._varSeg[f] ??= { offF: 0, lenF: 0, capF: 0 });\n      let cap = seg.capF;\n      if (opts?.growVar && opts.growVar.field === f) cap = Math.max(cap, opts.growVar.newCapF);\n      newVarCaps[f] = Math.max(cap, seg.lenF);\n    }\n    const newStructCaps: Record<string, number> = {};\n    for (const f of structFields) {\n      const seg = (this._structSeg[f] ??= { offF: 0, lenF: 0, capF: 0 });\n      let cap = seg.capF;\n      if (opts?.growStruct && opts.growStruct.field === f)\n        cap = Math.max(cap, opts.growStruct.newCapF);\n      newStructCaps[f] = Math.max(cap, seg.lenF);\n    }\n\n    let totalF = newHeaderCap;\n    for (const f of varFields) {\n      totalF = round(totalF, 4);\n      totalF += newVarCaps[f];\n    }\n    for (const f of structFields) {\n      totalF = round(totalF, 4);\n      totalF += newStructCaps[f];\n    }\n\n    const asc = this.wasmModule;\n    let next: Float32Array;\n    if (asc?.alloc && asc?.memory) {\n      const bytes = Math.max(1, totalF) * 4;\n      const ptr = asc.alloc(bytes | 0); // may grow memory\n      // Update last memory buffer reference\n      this._lastMemBuf = asc.memory.buffer;\n      next = new Float32Array(asc.memory.buffer, ptr, Math.max(1, totalF));\n      (this as any).__wasmBasePtr = ptr;\n      this.__wasmArenaFloats = Math.max(1, totalF);\n    } else {\n      next = new Float32Array(Math.max(1, totalF));\n      (this as any).__wasmBasePtr = 0;\n      this.__wasmArenaFloats = 0;\n    }\n\n    let cursor = 0;\n    this._headerSeg.offF = cursor;\n    this._headerSeg.capF = newHeaderCap;\n    this._headerSeg.lenF = newHeaderCap;\n    next.set(prev.subarray(oldHeaderOff, oldHeaderOff + oldHeaderLen), cursor);\n    cursor += newHeaderCap;\n\n    for (const f of varFields) {\n      const seg = this._varSeg[f];\n      const newCap = newVarCaps[f];\n      const oldSlice =\n        seg.capF && seg.lenF ? prev.subarray(seg.offF, seg.offF + seg.lenF) : undefined;\n      cursor = round(cursor, 4);\n      seg.offF = cursor;\n      seg.capF = newCap;\n      if (oldSlice) next.set(oldSlice, seg.offF);\n      cursor += newCap;\n    }\n\n    for (const f of structFields) {\n      const seg = this._structSeg[f];\n      const newCap = newStructCaps[f];\n      const oldSlice =\n        seg.capF && seg.lenF ? prev.subarray(seg.offF, seg.offF + seg.lenF) : undefined;\n      cursor = round(cursor, 4);\n      seg.offF = cursor;\n      seg.capF = newCap;\n      if (oldSlice) next.set(oldSlice, seg.offF);\n      cursor += newCap;\n    }\n\n    this._arena.adopt(next);\n    (this as any)._headerDV = this._arena.dataView();\n    this._refreshStructArrayChildBases();\n\n    this._structVersion++;\n    this.syncStructArrayHeaderFields(); // after initial placement\n  }\n\n  public getVarArrayPtr(field: string): number {\n    const seg = this._varSeg[field];\n    if (!this.wasmModule || !seg) return 0;\n    return (this.getBaseOffset() + (seg.offF | 0) * 4) >>> 0;\n  }\n  public getVarArrayCount(field: string): number {\n    return (this._varSeg[field]?.lenF ?? 0) / (this.getSchema().varArrays[field].floatStride | 1);\n  }\n  public getVarArrayStrideFloats(field: string): number {\n    return this.getSchema().varArrays[field].floatStride | 0;\n  }\n}\n","import { Shado } from '../core/Shado';\nimport { ShadoSchemaBuilder } from '../schema/ShadoSchemaBuilder';\n\nexport class NameplateData extends Shado {\n  // Example of how to define the schema without TS decorators, i.e. in JavaScript\n  static schema = new ShadoSchemaBuilder('NameplateData', { useWasm: false })\n    .registerField('glyphUv4', { arrayOf: 'vec4' }) // atlas UVs per gid\n    .registerField('glyphPlane4', { arrayOf: 'vec4' }) // quad plane per gid (EM)\n    .registerField('glyphAdvance', { arrayOf: 'f32' }) // advance per gid (EM)\n    .registerField('glyphGid', { arrayOf: 'u32' }) // per-glyph stream\n    .registerField('glyphOfs2', { arrayOf: 'vec2' }) // per-glyph offsets (EM)\n    .registerField('glyphOwner', { arrayOf: 'u32' }) // owner index per glyph\n    .build();\n\n  private _pool = new NamePool();\n  private _lut?: FontGlyphLUT;\n  private _streams?: NameplateStreams;\n\n  constructor(engine: any, fontAsset: any) {\n    super(engine);\n    if (!fontAsset) {\n      throw new Error('FontAsset required for NameplateData');\n    }\n    this._lut = new FontGlyphLUT(fontAsset);\n    this._streams = new NameplateStreams(this._pool, this._lut);\n\n    this.setVarArray('glyphUv4', this._lut.uv4);\n    this.setVarArray('glyphPlane4', this._lut.plane4);\n    this.setVarArray('glyphAdvance', this._lut.advance);\n  }\n\n  public addNamesToPool(names: string[]): number[] {\n    const idxs = this._pool.addMany(names);\n    return idxs;\n  }\n  public addName(name: string): number {\n    return this._pool.add(name);\n  }\n  public nameCount(): number {\n    return this._pool.size();\n  }\n  public poolGet(i: number) {\n    return this._pool.get(i);\n  }\n\n  public rebuildStreams(children: Array<{ nameIndex: number }>) {\n    if (!this._streams) return;\n    const { glyphGid, glyphOwner, glyphOfs2 } = this._streams.build(children);\n    this.setVarArray('glyphGid', glyphGid);\n    this.setVarArray('glyphOwner', glyphOwner);\n    this.setVarArray('glyphOfs2', glyphOfs2);\n  }\n\n  public glyphCount(): number {\n    return (this as any)._varSeg['glyphGid']?.lenF | 0;\n  }\n}\n\n// ───────────────────────────── Name & Glyph Utilities ─────────────────────────\nclass NamePool {\n  private _names: string[] = [];\n  private _byName = new Map<string, number>();\n\n  constructor(initial?: readonly string[]) {\n    if (initial?.length) this.addMany(initial);\n  }\n\n  add(name: string): number {\n    const hit = this._byName.get(name);\n    if (hit !== undefined) return hit;\n    const idx = this._names.length;\n    this._names.push(name);\n    this._byName.set(name, idx);\n    return idx;\n  }\n\n  addMany(names: readonly string[]): number[] {\n    const out = new Array<number>(names.length);\n    for (let i = 0; i < names.length; i++) out[i] = this.add(names[i]);\n    return out;\n  }\n\n  get(index: number): string {\n    return this._names[index] ?? '';\n  }\n  getIndex(name: string): number | undefined {\n    return this._byName.get(name);\n  }\n  has(name: string) {\n    return this._byName.has(name);\n  }\n  size() {\n    return this._names.length;\n  }\n  asArray() {\n    return this._names;\n  }\n}\n\nclass FontGlyphLUT {\n  public readonly uv4: Float32Array;\n  public readonly plane4: Float32Array;\n  public readonly advance: Float32Array;\n  public readonly emPx: number;\n\n  private gidByCode = new Map<number, number>();\n  private advanceByCode = new Map<number, number>();\n  private fallbackAdvanceEM = 0.5;\n  private kerningPx: (a: number, b: number) => number;\n\n  constructor(fontAsset: any) {\n    const f = fontAsset._font as {\n      info: { size: number };\n      common: { scaleW: number; scaleH: number; lineHeight: number };\n      chars: Array<{\n        id: number;\n        x: number;\n        y: number;\n        width: number;\n        height: number;\n        xoffset: number;\n        yoffset: number;\n        xadvance: number;\n      }>;\n      kernings?: Array<{ first: number; second: number; amount: number }>;\n    };\n\n    this.emPx = f.info.size;\n    this.fallbackAdvanceEM = (fontAsset._getChar?.(0xfffc)?.xadvance ?? this.emPx * 0.5) / this.emPx;\n\n    const texW = f.common.scaleW;\n    const texH = f.common.scaleH;\n    const glyphs = f.chars.filter(g => g.width > 0 && g.height > 0);\n    const N = glyphs.length;\n\n    const uv4 = new Float32Array(N * 4);\n    const plane4 = new Float32Array(N * 4);\n    const adv = new Float32Array(N);\n\n    for (let i = 0; i < N; i++) {\n      const g = glyphs[i];\n      this.gidByCode.set(g.id, i);\n      this.advanceByCode.set(g.id, g.xadvance / this.emPx);\n\n      const u = g.x / texW;\n      const vT = g.y / texH;\n      const du = g.width / texW;\n      const dv = g.height / texH;\n      uv4.set([u, vT, du, dv], i * 4);\n\n      const invEm = 1 / this.emPx;\n      const xmin = g.xoffset * invEm;\n      const xmax = (g.xoffset + g.width) * invEm;\n      const ymax = -g.yoffset * invEm;\n      const ymin = -(g.yoffset + g.height) * invEm;\n      plane4.set([xmin, ymin, xmax, ymax], i * 4);\n\n      adv[i] = g.xadvance * invEm;\n    }\n\n    const kerningFn = fontAsset._getKerning?.bind(fontAsset) as\n      | ((a: number, b: number) => number)\n      | undefined;\n    this.kerningPx = kerningFn ?? (() => 0);\n\n    this.uv4 = uv4;\n    this.plane4 = plane4;\n    this.advance = adv;\n  }\n\n  codePointToGid(cp: number): number | undefined {\n    return this.gidByCode.get(cp);\n  }\n\n  advanceEM(cp: number, gid?: number): number {\n    if (gid !== undefined) return this.advance[gid] ?? this.fallbackAdvanceEM;\n    return this.advanceByCode.get(cp) ?? this.fallbackAdvanceEM;\n  }\n\n  kerningEM(a: number, b: number): number {\n    return this.kerningPx(a, b) / this.emPx;\n  }\n}\n\nclass NameplateStreams {\n  constructor(\n    private pool: NamePool,\n    private font: FontGlyphLUT\n  ) {}\n\n  build(\n    children: Array<{\n      nameIndex: number;\n      glyphBase?: number;\n      glyphCount?: number;\n      emitHeaderDirty?: () => void;\n    }>\n  ) {\n    const gidList: number[] = [];\n    const ownerList: number[] = [];\n    const ofsList: number[] = [];\n\n    for (let owner = 0; owner < children.length; owner++) {\n      const name = this.pool.get(children[owner].nameIndex);\n\n      const localGids: number[] = [];\n      const localOfsX: number[] = [];\n      let penX_EM = 0;\n      let prevCP: number | null = null;\n\n      for (const ch of [...name]) {\n        const cp = ch.codePointAt(0)!;\n        const gid = this.font.codePointToGid(cp);\n        if (prevCP != null) penX_EM += this.font.kerningEM(prevCP, cp);\n        if (gid !== undefined) {\n          localGids.push(gid);\n          localOfsX.push(penX_EM);\n        }\n        penX_EM += this.font.advanceEM(cp, gid);\n        prevCP = cp;\n      }\n\n      const nameWidthEM = penX_EM;\n      const shift = -0.5 * nameWidthEM;\n\n      const base = gidList.length;\n      const count = localGids.length;\n\n      for (let i = 0; i < count; i++) {\n        gidList.push(localGids[i] >>> 0);\n        ownerList.push(owner >>> 0);\n        ofsList.push(localOfsX[i] + shift, 0.0);\n      }\n\n      const child: any = children[owner];\n      if (child) {\n        child.glyphBase = base >>> 0;\n        child.glyphCount = count >>> 0;\n        child.emitHeaderDirty?.();\n      }\n    }\n\n    return {\n      glyphGid: gidList,\n      glyphOwner: ownerList,\n      glyphOfs2: new Float32Array(ofsList),\n    };\n  }\n}\n","import * as BABYLON from '@babylonjs/core';\n\nimport { NameplateData } from '../extensions/NameplateData';\nimport type { ShadoInstanceContainer } from '../extensions/ShadoInstanceContainer/ShadoInstanceContainer';\n\nexport { NameplateData };\n\nexport type MSDFNameplateFontAsset = {\n  textures: BABYLON.BaseTexture[];\n  _font?: {\n    common?: { scaleW?: number; scaleH?: number };\n    distanceField?: { distanceRange?: number };\n  };\n};\n\nexport type MSDFNameplateLayerOptions = {\n  debug?: boolean;\n  debugMode?: 'none' | 'solid' | 'atlas';\n  debugColor?: [number, number, number, number];\n  alphaCutoff?: number;\n  distanceRange?: number;\n  /**\n   * Whether MSDF nameplates should be depth-tested against the 3D scene.\n   * Defaults to true so actors occlude labels while labels still draw after opaque geometry.\n   */\n  depthTest?: boolean;\n  meshName?: string;\n  renderingGroupId?: number;\n  thickness?: number;\n};\n\ntype ShadoBufferOwner = {\n  commit(): void;\n  bind(effect: BABYLON.Effect): void;\n  bindMaterial?(material: BABYLON.ShaderMaterial): void;\n  commitAndBind(effect: BABYLON.Effect): void;\n  getSchema(): {\n    name: string;\n    fields?: ReadonlyArray<{ name: string }>;\n    structArrays?: Record<string, { schema: { name: string } }>;\n  };\n};\n\nfunction getDefaultRenderingGroupId(actors: ShadoBufferOwner): number {\n  const bindings = (actors as any)._bindings;\n  const firstMesh = bindings?.keys?.().next?.().value as BABYLON.AbstractMesh | undefined;\n  return firstMesh?.renderingGroupId ?? 0;\n}\n\nfunction getShaderIO(owner: ShadoBufferOwner, engine: BABYLON.AbstractEngine) {\n  return (\n    owner.constructor as unknown as {\n      shaderIO(engine: BABYLON.AbstractEngine): { uniforms: string[]; samplers: string[] };\n    }\n  ).shaderIO(engine);\n}\n\nfunction nowMs(): number {\n  return globalThis.performance?.now?.() ?? Date.now();\n}\n\nfunction getNameplateDebugSnapshot(\n  actors: ShadoInstanceContainer<any> & ShadoBufferOwner,\n  nameplates: NameplateData & ShadoBufferOwner,\n  material: BABYLON.ShaderMaterial,\n  fontAsset: MSDFNameplateFontAsset,\n  uniforms: string[],\n  samplers: string[],\n  subMesh?: BABYLON.SubMesh\n) {\n  const effect = subMesh?.effect ?? material.getEffect();\n  const texture = fontAsset.textures[0];\n  const missingUniforms = effect?.isReady()\n    ? uniforms.filter(name => !effect.getUniform(name)).slice(0, 12)\n    : [];\n  const missingSamplers = effect?.isReady()\n    ? samplers.filter(name => !effect.getSamplers().includes(name)).slice(0, 12)\n    : [];\n\n  return {\n    glyphCount: nameplates.glyphCount(),\n    actorInstances: (actors as any).instanceCount,\n    actorVisible: (actors as any).visibleCount,\n    names: (nameplates as any).nameCount?.(),\n    materialReady: material.isReady(),\n    effectReady: effect?.isReady() ?? false,\n    fontTextureReady: texture?.isReady?.() ?? false,\n    fontAtlasSize: getFontAtlasSize(fontAsset),\n    fontDistanceRange: getFontDistanceRange(fontAsset, {}),\n    glyphSegments: {\n      glyphGid: (nameplates as any)._varSeg?.glyphGid,\n      glyphOwner: (nameplates as any)._varSeg?.glyphOwner,\n      glyphOfs2: (nameplates as any)._varSeg?.glyphOfs2,\n    },\n    missingUniforms,\n    missingSamplers,\n  };\n}\n\nfunction getFontAtlasSize(fontAsset: MSDFNameplateFontAsset): { width: number; height: number } {\n  const textureSize = fontAsset.textures[0]?.getSize?.();\n  const fontCommon = fontAsset._font?.common;\n  return {\n    width: textureSize?.width || fontCommon?.scaleW || 1,\n    height: textureSize?.height || fontCommon?.scaleH || 1,\n  };\n}\n\nfunction getFontDistanceRange(\n  fontAsset: MSDFNameplateFontAsset,\n  options: MSDFNameplateLayerOptions\n): number {\n  return options.distanceRange ?? fontAsset._font?.distanceField?.distanceRange ?? 4;\n}\n\nexport type MSDFTextShaderOptions = {\n  shaderName?: string;\n  actorStructName?: string;\n  containerStructName?: string;\n  nameplateStructName?: string;\n  useActorBillboardFlag?: boolean;\n};\n\nfunction normalizeOptions(\n  shaderNameOrOptions?: string | MSDFTextShaderOptions\n): Required<MSDFTextShaderOptions> {\n  const options =\n    typeof shaderNameOrOptions === 'string'\n      ? { shaderName: shaderNameOrOptions }\n      : (shaderNameOrOptions ?? {});\n  return {\n    shaderName: options.shaderName ?? 'shadoMsdfText',\n    actorStructName: options.actorStructName ?? 'ShadoActor',\n    containerStructName: options.containerStructName ?? 'ShadoInstanceContainer',\n    nameplateStructName: options.nameplateStructName ?? 'NameplateData',\n    useActorBillboardFlag: options.useActorBillboardFlag ?? false,\n  };\n}\n\nfunction applySchemaNames(source: string, options: Required<MSDFTextShaderOptions>): string {\n  return source\n    .replaceAll(\n      '/*SHADO_MSDF_BILLBOARD_FLAG_GLSL*/',\n      options.useActorBillboardFlag\n        ? 'float billboardFlag = ShadoInstanceContainer_fetch(ownerBase + ShadoActor_billboardFlag_OFF);'\n        : 'float billboardFlag = 1.0;'\n    )\n    .replaceAll(\n      '/*SHADO_MSDF_BILLBOARD_FLAG_WGSL*/',\n      options.useActorBillboardFlag\n        ? 'let billboardFlag = ShadoInstanceContainer_fetch(ownerBase + ShadoActor_billboardFlag_OFF);'\n        : 'let billboardFlag = 1.0;'\n    )\n    .replaceAll('ShadoActor', options.actorStructName)\n    .replaceAll('ShadoInstanceContainer', options.containerStructName)\n    .replaceAll('NameplateData', options.nameplateStructName);\n}\n\nexport const MSDF_TEXT_VERTEX_GLSL_TEMPLATE = /* glsl */ `\nprecision highp float;\n\nattribute vec2 corner;\n\nuniform mat4 worldViewProjection;\nuniform mat4 view;\nuniform float uThickness;\n\n#include<ShadoActor>\n#include<ShadoActorOffsets>\n#include<ShadoInstanceContainerStorage>\n#include<NameplateDataStorage>\n\nvarying vec2 vUV;\nvarying float vThickness;\nvarying vec4 vNameColor;\n\nvec3 shadoMsdfCamRight() { return vec3(view[0][0], view[1][0], view[2][0]); }\nvec3 shadoMsdfCamUp() { return vec3(view[0][1], view[1][1], view[2][1]); }\n\nvoid main() {\n  int glyphIndex = gl_InstanceID;\n  if (glyphIndex < 0 || glyphIndex >= NameplateData_glyphGid_count()) {\n    gl_Position = vec4(2.0, 2.0, 0.0, 1.0);\n    vNameColor = vec4(0.0);\n    vUV = vec2(0.0);\n    vThickness = 0.0;\n    return;\n  }\n\n  int gid = int(NameplateData_glyphGid_get(glyphIndex));\n  vec2 ofsEM = NameplateData_glyphOfs2_get(glyphIndex);\n  int owner = int(NameplateData_glyphOwner_get(glyphIndex));\n  if (gid < 0 || gid >= NameplateData_glyphUv4_count() || owner < 0 || owner >= uShadoInstanceContainer_instancesCount) {\n    gl_Position = vec4(2.0, 2.0, 0.0, 1.0);\n    vNameColor = vec4(0.0);\n    vUV = vec2(0.0);\n    vThickness = 0.0;\n    return;\n  }\n\n  int ownerBase = uShadoInstanceContainer_instancesBase + owner * uShadoInstanceContainer_instancesStride;\n  int ownerVisible = int(ShadoInstanceContainer_fetch(ownerBase + ShadoActor_visibleFlag_OFF));\n  if (ownerVisible == 0) {\n    gl_Position = vec4(2.0, 2.0, 0.0, 1.0);\n    vNameColor = vec4(0.0);\n    vUV = vec2(0.0);\n    vThickness = 0.0;\n    return;\n  }\n\n  vec4 translation = ShadoInstanceContainer_fetch4(ownerBase + ShadoActor_translation_OFF);\n  float worldPerEM = ShadoInstanceContainer_fetch(ownerBase + ShadoActor_nameWorldPerEM_OFF);\n  float nameLiftWorld = ShadoInstanceContainer_fetch(ownerBase + ShadoActor_nameLiftWorld_OFF);\n  /*SHADO_MSDF_BILLBOARD_FLAG_GLSL*/\n  vNameColor = ShadoInstanceContainer_fetch4(ownerBase + ShadoActor_nameplateColor_OFF);\n\n  vec4 planeEM = NameplateData_glyphPlane4_get(gid);\n  vec4 uv = NameplateData_glyphUv4_get(gid);\n\n  bool invalid =\n    abs(translation.x) > 10000.0 || abs(translation.y) > 10000.0 || abs(translation.z) > 10000.0 ||\n    translation.w <= 0.0 || translation.w > 1000.0 ||\n    worldPerEM <= 0.0 || worldPerEM > 10.0 ||\n    abs(nameLiftWorld) > 1000.0 ||\n    abs(ofsEM.x) > 128.0 || abs(ofsEM.y) > 128.0 ||\n    abs(planeEM.x) > 8.0 || abs(planeEM.y) > 8.0 || abs(planeEM.z) > 8.0 || abs(planeEM.w) > 8.0 ||\n    uv.z <= 0.0 || uv.w <= 0.0 || uv.x < -0.001 || uv.y < -0.001 || uv.x + uv.z > 1.001 || uv.y + uv.w > 1.001 ||\n    vNameColor.a <= 0.0;\n  if (invalid) {\n    gl_Position = vec4(2.0, 2.0, 0.0, 1.0);\n    vNameColor = vec4(0.0);\n    vUV = vec2(0.0);\n    vThickness = 0.0;\n    return;\n  }\n\n  float worldScale = clamp(worldPerEM * translation.w, 0.001, 2.0);\n  vec2 planePos = mix(planeEM.xy, planeEM.zw, corner) * worldScale;\n  float billboardMix = step(0.5, billboardFlag);\n  vec3 labelRight = mix(vec3(1.0, 0.0, 0.0), shadoMsdfCamRight(), billboardMix);\n  vec3 labelUp = mix(vec3(0.0, 0.0, 1.0), shadoMsdfCamUp(), billboardMix);\n\n  vec3 worldPos = translation.xyz\n    + labelRight * (ofsEM.x * worldScale + planePos.x)\n    + labelUp * (translation.w + nameLiftWorld * translation.w + planePos.y + ofsEM.y * worldScale);\n\n  vUV = vec2(uv.x + corner.x * uv.z, uv.y + (1.0 - corner.y) * uv.w);\n  vThickness = uThickness;\n  gl_Position = worldViewProjection * vec4(worldPos, 1.0);\n}\n`;\n\nexport const MSDF_TEXT_FRAGMENT_GLSL_TEMPLATE = /* glsl */ `\nprecision highp float;\n\nuniform sampler2D uFontAtlas;\nuniform vec2 uFontAtlasSize;\nuniform float uDistanceRange;\nuniform float uAlphaCutoff;\nuniform int uDebugMode;\nuniform vec4 uDebugColor;\n\nvarying vec2 vUV;\nvarying float vThickness;\nvarying vec4 vNameColor;\n\nfloat shadoMsdfMedian(float r, float g, float b) {\n  return max(min(r, g), min(max(r, g), b));\n}\n\nvoid main() {\n  if (uDebugMode == 1) {\n    gl_FragColor = vec4(uDebugColor.rgb, uDebugColor.a);\n    return;\n  }\n\n  vec4 atlasSample = texture2D(uFontAtlas, vUV);\n  vec3 msdf = atlasSample.rgb;\n  if (uDebugMode == 2) {\n    gl_FragColor = vec4(msdf, 1.0);\n    return;\n  }\n\n  float sd = shadoMsdfMedian(msdf.r, msdf.g, msdf.b) - 0.5 + vThickness;\n  float alpha = clamp(sd / max(fwidth(sd), 0.0001) + 0.5, 0.0, 1.0) * atlasSample.a;\n  if (alpha <= uAlphaCutoff) discard;\n  gl_FragColor = vec4(vNameColor.rgb, alpha * vNameColor.a);\n}\n`;\n\nexport const MSDF_TEXT_VERTEX_WGSL_TEMPLATE = /* wgsl */ `\nattribute position : vec3f;\nattribute corner : vec2f;\nvarying vUV : vec2f;\nvarying vThickness : f32;\nvarying vNameColor : vec4f;\nuniform view: mat4x4f;\nuniform worldViewProjection: mat4x4f;\n\n#include<sceneUboDeclaration>\n#include<ShadoActor>\n#include<ShadoActorOffsets>\n#include<ShadoInstanceContainerStorage>\n#include<NameplateDataStorage>\n\nfn shadoMsdfCamRight(view: mat4x4f) -> vec3f { return vec3f(view[0].x, view[1].x, view[2].x); }\nfn shadoMsdfCamUp(view: mat4x4f) -> vec3f { return vec3f(view[0].y, view[1].y, view[2].y); }\n\n@vertex\nfn main(input: VertexInputs) -> FragmentInputs {\n  let glyphIndex = i32(vertexInputs.instanceIndex);\n  if (glyphIndex < 0 || glyphIndex >= NameplateData_glyphGid_count()) {\n    vertexOutputs.position = vec4f(2.0, 2.0, 0.0, 1.0);\n    vertexOutputs.vNameColor = vec4f(0.0);\n    vertexOutputs.vUV = vec2f(0.0);\n    vertexOutputs.vThickness = 0.0;\n    return vertexOutputs;\n  }\n\n  let gid = i32(NameplateData_glyphGid_get(glyphIndex));\n  let ofsEM = NameplateData_glyphOfs2_get(glyphIndex);\n  let owner = i32(NameplateData_glyphOwner_get(glyphIndex));\n  if (gid < 0 || gid >= NameplateData_glyphUv4_count() || owner < 0 || owner >= uShadoInstanceContainer_instancesCount()) {\n    vertexOutputs.position = vec4f(2.0, 2.0, 0.0, 1.0);\n    vertexOutputs.vNameColor = vec4f(0.0);\n    vertexOutputs.vUV = vec2f(0.0);\n    vertexOutputs.vThickness = 0.0;\n    return vertexOutputs;\n  }\n\n  let ownerBase = uShadoInstanceContainer_instancesBase() + owner * uShadoInstanceContainer_instancesStride();\n  let ownerVisible = i32(ShadoInstanceContainer_fetch(ownerBase + ShadoActor_visibleFlag_OFF));\n  if (ownerVisible == 0) {\n    vertexOutputs.position = vec4f(2.0, 2.0, 0.0, 1.0);\n    vertexOutputs.vNameColor = vec4f(0.0);\n    vertexOutputs.vUV = vec2f(0.0);\n    vertexOutputs.vThickness = 0.0;\n    return vertexOutputs;\n  }\n\n  let translation = ShadoInstanceContainer_fetch4(ownerBase + ShadoActor_translation_OFF);\n  let worldPerEM = ShadoInstanceContainer_fetch(ownerBase + ShadoActor_nameWorldPerEM_OFF);\n  let nameLiftWorld = ShadoInstanceContainer_fetch(ownerBase + ShadoActor_nameLiftWorld_OFF);\n  /*SHADO_MSDF_BILLBOARD_FLAG_WGSL*/\n  vertexOutputs.vNameColor = ShadoInstanceContainer_fetch4(ownerBase + ShadoActor_nameplateColor_OFF);\n\n  let planeEM = NameplateData_glyphPlane4_get(gid);\n  let uv = NameplateData_glyphUv4_get(gid);\n\n  if (\n    abs(translation.x) > 10000.0 || abs(translation.y) > 10000.0 || abs(translation.z) > 10000.0 ||\n    translation.w <= 0.0 || translation.w > 1000.0 ||\n    worldPerEM <= 0.0 || worldPerEM > 10.0 ||\n    abs(nameLiftWorld) > 1000.0 ||\n    abs(ofsEM.x) > 128.0 || abs(ofsEM.y) > 128.0 ||\n    abs(planeEM.x) > 8.0 || abs(planeEM.y) > 8.0 || abs(planeEM.z) > 8.0 || abs(planeEM.w) > 8.0 ||\n    uv.z <= 0.0 || uv.w <= 0.0 || uv.x < -0.001 || uv.y < -0.001 || uv.x + uv.z > 1.001 || uv.y + uv.w > 1.001 ||\n    vertexOutputs.vNameColor.a <= 0.0\n  ) {\n    vertexOutputs.position = vec4f(2.0, 2.0, 0.0, 1.0);\n    vertexOutputs.vNameColor = vec4f(0.0);\n    vertexOutputs.vUV = vec2f(0.0);\n    vertexOutputs.vThickness = 0.0;\n    return vertexOutputs;\n  }\n\n  let worldScale = clamp(worldPerEM * translation.w, 0.001, 2.0);\n  let planePos = mix(planeEM.xy, planeEM.zw, vertexInputs.corner) * worldScale;\n  let billboardMix = step(0.5, billboardFlag);\n  let labelRight = mix(vec3f(1.0, 0.0, 0.0), shadoMsdfCamRight(uniforms.view), billboardMix);\n  let labelUp = mix(vec3f(0.0, 0.0, 1.0), shadoMsdfCamUp(uniforms.view), billboardMix);\n\n  let worldPos = translation.xyz\n    + labelRight * (ofsEM.x * worldScale + planePos.x)\n    + labelUp * (translation.w + nameLiftWorld * translation.w + planePos.y + ofsEM.y * worldScale);\n\n  vertexOutputs.vUV = vec2f(uv.x + vertexInputs.corner.x * uv.z, uv.y + (1.0 - vertexInputs.corner.y) * uv.w);\n  vertexOutputs.vThickness = 0.0;\n  vertexOutputs.position = uniforms.worldViewProjection * vec4f(worldPos, 1.0);\n}\n`;\n\nexport const MSDF_TEXT_FRAGMENT_WGSL_TEMPLATE = /* wgsl */ `\nvar uFontAtlasSampler : sampler;\nvar uFontAtlas : texture_2d<f32>;\nuniform uFontAtlasSize: vec2f;\nuniform uDistanceRange: f32;\nuniform uAlphaCutoff: f32;\nuniform uDebugMode: i32;\nuniform uDebugColor: vec4f;\n\nfn shadoMsdfMedian(a: f32, b: f32, c: f32) -> f32 {\n  return max(min(a, b), min(max(a, b), c));\n}\n\n@fragment\nfn main(input: FragmentInputs) -> FragmentOutputs {\n  if (uniforms.uDebugMode == 1) {\n    fragmentOutputs.color = uniforms.uDebugColor;\n    return fragmentOutputs;\n  }\n\n  let atlasSample = textureSample(uFontAtlas, uFontAtlasSampler, fragmentInputs.vUV);\n  let msdf = atlasSample.rgb;\n  if (uniforms.uDebugMode == 2) {\n    fragmentOutputs.color = vec4f(msdf, 1.0);\n    return fragmentOutputs;\n  }\n\n  let sd = shadoMsdfMedian(msdf.r, msdf.g, msdf.b) - 0.5 + fragmentInputs.vThickness;\n  let alpha = clamp(sd / max(fwidth(sd), 0.0001) + 0.5, 0.0, 1.0) * atlasSample.a;\n  if (alpha <= uniforms.uAlphaCutoff) { discard; }\n  fragmentOutputs.color = vec4f(fragmentInputs.vNameColor.rgb, alpha * fragmentInputs.vNameColor.a);\n}\n`;\n\nexport const MSDF_TEXT_VERTEX_GLSL = applySchemaNames(\n  MSDF_TEXT_VERTEX_GLSL_TEMPLATE,\n  normalizeOptions()\n);\nexport const MSDF_TEXT_FRAGMENT_GLSL = MSDF_TEXT_FRAGMENT_GLSL_TEMPLATE;\nexport const MSDF_TEXT_VERTEX_WGSL = applySchemaNames(\n  MSDF_TEXT_VERTEX_WGSL_TEMPLATE,\n  normalizeOptions()\n);\nexport const MSDF_TEXT_FRAGMENT_WGSL = MSDF_TEXT_FRAGMENT_WGSL_TEMPLATE;\n\nexport function makeMSDFTextShaders(options: MSDFTextShaderOptions = {}): {\n  vertexGLSL: string;\n  fragmentGLSL: string;\n  vertexWGSL: string;\n  fragmentWGSL: string;\n} {\n  const normalized = normalizeOptions(options);\n  return {\n    vertexGLSL: applySchemaNames(MSDF_TEXT_VERTEX_GLSL_TEMPLATE, normalized),\n    fragmentGLSL: applySchemaNames(MSDF_TEXT_FRAGMENT_GLSL_TEMPLATE, normalized),\n    vertexWGSL: applySchemaNames(MSDF_TEXT_VERTEX_WGSL_TEMPLATE, normalized),\n    fragmentWGSL: applySchemaNames(MSDF_TEXT_FRAGMENT_WGSL_TEMPLATE, normalized),\n  };\n}\n\nexport function registerMSDFTextShaders(\n  BABYLON: typeof import('@babylonjs/core'),\n  shaderNameOrOptions: string | MSDFTextShaderOptions = 'shadoMsdfText'\n): { vertex: string; fragment: string } {\n  const options = normalizeOptions(shaderNameOrOptions);\n  const shaderName = options.shaderName;\n  const shaders = makeMSDFTextShaders(options);\n  const vertexKey = `${shaderName}VertexShader`;\n  const fragmentKey = `${shaderName}FragmentShader`;\n  (BABYLON.Effect as any).ShadersStore[vertexKey] = shaders.vertexGLSL;\n  (BABYLON.Effect as any).ShadersStore[fragmentKey] = shaders.fragmentGLSL;\n  const shaderStore = (BABYLON as any).ShaderStore;\n  if (shaderStore?.ShadersStoreWGSL) {\n    shaderStore.ShadersStoreWGSL[vertexKey] = shaders.vertexWGSL;\n    shaderStore.ShadersStoreWGSL[fragmentKey] = shaders.fragmentWGSL;\n  }\n  return { vertex: shaderName, fragment: shaderName };\n}\n\nexport function createMSDFNameplateLayer(\n  scene: BABYLON.Scene,\n  actors: ShadoInstanceContainer<any> & ShadoBufferOwner,\n  nameplates: NameplateData & ShadoBufferOwner,\n  fontAsset: MSDFNameplateFontAsset,\n  options: MSDFNameplateLayerOptions = {}\n): BABYLON.Mesh {\n  const engine = scene.getEngine();\n  const actorSchema = actors.getSchema().structArrays?.instances?.schema;\n  const actorStructName = actorSchema?.name ?? 'ShadoActor';\n  const useActorBillboardFlag =\n    actorSchema?.fields?.some(field => field.name === 'billboardFlag') ?? false;\n  const containerStructName = actors.getSchema().name;\n  const nameplateStructName = nameplates.getSchema().name;\n  const shaderName = `shadoMsdfText_${containerStructName}_${actorStructName}_${nameplateStructName}`;\n  const shader = registerMSDFTextShaders(BABYLON, {\n    shaderName,\n    actorStructName,\n    containerStructName,\n    nameplateStructName,\n    useActorBillboardFlag,\n  });\n  const actorShaderIO = getShaderIO(actors, engine);\n  const nameplateShaderIO = getShaderIO(nameplates, engine);\n  const uniforms = Array.from(\n    new Set([\n      'worldViewProjection',\n      'view',\n      'uThickness',\n      'uAlphaCutoff',\n      'uFontAtlasSize',\n      'uDistanceRange',\n      'uDebugMode',\n      'uDebugColor',\n      ...actorShaderIO.uniforms,\n      ...nameplateShaderIO.uniforms,\n    ])\n  );\n  const samplers = Array.from(\n    new Set(['uFontAtlas', ...actorShaderIO.samplers, ...nameplateShaderIO.samplers])\n  );\n  const mesh = new BABYLON.Mesh(\n    options.meshName ?? `msdf-nameplates-${scene.meshes.length}`,\n    scene\n  );\n\n  const vertexData = new BABYLON.VertexData();\n  vertexData.positions = [\n    0, 0, 0,\n    1, 0, 0,\n    0, 1, 0,\n    1, 1, 0,\n  ];\n  vertexData.indices = [0, 1, 2, 2, 1, 3];\n  vertexData.applyToMesh(mesh, false);\n  mesh.setVerticesData('corner', [0, 0, 1, 0, 0, 1, 1, 1], false, 2);\n  mesh.alwaysSelectAsActiveMesh = true;\n  mesh.doNotSyncBoundingInfo = true;\n  mesh.isPickable = false;\n  mesh.renderingGroupId = options.renderingGroupId ?? getDefaultRenderingGroupId(actors);\n  mesh.isVisible = false;\n\n  const material = new BABYLON.ShaderMaterial('shado-msdf-nameplates', scene, shader, {\n    attributes: ['position', 'corner'],\n    uniforms,\n    samplers,\n    shaderLanguage: BABYLON.ShaderLanguage.GLSL,\n  });\n  material.backFaceCulling = false;\n  material.alphaMode = BABYLON.Engine.ALPHA_COMBINE;\n  material.transparencyMode = BABYLON.Material.MATERIAL_ALPHABLEND;\n  material.disableDepthWrite = true;\n  material.forceDepthWrite = false;\n  material.needDepthPrePass = false;\n  material.needAlphaBlending = () => true;\n  if (options.debug) {\n    material.onCompiled = effect => {\n      console.debug('[shado/msdf] material compiled', {\n        mesh: mesh.name,\n        shaderName,\n        uniformsInEffect: effect.getUniformNames(),\n        samplersInEffect: effect.getSamplers(),\n      });\n    };\n    material.onError = (effect, errors) => {\n      console.warn('[shado/msdf] material compile failed', {\n        mesh: mesh.name,\n        shaderName,\n        errors,\n        vertex: effect?._vertexSourceCode,\n        fragment: effect?._fragmentSourceCode,\n      });\n    };\n  }\n  material.setTexture('uFontAtlas', fontAsset.textures[0]);\n  mesh.material = material;\n\n  const debugState = {\n    mesh,\n    material,\n    shaderName,\n    actorSchema: actors.getSchema(),\n    nameplateSchema: nameplates.getSchema(),\n    actorShaderIO,\n    nameplateShaderIO,\n    uniforms,\n    samplers,\n  };\n  if (options.debug) {\n    ((globalThis as any).__shadoMsdfNameplates ??= []).push(debugState);\n    console.debug('[shado/msdf] layer created', {\n      mesh: mesh.name,\n      shaderName,\n      actorStructName,\n      containerStructName,\n      nameplateStructName,\n      renderingGroupId: mesh.renderingGroupId,\n      uniforms,\n      samplers,\n      snapshot: getNameplateDebugSnapshot(\n        actors,\n        nameplates,\n        material,\n        fontAsset,\n        uniforms,\n        samplers\n      ),\n    });\n  }\n\n  let lastSkipReason = '';\n  let lastDebugAt = 0;\n  let loggedFirstDraw = false;\n  const logRenderState = (reason: string) => {\n    if (!options.debug) return;\n    const now = nowMs();\n    if (reason === lastSkipReason && now - lastDebugAt < 2000) return;\n    lastSkipReason = reason;\n    lastDebugAt = now;\n    console.debug('[shado/msdf] render state', {\n      mesh: mesh.name,\n      reason,\n      snapshot: getNameplateDebugSnapshot(\n        actors,\n        nameplates,\n        material,\n        fontAsset,\n        uniforms,\n        samplers,\n        mesh.subMeshes[0]\n      ),\n    });\n  };\n\n  const updateInstanceCount = () => {\n    const glyphCount = nameplates.glyphCount();\n    if (glyphCount <= 0) {\n      mesh.forcedInstanceCount = 0;\n      mesh.isVisible = false;\n      logRenderState('no glyphs');\n      return;\n    }\n\n    mesh.isVisible = true;\n    mesh.forcedInstanceCount = 0;\n  };\n\n  const beforeRenderObserver = scene.onBeforeRenderObservable.add(updateInstanceCount);\n\n  mesh.render = (subMesh: any, enableAlphaMode: boolean): any => {\n    const glyphCount = nameplates.glyphCount();\n    if (glyphCount <= 0) {\n      logRenderState('no glyphs');\n      return mesh;\n    }\n\n    actors.commit();\n    nameplates.commit();\n    actors.bindMaterial?.(material);\n    nameplates.bindMaterial?.(material);\n    material.setTexture('uFontAtlas', fontAsset.textures[0]);\n\n    if (!material.isReadyForSubMesh(mesh, subMesh)) {\n      logRenderState('material not ready');\n      return mesh;\n    }\n\n    const effect = subMesh?.effect ?? material.getEffect();\n    if (!effect?.isReady()) {\n      logRenderState('effect not ready');\n      return mesh;\n    }\n\n    const drawWrapper = (material as any)._storeEffectOnSubMeshes\n      ? subMesh._drawWrapper\n      : (material as any)._getDrawWrapper();\n    if (!drawWrapper) {\n      logRenderState('missing draw wrapper');\n      return mesh;\n    }\n    (material as any)._preBind(drawWrapper, (mesh as any)._internalMeshDataInfo?._effectiveSideOrientation);\n\n    effect.setMatrix('worldViewProjection', mesh.getWorldMatrix().multiply(scene.getTransformMatrix()));\n    effect.setMatrix('view', scene.getViewMatrix());\n    effect.setFloat('uThickness', options.thickness ?? 0.0);\n    effect.setFloat('uAlphaCutoff', options.alphaCutoff ?? 0.001);\n    const fontTexture = fontAsset.textures[0];\n    const fontAtlasSize = getFontAtlasSize(fontAsset);\n    effect.setFloat2('uFontAtlasSize', fontAtlasSize.width, fontAtlasSize.height);\n    effect.setFloat('uDistanceRange', getFontDistanceRange(fontAsset, options));\n    effect.setInt(\n      'uDebugMode',\n      options.debugMode === 'solid' ? 1 : options.debugMode === 'atlas' ? 2 : 0\n    );\n    const debugColor = options.debugColor ?? [1, 0, 1, 0.35];\n    effect.setFloat4(\n      'uDebugColor',\n      debugColor[0],\n      debugColor[1],\n      debugColor[2],\n      debugColor[3]\n    );\n\n    mesh._bind(subMesh, effect, BABYLON.Material.TriangleFillMode);\n    if (enableAlphaMode && material.needAlphaBlending()) {\n      engine.setAlphaMode(material.alphaMode);\n    }\n\n    effect.setTexture('uFontAtlas', fontTexture);\n    actors.bind(effect);\n    nameplates.bind(effect);\n\n    const restoreDepthState = {\n      depthBuffer: engine.getDepthBuffer(),\n      depthWrite: engine.getDepthWrite(),\n    };\n    engine.setDepthBuffer(options.depthTest ?? true);\n    engine.setDepthWrite(false);\n\n    (mesh as any)._draw(subMesh, BABYLON.Material.TriangleFillMode, glyphCount);\n    material.unbind();\n    engine.setDepthBuffer(restoreDepthState.depthBuffer);\n    engine.setDepthWrite(restoreDepthState.depthWrite);\n\n    if (options.debug && subMesh && !loggedFirstDraw) {\n      loggedFirstDraw = true;\n      console.debug('[shado/msdf] first instanced draw ready', {\n        mesh: mesh.name,\n        glyphCount,\n        indexStart: subMesh.indexStart,\n        indexCount: subMesh.indexCount,\n        forcedInstanceCount: mesh.forcedInstanceCount,\n        alphaMode: engine.getAlphaMode(),\n        depthTest: engine.getDepthBuffer(),\n        depthWrite: engine.getDepthWrite(),\n        snapshot: getNameplateDebugSnapshot(\n          actors,\n          nameplates,\n          material,\n          fontAsset,\n          uniforms,\n          samplers,\n          subMesh\n        ),\n      });\n    }\n\n    return mesh;\n  };\n\n  mesh.onDisposeObservable.add(() => {\n    scene.onBeforeRenderObservable.remove(beforeRenderObserver);\n    material.dispose();\n  });\n\n  return mesh;\n}\n\nexport const createMsdfNameplateLayer = createMSDFNameplateLayer;\n"]}