@carbonenginejs/runtime-resource 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/NOTICE +5 -3
  2. package/README.md +1 -1
  3. package/dist/CjsResMan.js +1 -1
  4. package/dist/CjsResMan.js.map +1 -1
  5. package/dist/CjsResource.js +2 -2
  6. package/dist/CjsResource.js.map +1 -1
  7. package/dist/CjsResourceSource.js +9 -0
  8. package/dist/CjsResourceSource.js.map +1 -1
  9. package/dist/format/CjsBlueReader.js +2 -2
  10. package/dist/format/CjsBlueReader.js.map +1 -1
  11. package/dist/format/CjsFormat.js +10 -5
  12. package/dist/format/CjsFormat.js.map +1 -1
  13. package/dist/format/CjsResourceProbe.js +2 -2
  14. package/dist/format/CjsResourceProbe.js.map +1 -1
  15. package/dist/formats/black/core/CjsBlackBinaryReader.js +4 -0
  16. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
  17. package/dist/formats/black/core/CjsBlackPropertyReaders.js +6 -1
  18. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
  19. package/dist/formats/black/core/CjsBlackReader.js +2 -2
  20. package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
  21. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +4 -0
  22. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
  23. package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -0
  24. package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js.map +1 -0
  25. package/dist/formats/black/core/blackDefinitions.js +1 -1
  26. package/dist/formats/black/core/blackDefinitions.js.map +1 -1
  27. package/dist/formats/black/core/blackSchema.js +1 -1
  28. package/dist/formats/bnk/core/musicNodes.js +4 -0
  29. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  30. package/dist/formats/cmf/core/binary.js +5 -0
  31. package/dist/formats/cmf/core/binary.js.map +1 -1
  32. package/dist/formats/dds/CjsDdsFormat.js +7 -0
  33. package/dist/formats/dds/CjsDdsFormat.js.map +1 -1
  34. package/dist/formats/dds/core/bc7.js +7 -2
  35. package/dist/formats/dds/core/bc7.js.map +1 -1
  36. package/dist/formats/fbx/core/helpers.js +11 -1
  37. package/dist/formats/fbx/core/helpers.js.map +1 -1
  38. package/dist/formats/flac/CjsFlacFormat.js +6 -0
  39. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  40. package/dist/formats/gif/CjsGifFormat.js +5 -0
  41. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  42. package/dist/formats/gltf/core/helpers.js +3 -3
  43. package/dist/formats/gltf/core/helpers.js.map +1 -1
  44. package/dist/formats/gr2/core/tangents.js +9 -9
  45. package/dist/formats/gr2/core/tangents.js.map +1 -1
  46. package/dist/formats/index.js +4 -4
  47. package/dist/formats/jpeg/CjsJpegFormat.js +6 -0
  48. package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -1
  49. package/dist/formats/jpeg/core/jpeg.js +10 -0
  50. package/dist/formats/jpeg/core/jpeg.js.map +1 -1
  51. package/dist/formats/mp3/CjsMp3Format.js +5 -0
  52. package/dist/formats/mp3/CjsMp3Format.js.map +1 -1
  53. package/dist/formats/mp4/CjsMp4Format.js +6 -0
  54. package/dist/formats/mp4/CjsMp4Format.js.map +1 -1
  55. package/dist/formats/obj/core/helpers.js +2 -2
  56. package/dist/formats/obj/core/helpers.js.map +1 -1
  57. package/dist/formats/ogg/CjsOggFormat.js +6 -0
  58. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  59. package/dist/formats/ogg/core/vorbis.js +5 -0
  60. package/dist/formats/ogg/core/vorbis.js.map +1 -1
  61. package/dist/formats/png/CjsPngFormat.js +6 -0
  62. package/dist/formats/png/CjsPngFormat.js.map +1 -1
  63. package/dist/formats/red/CjsRedFormat.js +1 -1
  64. package/dist/formats/red/CjsRedFormat.js.map +1 -1
  65. package/dist/formats/red/core/blackDefinitions.js +1 -1
  66. package/dist/formats/stl/core/stl.js +7 -2
  67. package/dist/formats/stl/core/stl.js.map +1 -1
  68. package/dist/formats/tga/CjsTgaFormat.js +5 -0
  69. package/dist/formats/tga/CjsTgaFormat.js.map +1 -1
  70. package/dist/formats/wav/CjsWavFormat.js +6 -0
  71. package/dist/formats/wav/CjsWavFormat.js.map +1 -1
  72. package/dist/formats/webm/CjsWebmFormat.js +6 -0
  73. package/dist/formats/webm/CjsWebmFormat.js.map +1 -1
  74. package/dist/formats/webp/CjsWebpFormat.js +5 -0
  75. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  76. package/dist/formats/wem/CjsWemFormat.js +3 -2
  77. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  78. package/dist/formats/yaml/CjsYamlFormat.js +6 -0
  79. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  80. package/dist/formats/yaml/core/CjsYamlReader.js +6 -0
  81. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  82. package/dist/index.js +1 -1
  83. package/dist/resources/AudioGeometryResData.js +3 -3
  84. package/dist/resources/AudioGeometryResData.js.map +1 -1
  85. package/dist/resources/GStateBindingCallbackData.js +2 -2
  86. package/dist/resources/GStateBindingCallbackData.js.map +1 -1
  87. package/dist/resources/MeshDecalData.js +2 -2
  88. package/dist/resources/MeshDecalData.js.map +1 -1
  89. package/dist/resources/MeshDecalLodData.js +2 -2
  90. package/dist/resources/MeshDecalLodData.js.map +1 -1
  91. package/dist/resources/Tr2EffectRes.js +1 -1
  92. package/dist/resources/Tr2EffectRes.js.map +1 -1
  93. package/dist/resources/Tr2GrannyIntersectionResult.js +4 -4
  94. package/dist/resources/Tr2GrannyIntersectionResult.js.map +1 -1
  95. package/dist/resources/Tr2GrannyStateRes.js +1 -1
  96. package/dist/resources/Tr2GrannyStateRes.js.map +1 -1
  97. package/dist/resources/Tr2ImageRes.js +1 -1
  98. package/dist/resources/Tr2ImageRes.js.map +1 -1
  99. package/dist/resources/Tr2LightProfileRes.js +1 -1
  100. package/dist/resources/Tr2LightProfileRes.js.map +1 -1
  101. package/dist/resources/Tr2MaterialArea.js +2 -2
  102. package/dist/resources/Tr2MaterialArea.js.map +1 -1
  103. package/dist/resources/Tr2MaterialMesh.js +2 -2
  104. package/dist/resources/Tr2MaterialMesh.js.map +1 -1
  105. package/dist/resources/Tr2MaterialRes.js +2 -2
  106. package/dist/resources/Tr2MaterialRes.js.map +1 -1
  107. package/dist/resources/Tr2ShaderPermutation.js +2 -2
  108. package/dist/resources/Tr2ShaderPermutation.js.map +1 -1
  109. package/dist/resources/Tr2TextureLodManager.js +2 -2
  110. package/dist/resources/Tr2TextureLodManager.js.map +1 -1
  111. package/dist/resources/Tr2TextureLodUpdateRequest.js +2 -2
  112. package/dist/resources/Tr2TextureLodUpdateRequest.js.map +1 -1
  113. package/dist/resources/Tr2TexturePackChannel.js +2 -2
  114. package/dist/resources/Tr2TexturePackChannel.js.map +1 -1
  115. package/dist/resources/Tr2TexturePipeline.js +2 -2
  116. package/dist/resources/Tr2TexturePipeline.js.map +1 -1
  117. package/dist/resources/Tr2TexturePipelineParams.js +2 -2
  118. package/dist/resources/Tr2TexturePipelineParams.js.map +1 -1
  119. package/dist/resources/Tr2TexturePipelineStepCompress.js +2 -2
  120. package/dist/resources/Tr2TexturePipelineStepCompress.js.map +1 -1
  121. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js +2 -2
  122. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +1 -1
  123. package/dist/resources/Tr2TexturePipelineStepLimitSize.js +2 -2
  124. package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -1
  125. package/dist/resources/Tr2TexturePipelineStepLoad.js +2 -2
  126. package/dist/resources/Tr2TexturePipelineStepLoad.js.map +1 -1
  127. package/dist/resources/Tr2TexturePipelineStepPack.js +2 -2
  128. package/dist/resources/Tr2TexturePipelineStepPack.js.map +1 -1
  129. package/dist/resources/TriGeometryRes.js +1 -1
  130. package/dist/resources/TriGeometryRes.js.map +1 -1
  131. package/dist/resources/TriGeometryResAreaData.js +3 -3
  132. package/dist/resources/TriGeometryResAreaData.js.map +1 -1
  133. package/dist/resources/TriGeometryResJointData.js +3 -3
  134. package/dist/resources/TriGeometryResJointData.js.map +1 -1
  135. package/dist/resources/TriGeometryResLodData.js +2 -2
  136. package/dist/resources/TriGeometryResLodData.js.map +1 -1
  137. package/dist/resources/TriGeometryResMeshData.js +4 -4
  138. package/dist/resources/TriGeometryResMeshData.js.map +1 -1
  139. package/dist/resources/TriGeometryResSkeletonData.js +2 -2
  140. package/dist/resources/TriGeometryResSkeletonData.js.map +1 -1
  141. package/dist/resources/TriGrannyRes.js +1 -1
  142. package/dist/resources/TriGrannyRes.js.map +1 -1
  143. package/dist/resources/TriJointBinding.js +3 -3
  144. package/dist/resources/TriJointBinding.js.map +1 -1
  145. package/dist/resources/TriMorphTargetGeometryConstants.js +2 -2
  146. package/dist/resources/TriMorphTargetGeometryConstants.js.map +1 -1
  147. package/dist/resources/TriRtGeometryConstants.js +2 -2
  148. package/dist/resources/TriRtGeometryConstants.js.map +1 -1
  149. package/dist/resources/TriTextureRes.js +1 -1
  150. package/dist/resources/TriTextureRes.js.map +1 -1
  151. package/dist/resources/texturePipelineBehavior.js +2 -2
  152. package/dist/resources/texturePipelineBehavior.js.map +1 -1
  153. package/dist/texture/CjsTextureArrayRes.js +1 -1
  154. package/dist/texture/CjsTextureArrayRes.js.map +1 -1
  155. package/dist/texture/CjsTextureParameterProxy.js +1 -1
  156. package/dist/texture/CjsTextureParameterProxy.js.map +1 -1
  157. package/docs/README.md +6 -2
  158. package/docs/architecture.md +1 -1
  159. package/docs/formats/README.md +7 -6
  160. package/docs/formats/gr2.md +161 -0
  161. package/docs/reference/classes/README.md +33 -0
  162. package/docs/reference/classes/core.md +106 -0
  163. package/docs/reference/classes/dropped.md +46 -0
  164. package/docs/reference/classes/formats.md +522 -0
  165. package/docs/reference/classes/resources.md +346 -0
  166. package/docs/reference/classes/texture.md +26 -0
  167. package/docs/reference/events.md +1 -1
  168. package/format-notices/black/NOTICE +1 -1
  169. package/package.json +2 -4
  170. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +0 -4
  171. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"texturePipelineBehavior.js","sources":["../../../src/resources/texturePipelineBehavior.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipeline.cpp\r\n// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLoad.cpp\r\n// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLimitSize.cpp\r\n// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepCompress.cpp\r\n// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepPack.cpp\r\nimport { validateRgbaPayload } from \"../format/payloadContract.js\";\r\nimport { PixelFormat as PayloadPixelFormat } from \"@carbonenginejs/runtime-const/graphics\";\r\nimport { PixelFormat as CarbonPixelFormat } from \"@carbonenginejs/runtime-const/render-context\";\r\n\r\nconst STEP_LOAD = \"Tr2TexturePipelineStepLoad\";\r\nconst STEP_LIMIT_SIZE = \"Tr2TexturePipelineStepLimitSize\";\r\nconst STEP_COMPRESS = \"Tr2TexturePipelineStepCompress\";\r\nconst STEP_PACK = \"Tr2TexturePipelineStepPack\";\r\nconst PACK_FORMATS = new Set([\r\n CarbonPixelFormat.PIXEL_FORMAT_R8_UNORM,\r\n CarbonPixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM,\r\n CarbonPixelFormat.PIXEL_FORMAT_B8G8R8X8_UNORM\r\n]);\r\n\r\n/**\r\n * Collect Carbon texture-pipeline dependencies in std::set-equivalent order.\r\n *\r\n * @param {object[]} steps Pipeline steps.\r\n * @returns {string[]} Sorted unique resource paths.\r\n */\r\nexport function GetTexturePipelineDependencies(steps)\r\n{\r\n const dependencies = new Set();\r\n for (const step of AssertSteps(steps))\r\n {\r\n const name = StepName(step);\r\n if (name === STEP_LOAD)\r\n {\r\n AddDependency(dependencies, step.path);\r\n }\r\n else if (name === STEP_PACK)\r\n {\r\n AddDependency(dependencies, step.r?.path);\r\n AddDependency(dependencies, step.g?.path);\r\n AddDependency(dependencies, step.b?.path);\r\n AddDependency(dependencies, step.a?.path);\r\n }\r\n }\r\n return [ ...dependencies ].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\r\n}\r\n\r\n/**\r\n * Execute the maintained JavaScript form of Carbon's CPU bitmap pipeline.\r\n *\r\n * @param {object[]} steps Pipeline steps.\r\n * @param {{maxWidth:number,maxHeight:number}} params Caller size limits.\r\n * @param {object|null} options Input resolution options.\r\n * @returns {Promise<object>} Canonical RGBA payload.\r\n */\r\nexport async function ExecuteTexturePipeline(steps, params, options = null)\r\n{\r\n const list = AssertSteps(steps);\r\n if (!list.length)\r\n {\r\n throw PipelineError(\"CJS_TEXTURE_PIPELINE_NO_STEPS\", \"Tr2TexturePipeline has no steps.\");\r\n }\r\n const limits = {\r\n maxWidth: AssertLimit(params?.maxWidth, \"maxWidth\"),\r\n maxHeight: AssertLimit(params?.maxHeight, \"maxHeight\")\r\n };\r\n const settings = NormalizeOptions(options);\r\n const inputs = new Map();\r\n for (const path of GetTexturePipelineDependencies(list))\r\n {\r\n inputs.set(path, await ResolveInput(path, settings));\r\n }\r\n\r\n let bitmap = null;\r\n for (const step of list)\r\n {\r\n const name = StepName(step);\r\n if (name === STEP_LOAD)\r\n {\r\n bitmap = CloneBitmap(RequireInput(inputs, step.path));\r\n }\r\n else if (name === STEP_LIMIT_SIZE)\r\n {\r\n bitmap = LimitBitmap(RequireBitmap(bitmap), CombineLimits(step, limits));\r\n }\r\n else if (name === STEP_COMPRESS)\r\n {\r\n // Carbon's current implementation validates the bitmap and otherwise\r\n // performs no compression work.\r\n RequireBitmap(bitmap);\r\n }\r\n else if (name === STEP_PACK)\r\n {\r\n bitmap = PackBitmap(step, inputs);\r\n }\r\n else\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_STEP_UNSUPPORTED\",\r\n `Unsupported texture pipeline step: ${name || \"unknown\"}.`\r\n );\r\n }\r\n }\r\n\r\n bitmap = LimitBitmap(RequireBitmap(bitmap), limits);\r\n return ToPayload(bitmap);\r\n}\r\n\r\nfunction AssertSteps(steps)\r\n{\r\n if (!Array.isArray(steps))\r\n {\r\n throw new TypeError(\"Tr2TexturePipeline.steps must be an array.\");\r\n }\r\n return steps;\r\n}\r\n\r\nfunction AssertLimit(value, name)\r\n{\r\n if (!Number.isSafeInteger(value) || value < 0)\r\n {\r\n throw new TypeError(`Tr2TexturePipeline ${name} must be a non-negative safe integer.`);\r\n }\r\n return value;\r\n}\r\n\r\nfunction NormalizeOptions(options)\r\n{\r\n if (options === null || options === undefined)\r\n {\r\n return {};\r\n }\r\n if (!options || typeof options !== \"object\" || Array.isArray(options))\r\n {\r\n throw new TypeError(\"Tr2TexturePipeline options must be an object or null.\");\r\n }\r\n if (options.load !== undefined && typeof options.load !== \"function\")\r\n {\r\n throw new TypeError(\"Tr2TexturePipeline options.load must be a function.\");\r\n }\r\n if (options.resMan !== undefined && typeof options.resMan?.GetObject !== \"function\")\r\n {\r\n throw new TypeError(\"Tr2TexturePipeline options.resMan must provide GetObject().\");\r\n }\r\n return options;\r\n}\r\n\r\nasync function ResolveInput(path, options)\r\n{\r\n let value;\r\n if (options.inputs instanceof Map)\r\n {\r\n value = options.inputs.get(path);\r\n }\r\n else if (options.inputs && typeof options.inputs === \"object\")\r\n {\r\n value = options.inputs[path];\r\n }\r\n if (value === undefined && options.load)\r\n {\r\n value = await options.load(path);\r\n }\r\n if (value === undefined && options.resMan)\r\n {\r\n value = await options.resMan.GetObject(path, {\r\n ...(options.resourceOptions || {}),\r\n requirement: \"image\",\r\n emit: \"rgba\"\r\n });\r\n }\r\n if (value === undefined)\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_INPUT_MISSING\",\r\n `No texture pipeline input was provided for ${path}.`\r\n );\r\n }\r\n const payload = typeof value?.GetPayload === \"function\" ? value.GetPayload() : value;\r\n validateRgbaPayload(payload);\r\n if (payload.pixelFormat !== PayloadPixelFormat.RGBA8_UNORM)\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_FORMAT_UNSUPPORTED\",\r\n `Texture pipeline input ${path} must use rgba8unorm.`\r\n );\r\n }\r\n return FromPayload(payload);\r\n}\r\n\r\nfunction FromPayload(payload)\r\n{\r\n const data = new Uint8Array(payload.width * payload.height * 4);\r\n for (let y = 0; y < payload.height; y++)\r\n {\r\n const sourceOffset = y * payload.strideBytes;\r\n const targetOffset = y * payload.width * 4;\r\n data.set(payload.data.subarray(sourceOffset, sourceOffset + payload.width * 4), targetOffset);\r\n }\r\n return {\r\n width: payload.width,\r\n height: payload.height,\r\n data,\r\n sourceFormat: payload.sourceFormat || \"rgba\",\r\n colorSpace: payload.colorSpace,\r\n alphaMode: payload.alphaMode,\r\n metadata: payload.metadata || null\r\n };\r\n}\r\n\r\nfunction ToPayload(bitmap)\r\n{\r\n return {\r\n payloadType: \"rgba\",\r\n sourceFormat: bitmap.sourceFormat || \"texture-pipeline\",\r\n width: bitmap.width,\r\n height: bitmap.height,\r\n pixelFormat: PayloadPixelFormat.RGBA8_UNORM,\r\n data: bitmap.data,\r\n strideBytes: bitmap.width * 4,\r\n origin: \"top-left\",\r\n colorSpace: bitmap.colorSpace || \"unknown\",\r\n alphaMode: bitmap.alphaMode || \"unknown\",\r\n ...(bitmap.metadata ? { metadata: bitmap.metadata } : {})\r\n };\r\n}\r\n\r\nfunction CloneBitmap(bitmap)\r\n{\r\n return {\r\n ...bitmap,\r\n data: new Uint8Array(bitmap.data),\r\n metadata: bitmap.metadata && typeof bitmap.metadata === \"object\"\r\n ? { ...bitmap.metadata }\r\n : bitmap.metadata\r\n };\r\n}\r\n\r\nfunction CombineLimits(step, params)\r\n{\r\n return {\r\n maxWidth: TightestLimit(AssertLimit(step.maxWidth ?? 0, \"step.maxWidth\"), params.maxWidth),\r\n maxHeight: TightestLimit(AssertLimit(step.maxHeight ?? 0, \"step.maxHeight\"), params.maxHeight)\r\n };\r\n}\r\n\r\nfunction TightestLimit(first, second)\r\n{\r\n if (!first) return second;\r\n if (!second) return first;\r\n return Math.min(first, second);\r\n}\r\n\r\nfunction LimitBitmap(bitmap, limits)\r\n{\r\n let result = bitmap;\r\n while ((limits.maxWidth && result.width > limits.maxWidth)\r\n || (limits.maxHeight && result.height > limits.maxHeight))\r\n {\r\n result = Downsample2x2(result);\r\n }\r\n return result;\r\n}\r\n\r\nfunction Downsample2x2(bitmap)\r\n{\r\n const width = Math.max(1, Math.floor(bitmap.width / 2));\r\n const height = Math.max(1, Math.floor(bitmap.height / 2));\r\n const data = new Uint8Array(width * height * 4);\r\n for (let y = 0; y < height; y++)\r\n {\r\n for (let x = 0; x < width; x++)\r\n {\r\n const counts = [ 0, 0, 0, 0 ];\r\n let samples = 0;\r\n for (let oy = 0; oy < 2; oy++)\r\n {\r\n for (let ox = 0; ox < 2; ox++)\r\n {\r\n const sourceX = Math.min(bitmap.width - 1, x * 2 + ox);\r\n const sourceY = Math.min(bitmap.height - 1, y * 2 + oy);\r\n const source = (sourceY * bitmap.width + sourceX) * 4;\r\n for (let channel = 0; channel < 4; channel++)\r\n {\r\n counts[channel] += bitmap.data[source + channel];\r\n }\r\n samples++;\r\n }\r\n }\r\n const target = (y * width + x) * 4;\r\n for (let channel = 0; channel < 4; channel++)\r\n {\r\n data[target + channel] = Math.round(counts[channel] / samples);\r\n }\r\n }\r\n }\r\n return { ...bitmap, width, height, data };\r\n}\r\n\r\nfunction PackBitmap(step, inputs)\r\n{\r\n // The generated schema records the enum's zero value, while Carbon's\r\n // constructor initializes this step to B8G8R8A8_UNORM.\r\n const format = step.format === CarbonPixelFormat.PIXEL_FORMAT_UNKNOWN\r\n ? CarbonPixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM\r\n : step.format;\r\n if (!PACK_FORMATS.has(format))\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_FORMAT_UNSUPPORTED\",\r\n `Unsupported Carbon pack pixel format: ${String(format)}.`\r\n );\r\n }\r\n const descriptors = [ step.r, step.g, step.b, step.a ];\r\n const sources = descriptors.map(channel => channel?.path\r\n ? RequireInput(inputs, channel.path)\r\n : null);\r\n const first = sources.find(Boolean);\r\n const width = first?.width || 4;\r\n const height = first?.height || 4;\r\n for (const source of sources)\r\n {\r\n if (source && (source.width !== width || source.height !== height))\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_SIZE_MISMATCH\",\r\n \"Texture pipeline pack inputs must have identical dimensions.\"\r\n );\r\n }\r\n }\r\n\r\n const data = new Uint8Array(width * height * 4);\r\n const isR8 = format === CarbonPixelFormat.PIXEL_FORMAT_R8_UNORM;\r\n const isX8 = format === CarbonPixelFormat.PIXEL_FORMAT_B8G8R8X8_UNORM;\r\n for (let pixel = 0; pixel < width * height; pixel++)\r\n {\r\n const values = descriptors.map((channel, index) => ReadPackChannel(\r\n sources[index],\r\n channel,\r\n pixel\r\n ));\r\n const target = pixel * 4;\r\n if (isR8)\r\n {\r\n data[target] = values[0];\r\n data[target + 3] = 255;\r\n }\r\n else\r\n {\r\n data[target] = values[0];\r\n data[target + 1] = values[1];\r\n data[target + 2] = values[2];\r\n data[target + 3] = isX8 ? 255 : values[3];\r\n }\r\n }\r\n return {\r\n width,\r\n height,\r\n data,\r\n sourceFormat: \"texture-pipeline\",\r\n colorSpace: first?.colorSpace || \"unknown\",\r\n alphaMode: isX8 || isR8 ? \"opaque\" : \"unknown\",\r\n metadata: { carbonPixelFormat: format }\r\n };\r\n}\r\n\r\nfunction ReadPackChannel(source, descriptor, pixel)\r\n{\r\n if (!source)\r\n {\r\n return AssertByte(descriptor?.fill ?? 0, \"fill\");\r\n }\r\n const channel = AssertByte(descriptor?.channel ?? 0, \"channel\");\r\n if (channel > 3)\r\n {\r\n throw new RangeError(\"Tr2TexturePackChannel.channel must be between 0 and 3.\");\r\n }\r\n // Carbon's exposed chooser encodes RED=2 and BLUE=0 for BGRA host\r\n // bitmaps. Translate those values to this package's canonical RGBA input.\r\n const rgbaChannel = channel === 0 ? 2 : channel === 2 ? 0 : channel;\r\n return source.data[pixel * 4 + rgbaChannel];\r\n}\r\n\r\nfunction AssertByte(value, name)\r\n{\r\n if (!Number.isInteger(value) || value < 0 || value > 255)\r\n {\r\n throw new RangeError(`Tr2TexturePackChannel.${name} must be an integer from 0 to 255.`);\r\n }\r\n return value;\r\n}\r\n\r\nfunction RequireInput(inputs, path)\r\n{\r\n const value = inputs.get(String(path || \"\"));\r\n if (!value)\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_INPUT_MISSING\",\r\n `Texture pipeline input is unavailable: ${String(path || \"\")}.`\r\n );\r\n }\r\n return value;\r\n}\r\n\r\nfunction RequireBitmap(bitmap)\r\n{\r\n if (!bitmap)\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_BITMAP_INVALID\",\r\n \"Texture pipeline step requires a valid input bitmap.\"\r\n );\r\n }\r\n return bitmap;\r\n}\r\n\r\nfunction AddDependency(dependencies, value)\r\n{\r\n const path = String(value || \"\");\r\n if (path)\r\n {\r\n dependencies.add(path);\r\n }\r\n}\r\n\r\nfunction StepName(step)\r\n{\r\n return step?.constructor?.name || step?.className || \"\";\r\n}\r\n\r\nfunction PipelineError(code, message)\r\n{\r\n const error = new Error(message);\r\n error.code = code;\r\n return error;\r\n}\r\n"],"names":["STEP_LOAD","STEP_LIMIT_SIZE","STEP_COMPRESS","STEP_PACK","PACK_FORMATS","Set","CarbonPixelFormat","PIXEL_FORMAT_R8_UNORM","PIXEL_FORMAT_B8G8R8A8_UNORM","PIXEL_FORMAT_B8G8R8X8_UNORM","GetTexturePipelineDependencies","steps","dependencies","step","AssertSteps","name","StepName","AddDependency","path","r","g","b","a","sort","ExecuteTexturePipeline","params","options","list","length","PipelineError","limits","maxWidth","AssertLimit","maxHeight","settings","NormalizeOptions","inputs","Map","set","ResolveInput","bitmap","CloneBitmap","RequireInput","LimitBitmap","RequireBitmap","CombineLimits","PackBitmap","ToPayload","Array","isArray","TypeError","value","Number","isSafeInteger","undefined","load","resMan","GetObject","get","resourceOptions","requirement","emit","payload","GetPayload","validateRgbaPayload","pixelFormat","PayloadPixelFormat","RGBA8_UNORM","FromPayload","data","Uint8Array","width","height","y","sourceOffset","strideBytes","targetOffset","subarray","sourceFormat","colorSpace","alphaMode","metadata","payloadType","origin","TightestLimit","first","second","Math","min","result","Downsample2x2","max","floor","x","counts","samples","oy","ox","sourceX","sourceY","source","channel","target","round","format","PIXEL_FORMAT_UNKNOWN","has","String","descriptors","sources","map","find","Boolean","isR8","isX8","pixel","values","index","ReadPackChannel","carbonPixelFormat","descriptor","AssertByte","fill","RangeError","rgbaChannel","isInteger","add","constructor","className","code","message","error","Error"],"mappings":"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"}
1
+ {"version":3,"file":"texturePipelineBehavior.js","sources":["../../../src/resources/texturePipelineBehavior.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipeline.cpp\r\n// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLoad.cpp\r\n// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepLimitSize.cpp\r\n// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepCompress.cpp\r\n// Source: trinity/trinity/Resources/TexturePipeline/Tr2TexturePipelineStepPack.cpp\r\nimport { validateRgbaPayload } from \"../format/payloadContract.js\";\r\nimport { PixelFormat as PayloadPixelFormat } from \"@carbonenginejs/runtime-utils/graphics\";\r\nimport { PixelFormat as CarbonPixelFormat } from \"@carbonenginejs/runtime-utils/render-context\";\r\n\r\nconst STEP_LOAD = \"Tr2TexturePipelineStepLoad\";\r\nconst STEP_LIMIT_SIZE = \"Tr2TexturePipelineStepLimitSize\";\r\nconst STEP_COMPRESS = \"Tr2TexturePipelineStepCompress\";\r\nconst STEP_PACK = \"Tr2TexturePipelineStepPack\";\r\nconst PACK_FORMATS = new Set([\r\n CarbonPixelFormat.PIXEL_FORMAT_R8_UNORM,\r\n CarbonPixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM,\r\n CarbonPixelFormat.PIXEL_FORMAT_B8G8R8X8_UNORM\r\n]);\r\n\r\n/**\r\n * Collect Carbon texture-pipeline dependencies in std::set-equivalent order.\r\n *\r\n * @param {object[]} steps Pipeline steps.\r\n * @returns {string[]} Sorted unique resource paths.\r\n */\r\nexport function GetTexturePipelineDependencies(steps)\r\n{\r\n const dependencies = new Set();\r\n for (const step of AssertSteps(steps))\r\n {\r\n const name = StepName(step);\r\n if (name === STEP_LOAD)\r\n {\r\n AddDependency(dependencies, step.path);\r\n }\r\n else if (name === STEP_PACK)\r\n {\r\n AddDependency(dependencies, step.r?.path);\r\n AddDependency(dependencies, step.g?.path);\r\n AddDependency(dependencies, step.b?.path);\r\n AddDependency(dependencies, step.a?.path);\r\n }\r\n }\r\n return [ ...dependencies ].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\r\n}\r\n\r\n/**\r\n * Execute the maintained JavaScript form of Carbon's CPU bitmap pipeline.\r\n *\r\n * @param {object[]} steps Pipeline steps.\r\n * @param {{maxWidth:number,maxHeight:number}} params Caller size limits.\r\n * @param {object|null} options Input resolution options.\r\n * @returns {Promise<object>} Canonical RGBA payload.\r\n */\r\nexport async function ExecuteTexturePipeline(steps, params, options = null)\r\n{\r\n const list = AssertSteps(steps);\r\n if (!list.length)\r\n {\r\n throw PipelineError(\"CJS_TEXTURE_PIPELINE_NO_STEPS\", \"Tr2TexturePipeline has no steps.\");\r\n }\r\n const limits = {\r\n maxWidth: AssertLimit(params?.maxWidth, \"maxWidth\"),\r\n maxHeight: AssertLimit(params?.maxHeight, \"maxHeight\")\r\n };\r\n const settings = NormalizeOptions(options);\r\n const inputs = new Map();\r\n for (const path of GetTexturePipelineDependencies(list))\r\n {\r\n inputs.set(path, await ResolveInput(path, settings));\r\n }\r\n\r\n let bitmap = null;\r\n for (const step of list)\r\n {\r\n const name = StepName(step);\r\n if (name === STEP_LOAD)\r\n {\r\n bitmap = CloneBitmap(RequireInput(inputs, step.path));\r\n }\r\n else if (name === STEP_LIMIT_SIZE)\r\n {\r\n bitmap = LimitBitmap(RequireBitmap(bitmap), CombineLimits(step, limits));\r\n }\r\n else if (name === STEP_COMPRESS)\r\n {\r\n // Carbon's current implementation validates the bitmap and otherwise\r\n // performs no compression work.\r\n RequireBitmap(bitmap);\r\n }\r\n else if (name === STEP_PACK)\r\n {\r\n bitmap = PackBitmap(step, inputs);\r\n }\r\n else\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_STEP_UNSUPPORTED\",\r\n `Unsupported texture pipeline step: ${name || \"unknown\"}.`\r\n );\r\n }\r\n }\r\n\r\n bitmap = LimitBitmap(RequireBitmap(bitmap), limits);\r\n return ToPayload(bitmap);\r\n}\r\n\r\nfunction AssertSteps(steps)\r\n{\r\n if (!Array.isArray(steps))\r\n {\r\n throw new TypeError(\"Tr2TexturePipeline.steps must be an array.\");\r\n }\r\n return steps;\r\n}\r\n\r\nfunction AssertLimit(value, name)\r\n{\r\n if (!Number.isSafeInteger(value) || value < 0)\r\n {\r\n throw new TypeError(`Tr2TexturePipeline ${name} must be a non-negative safe integer.`);\r\n }\r\n return value;\r\n}\r\n\r\nfunction NormalizeOptions(options)\r\n{\r\n if (options === null || options === undefined)\r\n {\r\n return {};\r\n }\r\n if (!options || typeof options !== \"object\" || Array.isArray(options))\r\n {\r\n throw new TypeError(\"Tr2TexturePipeline options must be an object or null.\");\r\n }\r\n if (options.load !== undefined && typeof options.load !== \"function\")\r\n {\r\n throw new TypeError(\"Tr2TexturePipeline options.load must be a function.\");\r\n }\r\n if (options.resMan !== undefined && typeof options.resMan?.GetObject !== \"function\")\r\n {\r\n throw new TypeError(\"Tr2TexturePipeline options.resMan must provide GetObject().\");\r\n }\r\n return options;\r\n}\r\n\r\nasync function ResolveInput(path, options)\r\n{\r\n let value;\r\n if (options.inputs instanceof Map)\r\n {\r\n value = options.inputs.get(path);\r\n }\r\n else if (options.inputs && typeof options.inputs === \"object\")\r\n {\r\n value = options.inputs[path];\r\n }\r\n if (value === undefined && options.load)\r\n {\r\n value = await options.load(path);\r\n }\r\n if (value === undefined && options.resMan)\r\n {\r\n value = await options.resMan.GetObject(path, {\r\n ...(options.resourceOptions || {}),\r\n requirement: \"image\",\r\n emit: \"rgba\"\r\n });\r\n }\r\n if (value === undefined)\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_INPUT_MISSING\",\r\n `No texture pipeline input was provided for ${path}.`\r\n );\r\n }\r\n const payload = typeof value?.GetPayload === \"function\" ? value.GetPayload() : value;\r\n validateRgbaPayload(payload);\r\n if (payload.pixelFormat !== PayloadPixelFormat.RGBA8_UNORM)\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_FORMAT_UNSUPPORTED\",\r\n `Texture pipeline input ${path} must use rgba8unorm.`\r\n );\r\n }\r\n return FromPayload(payload);\r\n}\r\n\r\nfunction FromPayload(payload)\r\n{\r\n const data = new Uint8Array(payload.width * payload.height * 4);\r\n for (let y = 0; y < payload.height; y++)\r\n {\r\n const sourceOffset = y * payload.strideBytes;\r\n const targetOffset = y * payload.width * 4;\r\n data.set(payload.data.subarray(sourceOffset, sourceOffset + payload.width * 4), targetOffset);\r\n }\r\n return {\r\n width: payload.width,\r\n height: payload.height,\r\n data,\r\n sourceFormat: payload.sourceFormat || \"rgba\",\r\n colorSpace: payload.colorSpace,\r\n alphaMode: payload.alphaMode,\r\n metadata: payload.metadata || null\r\n };\r\n}\r\n\r\nfunction ToPayload(bitmap)\r\n{\r\n return {\r\n payloadType: \"rgba\",\r\n sourceFormat: bitmap.sourceFormat || \"texture-pipeline\",\r\n width: bitmap.width,\r\n height: bitmap.height,\r\n pixelFormat: PayloadPixelFormat.RGBA8_UNORM,\r\n data: bitmap.data,\r\n strideBytes: bitmap.width * 4,\r\n origin: \"top-left\",\r\n colorSpace: bitmap.colorSpace || \"unknown\",\r\n alphaMode: bitmap.alphaMode || \"unknown\",\r\n ...(bitmap.metadata ? { metadata: bitmap.metadata } : {})\r\n };\r\n}\r\n\r\nfunction CloneBitmap(bitmap)\r\n{\r\n return {\r\n ...bitmap,\r\n data: new Uint8Array(bitmap.data),\r\n metadata: bitmap.metadata && typeof bitmap.metadata === \"object\"\r\n ? { ...bitmap.metadata }\r\n : bitmap.metadata\r\n };\r\n}\r\n\r\nfunction CombineLimits(step, params)\r\n{\r\n return {\r\n maxWidth: TightestLimit(AssertLimit(step.maxWidth ?? 0, \"step.maxWidth\"), params.maxWidth),\r\n maxHeight: TightestLimit(AssertLimit(step.maxHeight ?? 0, \"step.maxHeight\"), params.maxHeight)\r\n };\r\n}\r\n\r\nfunction TightestLimit(first, second)\r\n{\r\n if (!first) return second;\r\n if (!second) return first;\r\n return Math.min(first, second);\r\n}\r\n\r\nfunction LimitBitmap(bitmap, limits)\r\n{\r\n let result = bitmap;\r\n while ((limits.maxWidth && result.width > limits.maxWidth)\r\n || (limits.maxHeight && result.height > limits.maxHeight))\r\n {\r\n result = Downsample2x2(result);\r\n }\r\n return result;\r\n}\r\n\r\nfunction Downsample2x2(bitmap)\r\n{\r\n const width = Math.max(1, Math.floor(bitmap.width / 2));\r\n const height = Math.max(1, Math.floor(bitmap.height / 2));\r\n const data = new Uint8Array(width * height * 4);\r\n for (let y = 0; y < height; y++)\r\n {\r\n for (let x = 0; x < width; x++)\r\n {\r\n const counts = [ 0, 0, 0, 0 ];\r\n let samples = 0;\r\n for (let oy = 0; oy < 2; oy++)\r\n {\r\n for (let ox = 0; ox < 2; ox++)\r\n {\r\n const sourceX = Math.min(bitmap.width - 1, x * 2 + ox);\r\n const sourceY = Math.min(bitmap.height - 1, y * 2 + oy);\r\n const source = (sourceY * bitmap.width + sourceX) * 4;\r\n for (let channel = 0; channel < 4; channel++)\r\n {\r\n counts[channel] += bitmap.data[source + channel];\r\n }\r\n samples++;\r\n }\r\n }\r\n const target = (y * width + x) * 4;\r\n for (let channel = 0; channel < 4; channel++)\r\n {\r\n data[target + channel] = Math.round(counts[channel] / samples);\r\n }\r\n }\r\n }\r\n return { ...bitmap, width, height, data };\r\n}\r\n\r\nfunction PackBitmap(step, inputs)\r\n{\r\n // The generated schema records the enum's zero value, while Carbon's\r\n // constructor initializes this step to B8G8R8A8_UNORM.\r\n const format = step.format === CarbonPixelFormat.PIXEL_FORMAT_UNKNOWN\r\n ? CarbonPixelFormat.PIXEL_FORMAT_B8G8R8A8_UNORM\r\n : step.format;\r\n if (!PACK_FORMATS.has(format))\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_FORMAT_UNSUPPORTED\",\r\n `Unsupported Carbon pack pixel format: ${String(format)}.`\r\n );\r\n }\r\n const descriptors = [ step.r, step.g, step.b, step.a ];\r\n const sources = descriptors.map(channel => channel?.path\r\n ? RequireInput(inputs, channel.path)\r\n : null);\r\n const first = sources.find(Boolean);\r\n const width = first?.width || 4;\r\n const height = first?.height || 4;\r\n for (const source of sources)\r\n {\r\n if (source && (source.width !== width || source.height !== height))\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_SIZE_MISMATCH\",\r\n \"Texture pipeline pack inputs must have identical dimensions.\"\r\n );\r\n }\r\n }\r\n\r\n const data = new Uint8Array(width * height * 4);\r\n const isR8 = format === CarbonPixelFormat.PIXEL_FORMAT_R8_UNORM;\r\n const isX8 = format === CarbonPixelFormat.PIXEL_FORMAT_B8G8R8X8_UNORM;\r\n for (let pixel = 0; pixel < width * height; pixel++)\r\n {\r\n const values = descriptors.map((channel, index) => ReadPackChannel(\r\n sources[index],\r\n channel,\r\n pixel\r\n ));\r\n const target = pixel * 4;\r\n if (isR8)\r\n {\r\n data[target] = values[0];\r\n data[target + 3] = 255;\r\n }\r\n else\r\n {\r\n data[target] = values[0];\r\n data[target + 1] = values[1];\r\n data[target + 2] = values[2];\r\n data[target + 3] = isX8 ? 255 : values[3];\r\n }\r\n }\r\n return {\r\n width,\r\n height,\r\n data,\r\n sourceFormat: \"texture-pipeline\",\r\n colorSpace: first?.colorSpace || \"unknown\",\r\n alphaMode: isX8 || isR8 ? \"opaque\" : \"unknown\",\r\n metadata: { carbonPixelFormat: format }\r\n };\r\n}\r\n\r\nfunction ReadPackChannel(source, descriptor, pixel)\r\n{\r\n if (!source)\r\n {\r\n return AssertByte(descriptor?.fill ?? 0, \"fill\");\r\n }\r\n const channel = AssertByte(descriptor?.channel ?? 0, \"channel\");\r\n if (channel > 3)\r\n {\r\n throw new RangeError(\"Tr2TexturePackChannel.channel must be between 0 and 3.\");\r\n }\r\n // Carbon's exposed chooser encodes RED=2 and BLUE=0 for BGRA host\r\n // bitmaps. Translate those values to this package's canonical RGBA input.\r\n const rgbaChannel = channel === 0 ? 2 : channel === 2 ? 0 : channel;\r\n return source.data[pixel * 4 + rgbaChannel];\r\n}\r\n\r\nfunction AssertByte(value, name)\r\n{\r\n if (!Number.isInteger(value) || value < 0 || value > 255)\r\n {\r\n throw new RangeError(`Tr2TexturePackChannel.${name} must be an integer from 0 to 255.`);\r\n }\r\n return value;\r\n}\r\n\r\nfunction RequireInput(inputs, path)\r\n{\r\n const value = inputs.get(String(path || \"\"));\r\n if (!value)\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_INPUT_MISSING\",\r\n `Texture pipeline input is unavailable: ${String(path || \"\")}.`\r\n );\r\n }\r\n return value;\r\n}\r\n\r\nfunction RequireBitmap(bitmap)\r\n{\r\n if (!bitmap)\r\n {\r\n throw PipelineError(\r\n \"CJS_TEXTURE_PIPELINE_BITMAP_INVALID\",\r\n \"Texture pipeline step requires a valid input bitmap.\"\r\n );\r\n }\r\n return bitmap;\r\n}\r\n\r\nfunction AddDependency(dependencies, value)\r\n{\r\n const path = String(value || \"\");\r\n if (path)\r\n {\r\n dependencies.add(path);\r\n }\r\n}\r\n\r\nfunction StepName(step)\r\n{\r\n return step?.constructor?.name || step?.className || \"\";\r\n}\r\n\r\nfunction PipelineError(code, message)\r\n{\r\n const error = new Error(message);\r\n error.code = code;\r\n return error;\r\n}\r\n"],"names":["STEP_LOAD","STEP_LIMIT_SIZE","STEP_COMPRESS","STEP_PACK","PACK_FORMATS","Set","CarbonPixelFormat","PIXEL_FORMAT_R8_UNORM","PIXEL_FORMAT_B8G8R8A8_UNORM","PIXEL_FORMAT_B8G8R8X8_UNORM","GetTexturePipelineDependencies","steps","dependencies","step","AssertSteps","name","StepName","AddDependency","path","r","g","b","a","sort","ExecuteTexturePipeline","params","options","list","length","PipelineError","limits","maxWidth","AssertLimit","maxHeight","settings","NormalizeOptions","inputs","Map","set","ResolveInput","bitmap","CloneBitmap","RequireInput","LimitBitmap","RequireBitmap","CombineLimits","PackBitmap","ToPayload","Array","isArray","TypeError","value","Number","isSafeInteger","undefined","load","resMan","GetObject","get","resourceOptions","requirement","emit","payload","GetPayload","validateRgbaPayload","pixelFormat","PayloadPixelFormat","RGBA8_UNORM","FromPayload","data","Uint8Array","width","height","y","sourceOffset","strideBytes","targetOffset","subarray","sourceFormat","colorSpace","alphaMode","metadata","payloadType","origin","TightestLimit","first","second","Math","min","result","Downsample2x2","max","floor","x","counts","samples","oy","ox","sourceX","sourceY","source","channel","target","round","format","PIXEL_FORMAT_UNKNOWN","has","String","descriptors","sources","map","find","Boolean","isR8","isX8","pixel","values","index","ReadPackChannel","carbonPixelFormat","descriptor","AssertByte","fill","RangeError","rgbaChannel","isInteger","add","constructor","className","code","message","error","Error"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { identity as _identity, applyDecs2311 as _applyDecs2311 } from '../_virtual/_rollupPluginBabelHelpers.js';
2
- import { type } from '@carbonenginejs/core-types/schema';
2
+ import { type } from '@carbonenginejs/runtime-utils/schema';
3
3
  import { CjsResource as _CjsResource } from '../CjsResource.js';
4
4
  import { normalizeResourcePath } from '../resourcePath.js';
5
5
  import { CjsTextureParameterProxy } from './CjsTextureParameterProxy.js';
@@ -1 +1 @@
1
- {"version":3,"file":"CjsTextureArrayRes.js","sources":["../../../src/texture/CjsTextureArrayRes.js"],"sourcesContent":["import { type } from \"@carbonenginejs/core-types/schema\";\nimport { CjsResource } from \"../CjsResource.js\";\nimport { normalizeResourcePath } from \"../resourcePath.js\";\nimport { CjsTextureParameterProxy } from \"./CjsTextureParameterProxy.js\";\n\n/**\n * Mutable runtime aggregate for an ordered texture-array request.\n *\n * Private engine-bridge layer proxies only invalidate this parent. A resource\n * manager or engine scheduler consumes the coalesced update on a later frame\n * and prepares the corresponding immutable/cached texture-array payload.\n */\n@type.define({ className: \"CjsTextureArrayRes\", family: \"resource\" })\nexport class CjsTextureArrayRes extends CjsResource\n{\n #layers = [];\n #dirtyLayers = new Set();\n #requestedRevision = 0;\n #preparedRevision = 0;\n #updateScheduled = false;\n #topologyChanged = false;\n #inFlightRequests = new Map();\n #readyWaiters = [];\n #failedRevision = 0;\n #failedError = null;\n #updateScheduler = null;\n #updateHandler = null;\n\n constructor(values = null)\n {\n const options = values && typeof values === \"object\" && !Array.isArray(values) ? values : {};\n const resourceValues = { ...options };\n delete resourceValues.layers;\n delete resourceValues.paths;\n delete resourceValues.layerCount;\n delete resourceValues.layerNames;\n delete resourceValues.updateScheduler;\n delete resourceValues.updateHandler;\n super(resourceValues);\n\n if (options.updateScheduler) this.SetUpdateScheduler(options.updateScheduler);\n if (options.updateHandler) this.SetUpdateHandler(options.updateHandler);\n\n const paths = options.layers || options.paths;\n if (paths !== undefined)\n {\n this.SetLayerResourcePaths(paths, options.layerNames);\n }\n else if (options.layerCount !== undefined)\n {\n this.SetLayerCount(options.layerCount, options.layerNames);\n }\n }\n\n GetLayerCount()\n {\n return this.#layers.length;\n }\n\n SetLayerCount(value, names = null)\n {\n const count = Number(value);\n if (!Number.isInteger(count) || count < 1)\n {\n throw new RangeError(\"CjsTextureArrayRes layer count must be a positive integer.\");\n }\n if (count === this.#layers.length)\n {\n this.#SetLayerNames(names);\n return false;\n }\n\n const previousCount = this.#layers.length;\n if (count < previousCount)\n {\n this.#layers.length = count;\n }\n else\n {\n for (let layer = previousCount; layer < count; layer++)\n {\n this.#layers.push(this.#CreateLayer(layer, names?.[layer]));\n }\n }\n this.#SetLayerNames(names);\n this.#InvalidateRange(count, true);\n return true;\n }\n\n GetLayerParameter(layer)\n {\n return this.#GetLayer(layer).proxy;\n }\n\n GetLayerParameters(out = [])\n {\n for (const layer of this.#layers) out.push(layer.proxy);\n return out;\n }\n\n GetLayerResourcePath(layer)\n {\n return this.#GetLayer(layer).path;\n }\n\n GetLayerResourcePaths(out = [])\n {\n for (const layer of this.#layers) out.push(layer.path);\n return out;\n }\n\n SetLayerResourcePath(layer, value)\n {\n const record = this.#GetLayer(layer);\n const path = normalizeResourcePath(value);\n if (path === record.path) return false;\n record.path = path;\n record.resource = null;\n this.#InvalidateLayer(layer);\n return true;\n }\n\n SetLayerResourcePaths(values, names = null)\n {\n if (!Array.isArray(values) || values.length === 0)\n {\n throw new TypeError(\"CjsTextureArrayRes layers must be a non-empty array of resource paths.\");\n }\n\n const paths = values.map(value => normalizeResourcePath(\n value && typeof value === \"object\"\n ? value.resourcePath ?? value.path ?? value.GetPath?.() ?? \"\"\n : value\n ));\n const topologyChanged = paths.length !== this.#layers.length;\n let contentChanged = topologyChanged;\n let namesChanged = false;\n const changedLayers = new Set();\n const next = [];\n for (let layer = 0; layer < paths.length; layer++)\n {\n const current = this.#layers[layer];\n const name = names?.[layer] ?? current?.proxy?.GetParameterName?.() ?? \"\";\n if (!current)\n {\n next.push(this.#CreateLayer(layer, name, paths[layer]));\n }\n else\n {\n if (current.path !== paths[layer])\n {\n current.path = paths[layer];\n current.resource = null;\n contentChanged = true;\n changedLayers.add(layer);\n }\n if (current.proxy.SetParameterName(name)) namesChanged = true;\n next.push(current);\n }\n }\n this.#layers = next;\n if (topologyChanged)\n {\n this.#InvalidateRange(paths.length, true);\n }\n else if (contentChanged)\n {\n this.#InvalidateLayers(changedLayers);\n }\n return contentChanged || namesChanged;\n }\n\n GetLayerResource(layer)\n {\n return this.#GetLayer(layer).resource;\n }\n\n SetLayerResource(layer, resource)\n {\n const record = this.#GetLayer(layer);\n const next = resource ?? null;\n if (record.resource === next) return false;\n record.resource = next;\n this.#InvalidateLayer(layer);\n return true;\n }\n\n /** Invalidate a layer whose resolved resource changed without changing identity. */\n TouchLayer(layer)\n {\n this.#GetLayer(layer);\n this.#InvalidateLayer(layer);\n return this;\n }\n\n /** Invalidate every current layer, for example after an adapter generation loss. */\n TouchAllLayers(options = {})\n {\n this.#InvalidateRange(this.#layers.length, !!options.topologyChanged);\n return this;\n }\n\n GetRequestedRevision()\n {\n return this.#requestedRevision;\n }\n\n GetPreparedRevision()\n {\n return this.#preparedRevision;\n }\n\n NeedsUpdate()\n {\n return this.#updateScheduled || this.#dirtyLayers.size > 0 || this.#preparedRevision < this.#requestedRevision;\n }\n\n GetDirtyLayers()\n {\n return new Set(this.#dirtyLayers);\n }\n\n GetInFlightRevisions(out = [])\n {\n for (const revision of this.#inFlightRequests.keys()) out.push(revision);\n return out.sort((a, b) => a - b);\n }\n\n IsRevisionInFlight(revision)\n {\n return this.#inFlightRequests.has(revision);\n }\n\n SetUpdateScheduler(schedule = null)\n {\n if (schedule !== null && typeof schedule !== \"function\")\n {\n throw new TypeError(\"CjsTextureArrayRes update scheduler must be a function or null.\");\n }\n this.#updateScheduler = schedule;\n if (schedule && this.#updateScheduled) schedule(this);\n return this;\n }\n\n SetUpdateHandler(handler = null)\n {\n if (handler !== null && typeof handler !== \"function\")\n {\n throw new TypeError(\"CjsTextureArrayRes update handler must be a function or null.\");\n }\n this.#updateHandler = handler;\n return this;\n }\n\n /**\n * Consume all proxy changes as one immutable request snapshot.\n * A frame scheduler should call this at most once per parent per frame.\n */\n ConsumeUpdateRequest()\n {\n if (!this.#updateScheduled && this.#dirtyLayers.size === 0) return null;\n const request = Object.freeze({\n revision: this.#requestedRevision,\n paths: Object.freeze(this.GetLayerResourcePaths()),\n resources: Object.freeze(this.#layers.map(layer => layer.resource)),\n dirtyLayers: Object.freeze([ ...this.#dirtyLayers ].sort((a, b) => a - b)),\n topologyChanged: this.#topologyChanged\n });\n this.#dirtyLayers.clear();\n this.#topologyChanged = false;\n this.#updateScheduled = false;\n this.#inFlightRequests.set(request.revision, request);\n return request;\n }\n\n /** Requeue a consumed current request after cancellation, loss, or retryable failure. */\n RetryUpdateRequest(revision = this.#requestedRevision)\n {\n const request = this.#inFlightRequests.get(revision);\n if (!request) return false;\n this.#inFlightRequests.delete(revision);\n if (revision !== this.#requestedRevision) return false;\n if (this.#failedRevision === revision)\n {\n this.#failedRevision = 0;\n this.#failedError = null;\n }\n for (const layer of request.dirtyLayers)\n {\n if (layer < this.#layers.length) this.#dirtyLayers.add(layer);\n }\n this.#topologyChanged ||= request.topologyChanged;\n this.#ScheduleUpdate();\n this.EmitEvent(\"revisionretry\", this, revision);\n return true;\n }\n\n /** Complete a consumed request as failed, optionally making it retryable. */\n FailUpdateRequest(revision, error, options = {})\n {\n if (options.retry) return this.RetryUpdateRequest(revision);\n if (!this.#inFlightRequests.has(revision)) return false;\n this.#inFlightRequests.delete(revision);\n if (revision !== this.#requestedRevision) return false;\n const failure = error instanceof Error ? error : new Error(String(error ?? \"Texture array preparation failed.\"));\n this.#failedRevision = revision;\n this.#failedError = failure;\n if (this.#preparedRevision === 0) this.SetError(failure);\n this.EmitEvent(\"revisionfailed\", this, revision, failure);\n this.#RejectReadyWaiters(revision, failure);\n return true;\n }\n\n /** Run the registered update handler for the current coalesced frame request. */\n Update(context = {})\n {\n const request = this.ConsumeUpdateRequest();\n if (!request) return null;\n this.EmitEvent(\"update\", this, request, context);\n return this.#updateHandler\n ? this.#updateHandler(this, request, context)\n : request;\n }\n\n /**\n * Atomically publish an opaque adapter allocation with its prepared revision.\n * The caller owns disposal of a successfully displaced allocation.\n */\n CommitPreparedAdapterRevision(revision, adapterKey, candidate, options = {})\n {\n if (!adapterKey) throw new TypeError(\"CjsTextureArrayRes adapter publication requires a key.\");\n if (candidate === null || candidate === undefined)\n {\n throw new TypeError(\"CjsTextureArrayRes adapter publication requires a candidate allocation.\");\n }\n const inFlight = this.#inFlightRequests.has(revision);\n if (!inFlight || revision !== this.#requestedRevision)\n {\n if (inFlight) this.#inFlightRequests.delete(revision);\n if (options.destroyRejected !== false) DestroyAdapterValue(candidate);\n return Object.freeze({ published: false, revision, displaced: null });\n }\n\n const displaced = this.GetAdapterResource(adapterKey);\n this.SetAdapterResource(adapterKey, candidate);\n this.#preparedRevision = revision;\n this.#failedRevision = 0;\n this.#failedError = null;\n this.#inFlightRequests.delete(revision);\n for (const pendingRevision of this.#inFlightRequests.keys())\n {\n if (pendingRevision < revision) this.#inFlightRequests.delete(pendingRevision);\n }\n this.MarkPrepared();\n this.EmitEvent(\"revisionprepared\", this, revision, adapterKey, candidate);\n this.#ResolveReadyWaiters(revision);\n return Object.freeze({\n published: true,\n revision,\n displaced: displaced === candidate ? null : displaced\n });\n }\n\n /** Destroy an unusable adapter allocation and request a complete rebuild. */\n HandleAdapterLoss(adapterKey, options = {})\n {\n if (!adapterKey) throw new TypeError(\"CjsTextureArrayRes adapter loss requires a key.\");\n const lost = this.GetAdapterResource(adapterKey);\n if (this.HasAdapterResource(adapterKey)) this.DestroyAdapterResource(adapterKey, options);\n this.#preparedRevision = 0;\n if (this.#layers.length) this.#InvalidateRange(this.#layers.length, true);\n if (this.state === CjsResource.State.PREPARED) this.MarkPreparing();\n this.EmitEvent(\"adapterlost\", this, adapterKey, lost);\n return lost;\n }\n\n /** Resolve when the generation requested at call time has been prepared. */\n Ready()\n {\n if (this.#requestedRevision === 0)\n {\n const error = new Error(\"Texture array resource has no configured layers.\");\n error.code = \"CJS_TEXTURE_ARRAY_UNCONFIGURED\";\n return Promise.reject(error);\n }\n const revision = this.#requestedRevision;\n if (this.#preparedRevision >= revision && this.IsPrepared()) return Promise.resolve(this);\n if (this.#failedRevision === revision) return Promise.reject(this.#failedError);\n return new Promise((resolve, reject) =>\n {\n this.#readyWaiters.push({ revision, resolve, reject });\n });\n }\n\n #CreateLayer(layer, name = \"\", path = \"\")\n {\n return {\n path: normalizeResourcePath(path),\n resource: null,\n proxy: new CjsTextureParameterProxy(this, layer, { name })\n };\n }\n\n #GetLayer(layer)\n {\n if (!Number.isInteger(layer) || layer < 0 || layer >= this.#layers.length)\n {\n throw new RangeError(`CjsTextureArrayRes layer ${layer} is out of range.`);\n }\n return this.#layers[layer];\n }\n\n #SetLayerNames(names)\n {\n if (!names) return;\n for (let layer = 0; layer < Math.min(names.length, this.#layers.length); layer++)\n {\n this.#layers[layer].proxy.SetParameterName(names[layer]);\n }\n }\n\n #InvalidateLayer(layer)\n {\n this.#InvalidateLayers([ layer ]);\n }\n\n #InvalidateRange(count, topologyChanged = false)\n {\n const layers = [];\n for (let layer = 0; layer < count; layer++) layers.push(layer);\n this.#InvalidateLayers(layers, topologyChanged);\n }\n\n #InvalidateLayers(layers, topologyChanged = false)\n {\n const changed = [];\n for (const layer of layers)\n {\n if (!Number.isInteger(layer) || layer < 0 || layer >= this.#layers.length) continue;\n this.#dirtyLayers.add(layer);\n changed.push(layer);\n }\n if (!changed.length && !topologyChanged) return;\n this.#topologyChanged ||= topologyChanged;\n this.#failedRevision = 0;\n this.#failedError = null;\n this.#requestedRevision += 1;\n this.#ScheduleUpdate();\n this.EmitEvent(\"invalidated\", this, Object.freeze(changed), this.#requestedRevision, Object.freeze({\n topologyChanged: this.#topologyChanged\n }));\n }\n\n #ScheduleUpdate()\n {\n if (this.#updateScheduled) return;\n this.#updateScheduled = true;\n this.#updateScheduler?.(this);\n }\n\n #ResolveReadyWaiters(revision)\n {\n const pending = [];\n for (const waiter of this.#readyWaiters)\n {\n if (waiter.revision <= revision) waiter.resolve(this);\n else pending.push(waiter);\n }\n this.#readyWaiters = pending;\n }\n\n #RejectReadyWaiters(revision, error)\n {\n const pending = [];\n for (const waiter of this.#readyWaiters)\n {\n if (waiter.revision <= revision) waiter.reject(error);\n else pending.push(waiter);\n }\n this.#readyWaiters = pending;\n }\n\n static payload = \"texture-array\";\n}\n\nfunction DestroyAdapterValue(value)\n{\n if (!value || (typeof value !== \"object\" && typeof value !== \"function\")) return;\n const destroy = value.Destroy || value.Dispose || value.destroy || value.dispose;\n if (typeof destroy === \"function\") destroy.call(value);\n}\n"],"names":["_CjsTextureArrayRes","_identity","CjsTextureArrayRes","CjsResource","_initClass","_applyDecs","type","define","className","family","c","Set","Map","constructor","values","options","Array","isArray","resourceValues","layers","paths","layerCount","layerNames","updateScheduler","updateHandler","SetUpdateScheduler","SetUpdateHandler","undefined","SetLayerResourcePaths","SetLayerCount","GetLayerCount","length","value","names","count","Number","isInteger","RangeError","previousCount","layer","push","GetLayerParameter","proxy","GetLayerParameters","out","GetLayerResourcePath","path","GetLayerResourcePaths","SetLayerResourcePath","record","normalizeResourcePath","resource","TypeError","map","resourcePath","GetPath","topologyChanged","contentChanged","namesChanged","changedLayers","next","current","name","GetParameterName","add","SetParameterName","GetLayerResource","SetLayerResource","TouchLayer","TouchAllLayers","GetRequestedRevision","GetPreparedRevision","NeedsUpdate","size","GetDirtyLayers","GetInFlightRevisions","revision","keys","sort","a","b","IsRevisionInFlight","has","schedule","handler","ConsumeUpdateRequest","request","Object","freeze","resources","dirtyLayers","clear","set","RetryUpdateRequest","get","delete","EmitEvent","FailUpdateRequest","error","retry","failure","Error","String","SetError","Update","context","CommitPreparedAdapterRevision","adapterKey","candidate","inFlight","destroyRejected","DestroyAdapterValue","published","displaced","GetAdapterResource","SetAdapterResource","pendingRevision","MarkPrepared","HandleAdapterLoss","lost","HasAdapterResource","DestroyAdapterResource","state","State","PREPARED","MarkPreparing","Ready","code","Promise","reject","IsPrepared","resolve","#CreateLayer","CjsTextureParameterProxy","#GetLayer","#SetLayerNames","Math","min","#InvalidateLayer","#InvalidateRange","#InvalidateLayers","changed","#ScheduleUpdate","#ResolveReadyWaiters","pending","waiter","#RejectReadyWaiters","payload","destroy","Destroy","Dispose","dispose","call"],"mappings":";;;;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AANA,IAAAA;AAAA,IAAA,cAAAC,SAAA,CAAA;AAAA,EAAA,QAOA,MAAAC,kBAAA,SACwCC,YAAW,CACnD;AAAA,IAAA;MAAA,CAAAH,mBAAA,EAAAI,UAAA,CAAA,GAAAC,cAAA,CAAA,IAAA,EAAA,CAFCC,IAAI,CAACC,MAAM,CAAC;AAAEC,QAAAA,SAAS,EAAE,oBAAoB;AAAEC,QAAAA,MAAM,EAAE;AAAW,OAAC,CAAC,CAAA,EAAA,EAAA,EAAA,CAAA,EAAA,MAAA,EAC7BN,YAAW,CAAA,CAAAO,CAAA;AAAA;IAEjD,OAAO,GAAG,EAAE;AACZ,IAAA,YAAY,GAAG,IAAIC,GAAG,EAAE;IACxB,kBAAkB,GAAG,CAAC;IACtB,iBAAiB,GAAG,CAAC;IACrB,gBAAgB,GAAG,KAAK;IACxB,gBAAgB,GAAG,KAAK;AACxB,IAAA,iBAAiB,GAAG,IAAIC,GAAG,EAAE;IAC7B,aAAa,GAAG,EAAE;IAClB,eAAe,GAAG,CAAC;IACnB,YAAY,GAAG,IAAI;IACnB,gBAAgB,GAAG,IAAI;IACvB,cAAc,GAAG,IAAI;AAErBC,IAAAA,WAAWA,CAACC,MAAM,GAAG,IAAI,EACzB;MACE,MAAMC,OAAO,GAAGD,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAI,CAACE,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,GAAGA,MAAM,GAAG,EAAE;AAC5F,MAAA,MAAMI,cAAc,GAAG;QAAE,GAAGH;OAAS;MACrC,OAAOG,cAAc,CAACC,MAAM;MAC5B,OAAOD,cAAc,CAACE,KAAK;MAC3B,OAAOF,cAAc,CAACG,UAAU;MAChC,OAAOH,cAAc,CAACI,UAAU;MAChC,OAAOJ,cAAc,CAACK,eAAe;MACrC,OAAOL,cAAc,CAACM,aAAa;MACnC,KAAK,CAACN,cAAc,CAAC;MAErB,IAAIH,OAAO,CAACQ,eAAe,EAAE,IAAI,CAACE,kBAAkB,CAACV,OAAO,CAACQ,eAAe,CAAC;MAC7E,IAAIR,OAAO,CAACS,aAAa,EAAE,IAAI,CAACE,gBAAgB,CAACX,OAAO,CAACS,aAAa,CAAC;MAEvE,MAAMJ,KAAK,GAAGL,OAAO,CAACI,MAAM,IAAIJ,OAAO,CAACK,KAAK;MAC7C,IAAIA,KAAK,KAAKO,SAAS,EACvB;QACE,IAAI,CAACC,qBAAqB,CAACR,KAAK,EAAEL,OAAO,CAACO,UAAU,CAAC;AACvD,MAAA,CAAC,MACI,IAAIP,OAAO,CAACM,UAAU,KAAKM,SAAS,EACzC;QACE,IAAI,CAACE,aAAa,CAACd,OAAO,CAACM,UAAU,EAAEN,OAAO,CAACO,UAAU,CAAC;AAC5D,MAAA;AACF,IAAA;AAEAQ,IAAAA,aAAaA,GACb;AACE,MAAA,OAAO,IAAI,CAAC,OAAO,CAACC,MAAM;AAC5B,IAAA;AAEAF,IAAAA,aAAaA,CAACG,KAAK,EAAEC,KAAK,GAAG,IAAI,EACjC;AACE,MAAA,MAAMC,KAAK,GAAGC,MAAM,CAACH,KAAK,CAAC;MAC3B,IAAI,CAACG,MAAM,CAACC,SAAS,CAACF,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,EACzC;AACE,QAAA,MAAM,IAAIG,UAAU,CAAC,4DAA4D,CAAC;AACpF,MAAA;MACA,IAAIH,KAAK,KAAK,IAAI,CAAC,OAAO,CAACH,MAAM,EACjC;AACE,QAAA,IAAI,CAAC,cAAc,CAACE,KAAK,CAAC;AAC1B,QAAA,OAAO,KAAK;AACd,MAAA;AAEA,MAAA,MAAMK,aAAa,GAAG,IAAI,CAAC,OAAO,CAACP,MAAM;MACzC,IAAIG,KAAK,GAAGI,aAAa,EACzB;AACE,QAAA,IAAI,CAAC,OAAO,CAACP,MAAM,GAAGG,KAAK;AAC7B,MAAA,CAAC,MAED;QACE,KAAK,IAAIK,KAAK,GAAGD,aAAa,EAAEC,KAAK,GAAGL,KAAK,EAAEK,KAAK,EAAE,EACtD;AACE,UAAA,IAAI,CAAC,OAAO,CAACC,IAAI,CAAC,IAAI,CAAC,YAAY,CAACD,KAAK,EAAEN,KAAK,GAAGM,KAAK,CAAC,CAAC,CAAC;AAC7D,QAAA;AACF,MAAA;AACA,MAAA,IAAI,CAAC,cAAc,CAACN,KAAK,CAAC;AAC1B,MAAA,IAAI,CAAC,gBAAgB,CAACC,KAAK,EAAE,IAAI,CAAC;AAClC,MAAA,OAAO,IAAI;AACb,IAAA;IAEAO,iBAAiBA,CAACF,KAAK,EACvB;MACE,OAAO,IAAI,CAAC,SAAS,CAACA,KAAK,CAAC,CAACG,KAAK;AACpC,IAAA;AAEAC,IAAAA,kBAAkBA,CAACC,GAAG,GAAG,EAAE,EAC3B;AACE,MAAA,KAAK,MAAML,KAAK,IAAI,IAAI,CAAC,OAAO,EAAEK,GAAG,CAACJ,IAAI,CAACD,KAAK,CAACG,KAAK,CAAC;AACvD,MAAA,OAAOE,GAAG;AACZ,IAAA;IAEAC,oBAAoBA,CAACN,KAAK,EAC1B;MACE,OAAO,IAAI,CAAC,SAAS,CAACA,KAAK,CAAC,CAACO,IAAI;AACnC,IAAA;AAEAC,IAAAA,qBAAqBA,CAACH,GAAG,GAAG,EAAE,EAC9B;AACE,MAAA,KAAK,MAAML,KAAK,IAAI,IAAI,CAAC,OAAO,EAAEK,GAAG,CAACJ,IAAI,CAACD,KAAK,CAACO,IAAI,CAAC;AACtD,MAAA,OAAOF,GAAG;AACZ,IAAA;AAEAI,IAAAA,oBAAoBA,CAACT,KAAK,EAAEP,KAAK,EACjC;MACE,MAAMiB,MAAM,GAAG,IAAI,CAAC,SAAS,CAACV,KAAK,CAAC;AACpC,MAAA,MAAMO,IAAI,GAAGI,qBAAqB,CAAClB,KAAK,CAAC;AACzC,MAAA,IAAIc,IAAI,KAAKG,MAAM,CAACH,IAAI,EAAE,OAAO,KAAK;MACtCG,MAAM,CAACH,IAAI,GAAGA,IAAI;MAClBG,MAAM,CAACE,QAAQ,GAAG,IAAI;AACtB,MAAA,IAAI,CAAC,gBAAgB,CAACZ,KAAK,CAAC;AAC5B,MAAA,OAAO,IAAI;AACb,IAAA;AAEAX,IAAAA,qBAAqBA,CAACd,MAAM,EAAEmB,KAAK,GAAG,IAAI,EAC1C;AACE,MAAA,IAAI,CAACjB,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,IAAIA,MAAM,CAACiB,MAAM,KAAK,CAAC,EACjD;AACE,QAAA,MAAM,IAAIqB,SAAS,CAAC,wEAAwE,CAAC;AAC/F,MAAA;AAEA,MAAA,MAAMhC,KAAK,GAAGN,MAAM,CAACuC,GAAG,CAACrB,KAAK,IAAIkB,qBAAqB,CACrDlB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,GAC9BA,KAAK,CAACsB,YAAY,IAAItB,KAAK,CAACc,IAAI,IAAId,KAAK,CAACuB,OAAO,IAAI,IAAI,EAAE,GAC3DvB,KACN,CAAC,CAAC;MACF,MAAMwB,eAAe,GAAGpC,KAAK,CAACW,MAAM,KAAK,IAAI,CAAC,OAAO,CAACA,MAAM;MAC5D,IAAI0B,cAAc,GAAGD,eAAe;MACpC,IAAIE,YAAY,GAAG,KAAK;AACxB,MAAA,MAAMC,aAAa,GAAG,IAAIhD,GAAG,EAAE;MAC/B,MAAMiD,IAAI,GAAG,EAAE;AACf,MAAA,KAAK,IAAIrB,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGnB,KAAK,CAACW,MAAM,EAAEQ,KAAK,EAAE,EACjD;QACE,MAAMsB,OAAO,GAAG,IAAI,CAAC,OAAO,CAACtB,KAAK,CAAC;AACnC,QAAA,MAAMuB,IAAI,GAAG7B,KAAK,GAAGM,KAAK,CAAC,IAAIsB,OAAO,EAAEnB,KAAK,EAAEqB,gBAAgB,IAAI,IAAI,EAAE;QACzE,IAAI,CAACF,OAAO,EACZ;AACED,UAAAA,IAAI,CAACpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAACD,KAAK,EAAEuB,IAAI,EAAE1C,KAAK,CAACmB,KAAK,CAAC,CAAC,CAAC;AACzD,QAAA,CAAC,MAED;UACE,IAAIsB,OAAO,CAACf,IAAI,KAAK1B,KAAK,CAACmB,KAAK,CAAC,EACjC;AACEsB,YAAAA,OAAO,CAACf,IAAI,GAAG1B,KAAK,CAACmB,KAAK,CAAC;YAC3BsB,OAAO,CAACV,QAAQ,GAAG,IAAI;AACvBM,YAAAA,cAAc,GAAG,IAAI;AACrBE,YAAAA,aAAa,CAACK,GAAG,CAACzB,KAAK,CAAC;AAC1B,UAAA;UACA,IAAIsB,OAAO,CAACnB,KAAK,CAACuB,gBAAgB,CAACH,IAAI,CAAC,EAAEJ,YAAY,GAAG,IAAI;AAC7DE,UAAAA,IAAI,CAACpB,IAAI,CAACqB,OAAO,CAAC;AACpB,QAAA;AACF,MAAA;AACA,MAAA,IAAI,CAAC,OAAO,GAAGD,IAAI;AACnB,MAAA,IAAIJ,eAAe,EACnB;QACE,IAAI,CAAC,gBAAgB,CAACpC,KAAK,CAACW,MAAM,EAAE,IAAI,CAAC;MAC3C,CAAC,MACI,IAAI0B,cAAc,EACvB;AACE,QAAA,IAAI,CAAC,iBAAiB,CAACE,aAAa,CAAC;AACvC,MAAA;MACA,OAAOF,cAAc,IAAIC,YAAY;AACvC,IAAA;IAEAQ,gBAAgBA,CAAC3B,KAAK,EACtB;MACE,OAAO,IAAI,CAAC,SAAS,CAACA,KAAK,CAAC,CAACY,QAAQ;AACvC,IAAA;AAEAgB,IAAAA,gBAAgBA,CAAC5B,KAAK,EAAEY,QAAQ,EAChC;MACE,MAAMF,MAAM,GAAG,IAAI,CAAC,SAAS,CAACV,KAAK,CAAC;AACpC,MAAA,MAAMqB,IAAI,GAAGT,QAAQ,IAAI,IAAI;AAC7B,MAAA,IAAIF,MAAM,CAACE,QAAQ,KAAKS,IAAI,EAAE,OAAO,KAAK;MAC1CX,MAAM,CAACE,QAAQ,GAAGS,IAAI;AACtB,MAAA,IAAI,CAAC,gBAAgB,CAACrB,KAAK,CAAC;AAC5B,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;IACA6B,UAAUA,CAAC7B,KAAK,EAChB;AACE,MAAA,IAAI,CAAC,SAAS,CAACA,KAAK,CAAC;AACrB,MAAA,IAAI,CAAC,gBAAgB,CAACA,KAAK,CAAC;AAC5B,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;AACA8B,IAAAA,cAAcA,CAACtD,OAAO,GAAG,EAAE,EAC3B;AACE,MAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAACgB,MAAM,EAAE,CAAC,CAAChB,OAAO,CAACyC,eAAe,CAAC;AACrE,MAAA,OAAO,IAAI;AACb,IAAA;AAEAc,IAAAA,oBAAoBA,GACpB;MACE,OAAO,IAAI,CAAC,kBAAkB;AAChC,IAAA;AAEAC,IAAAA,mBAAmBA,GACnB;MACE,OAAO,IAAI,CAAC,iBAAiB;AAC/B,IAAA;AAEAC,IAAAA,WAAWA,GACX;MACE,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,YAAY,CAACC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB;AAChH,IAAA;AAEAC,IAAAA,cAAcA,GACd;AACE,MAAA,OAAO,IAAI/D,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AACnC,IAAA;AAEAgE,IAAAA,oBAAoBA,CAAC/B,GAAG,GAAG,EAAE,EAC7B;AACE,MAAA,KAAK,MAAMgC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAACC,IAAI,EAAE,EAAEjC,GAAG,CAACJ,IAAI,CAACoC,QAAQ,CAAC;AACxE,MAAA,OAAOhC,GAAG,CAACkC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC;AAClC,IAAA;IAEAC,kBAAkBA,CAACL,QAAQ,EAC3B;MACE,OAAO,IAAI,CAAC,iBAAiB,CAACM,GAAG,CAACN,QAAQ,CAAC;AAC7C,IAAA;AAEAnD,IAAAA,kBAAkBA,CAAC0D,QAAQ,GAAG,IAAI,EAClC;MACE,IAAIA,QAAQ,KAAK,IAAI,IAAI,OAAOA,QAAQ,KAAK,UAAU,EACvD;AACE,QAAA,MAAM,IAAI/B,SAAS,CAAC,iEAAiE,CAAC;AACxF,MAAA;AACA,MAAA,IAAI,CAAC,gBAAgB,GAAG+B,QAAQ;MAChC,IAAIA,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAEA,QAAQ,CAAC,IAAI,CAAC;AACrD,MAAA,OAAO,IAAI;AACb,IAAA;AAEAzD,IAAAA,gBAAgBA,CAAC0D,OAAO,GAAG,IAAI,EAC/B;MACE,IAAIA,OAAO,KAAK,IAAI,IAAI,OAAOA,OAAO,KAAK,UAAU,EACrD;AACE,QAAA,MAAM,IAAIhC,SAAS,CAAC,+DAA+D,CAAC;AACtF,MAAA;AACA,MAAA,IAAI,CAAC,cAAc,GAAGgC,OAAO;AAC7B,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;AACF;AACA;AACA;AACEC,IAAAA,oBAAoBA,GACpB;AACE,MAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,YAAY,CAACZ,IAAI,KAAK,CAAC,EAAE,OAAO,IAAI;AACvE,MAAA,MAAMa,OAAO,GAAGC,MAAM,CAACC,MAAM,CAAC;AAC5BZ,QAAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB;QACjCxD,KAAK,EAAEmE,MAAM,CAACC,MAAM,CAAC,IAAI,CAACzC,qBAAqB,EAAE,CAAC;AAClD0C,QAAAA,SAAS,EAAEF,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC,OAAO,CAACnC,GAAG,CAACd,KAAK,IAAIA,KAAK,CAACY,QAAQ,CAAC,CAAC;QACnEuC,WAAW,EAAEH,MAAM,CAACC,MAAM,CAAC,CAAE,GAAG,IAAI,CAAC,YAAY,CAAE,CAACV,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC,CAAC;QAC1ExB,eAAe,EAAE,IAAI,CAAC;AACxB,OAAC,CAAC;AACF,MAAA,IAAI,CAAC,YAAY,CAACmC,KAAK,EAAE;AACzB,MAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,MAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;MAC7B,IAAI,CAAC,iBAAiB,CAACC,GAAG,CAACN,OAAO,CAACV,QAAQ,EAAEU,OAAO,CAAC;AACrD,MAAA,OAAOA,OAAO;AAChB,IAAA;;AAEA;AACAO,IAAAA,kBAAkBA,CAACjB,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EACrD;MACE,MAAMU,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAACQ,GAAG,CAAClB,QAAQ,CAAC;AACpD,MAAA,IAAI,CAACU,OAAO,EAAE,OAAO,KAAK;AAC1B,MAAA,IAAI,CAAC,iBAAiB,CAACS,MAAM,CAACnB,QAAQ,CAAC;MACvC,IAAIA,QAAQ,KAAK,IAAI,CAAC,kBAAkB,EAAE,OAAO,KAAK;AACtD,MAAA,IAAI,IAAI,CAAC,eAAe,KAAKA,QAAQ,EACrC;AACE,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAC1B,MAAA;AACA,MAAA,KAAK,MAAMrC,KAAK,IAAI+C,OAAO,CAACI,WAAW,EACvC;AACE,QAAA,IAAInD,KAAK,GAAG,IAAI,CAAC,OAAO,CAACR,MAAM,EAAE,IAAI,CAAC,YAAY,CAACiC,GAAG,CAACzB,KAAK,CAAC;AAC/D,MAAA;AACA,MAAA,IAAI,CAAC,gBAAgB,KAAK+C,OAAO,CAAC9B,eAAe;AACjD,MAAA,IAAI,CAAC,eAAe,EAAE;MACtB,IAAI,CAACwC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAEpB,QAAQ,CAAC;AAC/C,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;IACAqB,iBAAiBA,CAACrB,QAAQ,EAAEsB,KAAK,EAAEnF,OAAO,GAAG,EAAE,EAC/C;MACE,IAAIA,OAAO,CAACoF,KAAK,EAAE,OAAO,IAAI,CAACN,kBAAkB,CAACjB,QAAQ,CAAC;AAC3D,MAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAACM,GAAG,CAACN,QAAQ,CAAC,EAAE,OAAO,KAAK;AACvD,MAAA,IAAI,CAAC,iBAAiB,CAACmB,MAAM,CAACnB,QAAQ,CAAC;MACvC,IAAIA,QAAQ,KAAK,IAAI,CAAC,kBAAkB,EAAE,OAAO,KAAK;AACtD,MAAA,MAAMwB,OAAO,GAAGF,KAAK,YAAYG,KAAK,GAAGH,KAAK,GAAG,IAAIG,KAAK,CAACC,MAAM,CAACJ,KAAK,IAAI,mCAAmC,CAAC,CAAC;AAChH,MAAA,IAAI,CAAC,eAAe,GAAGtB,QAAQ;AAC/B,MAAA,IAAI,CAAC,YAAY,GAAGwB,OAAO;AAC3B,MAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE,IAAI,CAACG,QAAQ,CAACH,OAAO,CAAC;MACxD,IAAI,CAACJ,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAEpB,QAAQ,EAAEwB,OAAO,CAAC;AACzD,MAAA,IAAI,CAAC,mBAAmB,CAACxB,QAAQ,EAAEwB,OAAO,CAAC;AAC3C,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;AACAI,IAAAA,MAAMA,CAACC,OAAO,GAAG,EAAE,EACnB;AACE,MAAA,MAAMnB,OAAO,GAAG,IAAI,CAACD,oBAAoB,EAAE;AAC3C,MAAA,IAAI,CAACC,OAAO,EAAE,OAAO,IAAI;MACzB,IAAI,CAACU,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAEV,OAAO,EAAEmB,OAAO,CAAC;AAChD,MAAA,OAAO,IAAI,CAAC,cAAc,GACtB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAEnB,OAAO,EAAEmB,OAAO,CAAC,GAC3CnB,OAAO;AACb,IAAA;;AAEA;AACF;AACA;AACA;IACEoB,6BAA6BA,CAAC9B,QAAQ,EAAE+B,UAAU,EAAEC,SAAS,EAAE7F,OAAO,GAAG,EAAE,EAC3E;MACE,IAAI,CAAC4F,UAAU,EAAE,MAAM,IAAIvD,SAAS,CAAC,wDAAwD,CAAC;AAC9F,MAAA,IAAIwD,SAAS,KAAK,IAAI,IAAIA,SAAS,KAAKjF,SAAS,EACjD;AACE,QAAA,MAAM,IAAIyB,SAAS,CAAC,yEAAyE,CAAC;AAChG,MAAA;MACA,MAAMyD,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC3B,GAAG,CAACN,QAAQ,CAAC;MACrD,IAAI,CAACiC,QAAQ,IAAIjC,QAAQ,KAAK,IAAI,CAAC,kBAAkB,EACrD;QACE,IAAIiC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAACd,MAAM,CAACnB,QAAQ,CAAC;QACrD,IAAI7D,OAAO,CAAC+F,eAAe,KAAK,KAAK,EAAEC,mBAAmB,CAACH,SAAS,CAAC;QACrE,OAAOrB,MAAM,CAACC,MAAM,CAAC;AAAEwB,UAAAA,SAAS,EAAE,KAAK;UAAEpC,QAAQ;AAAEqC,UAAAA,SAAS,EAAE;AAAK,SAAC,CAAC;AACvE,MAAA;AAEA,MAAA,MAAMA,SAAS,GAAG,IAAI,CAACC,kBAAkB,CAACP,UAAU,CAAC;AACrD,MAAA,IAAI,CAACQ,kBAAkB,CAACR,UAAU,EAAEC,SAAS,CAAC;AAC9C,MAAA,IAAI,CAAC,iBAAiB,GAAGhC,QAAQ;AACjC,MAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,MAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,MAAA,IAAI,CAAC,iBAAiB,CAACmB,MAAM,CAACnB,QAAQ,CAAC;MACvC,KAAK,MAAMwC,eAAe,IAAI,IAAI,CAAC,iBAAiB,CAACvC,IAAI,EAAE,EAC3D;AACE,QAAA,IAAIuC,eAAe,GAAGxC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAACmB,MAAM,CAACqB,eAAe,CAAC;AAChF,MAAA;MACA,IAAI,CAACC,YAAY,EAAE;AACnB,MAAA,IAAI,CAACrB,SAAS,CAAC,kBAAkB,EAAE,IAAI,EAAEpB,QAAQ,EAAE+B,UAAU,EAAEC,SAAS,CAAC;AACzE,MAAA,IAAI,CAAC,oBAAoB,CAAChC,QAAQ,CAAC;MACnC,OAAOW,MAAM,CAACC,MAAM,CAAC;AACnBwB,QAAAA,SAAS,EAAE,IAAI;QACfpC,QAAQ;AACRqC,QAAAA,SAAS,EAAEA,SAAS,KAAKL,SAAS,GAAG,IAAI,GAAGK;AAC9C,OAAC,CAAC;AACJ,IAAA;;AAEA;AACAK,IAAAA,iBAAiBA,CAACX,UAAU,EAAE5F,OAAO,GAAG,EAAE,EAC1C;MACE,IAAI,CAAC4F,UAAU,EAAE,MAAM,IAAIvD,SAAS,CAAC,iDAAiD,CAAC;AACvF,MAAA,MAAMmE,IAAI,GAAG,IAAI,CAACL,kBAAkB,CAACP,UAAU,CAAC;AAChD,MAAA,IAAI,IAAI,CAACa,kBAAkB,CAACb,UAAU,CAAC,EAAE,IAAI,CAACc,sBAAsB,CAACd,UAAU,EAAE5F,OAAO,CAAC;AACzF,MAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;MAC1B,IAAI,IAAI,CAAC,OAAO,CAACgB,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAACA,MAAM,EAAE,IAAI,CAAC;AACzE,MAAA,IAAI,IAAI,CAAC2F,KAAK,KAAKvH,YAAW,CAACwH,KAAK,CAACC,QAAQ,EAAE,IAAI,CAACC,aAAa,EAAE;MACnE,IAAI,CAAC7B,SAAS,CAAC,aAAa,EAAE,IAAI,EAAEW,UAAU,EAAEY,IAAI,CAAC;AACrD,MAAA,OAAOA,IAAI;AACb,IAAA;;AAEA;AACAO,IAAAA,KAAKA,GACL;AACE,MAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,CAAC,EACjC;AACE,QAAA,MAAM5B,KAAK,GAAG,IAAIG,KAAK,CAAC,kDAAkD,CAAC;QAC3EH,KAAK,CAAC6B,IAAI,GAAG,gCAAgC;AAC7C,QAAA,OAAOC,OAAO,CAACC,MAAM,CAAC/B,KAAK,CAAC;AAC9B,MAAA;AACA,MAAA,MAAMtB,QAAQ,GAAG,IAAI,CAAC,kBAAkB;AACxC,MAAA,IAAI,IAAI,CAAC,iBAAiB,IAAIA,QAAQ,IAAI,IAAI,CAACsD,UAAU,EAAE,EAAE,OAAOF,OAAO,CAACG,OAAO,CAAC,IAAI,CAAC;AACzF,MAAA,IAAI,IAAI,CAAC,eAAe,KAAKvD,QAAQ,EAAE,OAAOoD,OAAO,CAACC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/E,MAAA,OAAO,IAAID,OAAO,CAAC,CAACG,OAAO,EAAEF,MAAM,KACnC;AACE,QAAA,IAAI,CAAC,aAAa,CAACzF,IAAI,CAAC;UAAEoC,QAAQ;UAAEuD,OAAO;AAAEF,UAAAA;AAAO,SAAC,CAAC;AACxD,MAAA,CAAC,CAAC;AACJ,IAAA;IAEA,YAAYG,CAAC7F,KAAK,EAAEuB,IAAI,GAAG,EAAE,EAAEhB,IAAI,GAAG,EAAE,EACxC;MACE,OAAO;AACLA,QAAAA,IAAI,EAAEI,qBAAqB,CAACJ,IAAI,CAAC;AACjCK,QAAAA,QAAQ,EAAE,IAAI;AACdT,QAAAA,KAAK,EAAE,IAAI2F,wBAAwB,CAAC,IAAI,EAAE9F,KAAK,EAAE;AAAEuB,UAAAA;SAAM;OAC1D;AACH,IAAA;IAEA,SAASwE,CAAC/F,KAAK,EACf;MACE,IAAI,CAACJ,MAAM,CAACC,SAAS,CAACG,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAI,IAAI,CAAC,OAAO,CAACR,MAAM,EACzE;AACE,QAAA,MAAM,IAAIM,UAAU,CAAC,CAAA,yBAAA,EAA4BE,KAAK,mBAAmB,CAAC;AAC5E,MAAA;AACA,MAAA,OAAO,IAAI,CAAC,OAAO,CAACA,KAAK,CAAC;AAC5B,IAAA;IAEA,cAAcgG,CAACtG,KAAK,EACpB;MACE,IAAI,CAACA,KAAK,EAAE;MACZ,KAAK,IAAIM,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGiG,IAAI,CAACC,GAAG,CAACxG,KAAK,CAACF,MAAM,EAAE,IAAI,CAAC,OAAO,CAACA,MAAM,CAAC,EAAEQ,KAAK,EAAE,EAChF;AACE,QAAA,IAAI,CAAC,OAAO,CAACA,KAAK,CAAC,CAACG,KAAK,CAACuB,gBAAgB,CAAChC,KAAK,CAACM,KAAK,CAAC,CAAC;AAC1D,MAAA;AACF,IAAA;IAEA,gBAAgBmG,CAACnG,KAAK,EACtB;AACE,MAAA,IAAI,CAAC,iBAAiB,CAAC,CAAEA,KAAK,CAAE,CAAC;AACnC,IAAA;AAEA,IAAA,gBAAgBoG,CAACzG,KAAK,EAAEsB,eAAe,GAAG,KAAK,EAC/C;MACE,MAAMrC,MAAM,GAAG,EAAE;AACjB,MAAA,KAAK,IAAIoB,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGL,KAAK,EAAEK,KAAK,EAAE,EAAEpB,MAAM,CAACqB,IAAI,CAACD,KAAK,CAAC;AAC9D,MAAA,IAAI,CAAC,iBAAiB,CAACpB,MAAM,EAAEqC,eAAe,CAAC;AACjD,IAAA;AAEA,IAAA,iBAAiBoF,CAACzH,MAAM,EAAEqC,eAAe,GAAG,KAAK,EACjD;MACE,MAAMqF,OAAO,GAAG,EAAE;AAClB,MAAA,KAAK,MAAMtG,KAAK,IAAIpB,MAAM,EAC1B;QACE,IAAI,CAACgB,MAAM,CAACC,SAAS,CAACG,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAI,IAAI,CAAC,OAAO,CAACR,MAAM,EAAE;AAC3E,QAAA,IAAI,CAAC,YAAY,CAACiC,GAAG,CAACzB,KAAK,CAAC;AAC5BsG,QAAAA,OAAO,CAACrG,IAAI,CAACD,KAAK,CAAC;AACrB,MAAA;AACA,MAAA,IAAI,CAACsG,OAAO,CAAC9G,MAAM,IAAI,CAACyB,eAAe,EAAE;AACzC,MAAA,IAAI,CAAC,gBAAgB,KAAKA,eAAe;AACzC,MAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,MAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,MAAA,IAAI,CAAC,kBAAkB,IAAI,CAAC;AAC5B,MAAA,IAAI,CAAC,eAAe,EAAE;MACtB,IAAI,CAACwC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAET,MAAM,CAACC,MAAM,CAACqD,OAAO,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAEtD,MAAM,CAACC,MAAM,CAAC;QACjGhC,eAAe,EAAE,IAAI,CAAC;AACxB,OAAC,CAAC,CAAC;AACL,IAAA;IAEA,eAAesF,GACf;AACE,MAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC3B,MAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,MAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC/B,IAAA;IAEA,oBAAoBC,CAACnE,QAAQ,EAC7B;MACE,MAAMoE,OAAO,GAAG,EAAE;AAClB,MAAA,KAAK,MAAMC,MAAM,IAAI,IAAI,CAAC,aAAa,EACvC;AACE,QAAA,IAAIA,MAAM,CAACrE,QAAQ,IAAIA,QAAQ,EAAEqE,MAAM,CAACd,OAAO,CAAC,IAAI,CAAC,CAAC,KACjDa,OAAO,CAACxG,IAAI,CAACyG,MAAM,CAAC;AAC3B,MAAA;AACA,MAAA,IAAI,CAAC,aAAa,GAAGD,OAAO;AAC9B,IAAA;AAEA,IAAA,mBAAmBE,CAACtE,QAAQ,EAAEsB,KAAK,EACnC;MACE,MAAM8C,OAAO,GAAG,EAAE;AAClB,MAAA,KAAK,MAAMC,MAAM,IAAI,IAAI,CAAC,aAAa,EACvC;AACE,QAAA,IAAIA,MAAM,CAACrE,QAAQ,IAAIA,QAAQ,EAAEqE,MAAM,CAAChB,MAAM,CAAC/B,KAAK,CAAC,CAAC,KACjD8C,OAAO,CAACxG,IAAI,CAACyG,MAAM,CAAC;AAC3B,MAAA;AACA,MAAA,IAAI,CAAC,aAAa,GAAGD,OAAO;AAC9B,IAAA;GAGD;AADQG,EAAAA,OAAO,GAAG,eAAe;EAACtI,WAAAA,GAAA;IAAA,KAAA,CAAAb,mBAAA,GAAAI,UAAA,EAAA;AAAA,EAAA;AAAA,CAAA,EAAA;AAGnC,SAAS2G,mBAAmBA,CAAC/E,KAAK,EAClC;AACE,EAAA,IAAI,CAACA,KAAK,IAAK,OAAOA,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,UAAW,EAAE;AAC1E,EAAA,MAAMoH,OAAO,GAAGpH,KAAK,CAACqH,OAAO,IAAIrH,KAAK,CAACsH,OAAO,IAAItH,KAAK,CAACoH,OAAO,IAAIpH,KAAK,CAACuH,OAAO;EAChF,IAAI,OAAOH,OAAO,KAAK,UAAU,EAAEA,OAAO,CAACI,IAAI,CAACxH,KAAK,CAAC;AACxD;;;;"}
1
+ {"version":3,"file":"CjsTextureArrayRes.js","sources":["../../../src/texture/CjsTextureArrayRes.js"],"sourcesContent":["import { type } from \"@carbonenginejs/runtime-utils/schema\";\nimport { CjsResource } from \"../CjsResource.js\";\nimport { normalizeResourcePath } from \"../resourcePath.js\";\nimport { CjsTextureParameterProxy } from \"./CjsTextureParameterProxy.js\";\n\n/**\n * Mutable runtime aggregate for an ordered texture-array request.\n *\n * Private engine-bridge layer proxies only invalidate this parent. A resource\n * manager or engine scheduler consumes the coalesced update on a later frame\n * and prepares the corresponding immutable/cached texture-array payload.\n */\n@type.define({ className: \"CjsTextureArrayRes\", family: \"resource\" })\nexport class CjsTextureArrayRes extends CjsResource\n{\n #layers = [];\n #dirtyLayers = new Set();\n #requestedRevision = 0;\n #preparedRevision = 0;\n #updateScheduled = false;\n #topologyChanged = false;\n #inFlightRequests = new Map();\n #readyWaiters = [];\n #failedRevision = 0;\n #failedError = null;\n #updateScheduler = null;\n #updateHandler = null;\n\n constructor(values = null)\n {\n const options = values && typeof values === \"object\" && !Array.isArray(values) ? values : {};\n const resourceValues = { ...options };\n delete resourceValues.layers;\n delete resourceValues.paths;\n delete resourceValues.layerCount;\n delete resourceValues.layerNames;\n delete resourceValues.updateScheduler;\n delete resourceValues.updateHandler;\n super(resourceValues);\n\n if (options.updateScheduler) this.SetUpdateScheduler(options.updateScheduler);\n if (options.updateHandler) this.SetUpdateHandler(options.updateHandler);\n\n const paths = options.layers || options.paths;\n if (paths !== undefined)\n {\n this.SetLayerResourcePaths(paths, options.layerNames);\n }\n else if (options.layerCount !== undefined)\n {\n this.SetLayerCount(options.layerCount, options.layerNames);\n }\n }\n\n GetLayerCount()\n {\n return this.#layers.length;\n }\n\n SetLayerCount(value, names = null)\n {\n const count = Number(value);\n if (!Number.isInteger(count) || count < 1)\n {\n throw new RangeError(\"CjsTextureArrayRes layer count must be a positive integer.\");\n }\n if (count === this.#layers.length)\n {\n this.#SetLayerNames(names);\n return false;\n }\n\n const previousCount = this.#layers.length;\n if (count < previousCount)\n {\n this.#layers.length = count;\n }\n else\n {\n for (let layer = previousCount; layer < count; layer++)\n {\n this.#layers.push(this.#CreateLayer(layer, names?.[layer]));\n }\n }\n this.#SetLayerNames(names);\n this.#InvalidateRange(count, true);\n return true;\n }\n\n GetLayerParameter(layer)\n {\n return this.#GetLayer(layer).proxy;\n }\n\n GetLayerParameters(out = [])\n {\n for (const layer of this.#layers) out.push(layer.proxy);\n return out;\n }\n\n GetLayerResourcePath(layer)\n {\n return this.#GetLayer(layer).path;\n }\n\n GetLayerResourcePaths(out = [])\n {\n for (const layer of this.#layers) out.push(layer.path);\n return out;\n }\n\n SetLayerResourcePath(layer, value)\n {\n const record = this.#GetLayer(layer);\n const path = normalizeResourcePath(value);\n if (path === record.path) return false;\n record.path = path;\n record.resource = null;\n this.#InvalidateLayer(layer);\n return true;\n }\n\n SetLayerResourcePaths(values, names = null)\n {\n if (!Array.isArray(values) || values.length === 0)\n {\n throw new TypeError(\"CjsTextureArrayRes layers must be a non-empty array of resource paths.\");\n }\n\n const paths = values.map(value => normalizeResourcePath(\n value && typeof value === \"object\"\n ? value.resourcePath ?? value.path ?? value.GetPath?.() ?? \"\"\n : value\n ));\n const topologyChanged = paths.length !== this.#layers.length;\n let contentChanged = topologyChanged;\n let namesChanged = false;\n const changedLayers = new Set();\n const next = [];\n for (let layer = 0; layer < paths.length; layer++)\n {\n const current = this.#layers[layer];\n const name = names?.[layer] ?? current?.proxy?.GetParameterName?.() ?? \"\";\n if (!current)\n {\n next.push(this.#CreateLayer(layer, name, paths[layer]));\n }\n else\n {\n if (current.path !== paths[layer])\n {\n current.path = paths[layer];\n current.resource = null;\n contentChanged = true;\n changedLayers.add(layer);\n }\n if (current.proxy.SetParameterName(name)) namesChanged = true;\n next.push(current);\n }\n }\n this.#layers = next;\n if (topologyChanged)\n {\n this.#InvalidateRange(paths.length, true);\n }\n else if (contentChanged)\n {\n this.#InvalidateLayers(changedLayers);\n }\n return contentChanged || namesChanged;\n }\n\n GetLayerResource(layer)\n {\n return this.#GetLayer(layer).resource;\n }\n\n SetLayerResource(layer, resource)\n {\n const record = this.#GetLayer(layer);\n const next = resource ?? null;\n if (record.resource === next) return false;\n record.resource = next;\n this.#InvalidateLayer(layer);\n return true;\n }\n\n /** Invalidate a layer whose resolved resource changed without changing identity. */\n TouchLayer(layer)\n {\n this.#GetLayer(layer);\n this.#InvalidateLayer(layer);\n return this;\n }\n\n /** Invalidate every current layer, for example after an adapter generation loss. */\n TouchAllLayers(options = {})\n {\n this.#InvalidateRange(this.#layers.length, !!options.topologyChanged);\n return this;\n }\n\n GetRequestedRevision()\n {\n return this.#requestedRevision;\n }\n\n GetPreparedRevision()\n {\n return this.#preparedRevision;\n }\n\n NeedsUpdate()\n {\n return this.#updateScheduled || this.#dirtyLayers.size > 0 || this.#preparedRevision < this.#requestedRevision;\n }\n\n GetDirtyLayers()\n {\n return new Set(this.#dirtyLayers);\n }\n\n GetInFlightRevisions(out = [])\n {\n for (const revision of this.#inFlightRequests.keys()) out.push(revision);\n return out.sort((a, b) => a - b);\n }\n\n IsRevisionInFlight(revision)\n {\n return this.#inFlightRequests.has(revision);\n }\n\n SetUpdateScheduler(schedule = null)\n {\n if (schedule !== null && typeof schedule !== \"function\")\n {\n throw new TypeError(\"CjsTextureArrayRes update scheduler must be a function or null.\");\n }\n this.#updateScheduler = schedule;\n if (schedule && this.#updateScheduled) schedule(this);\n return this;\n }\n\n SetUpdateHandler(handler = null)\n {\n if (handler !== null && typeof handler !== \"function\")\n {\n throw new TypeError(\"CjsTextureArrayRes update handler must be a function or null.\");\n }\n this.#updateHandler = handler;\n return this;\n }\n\n /**\n * Consume all proxy changes as one immutable request snapshot.\n * A frame scheduler should call this at most once per parent per frame.\n */\n ConsumeUpdateRequest()\n {\n if (!this.#updateScheduled && this.#dirtyLayers.size === 0) return null;\n const request = Object.freeze({\n revision: this.#requestedRevision,\n paths: Object.freeze(this.GetLayerResourcePaths()),\n resources: Object.freeze(this.#layers.map(layer => layer.resource)),\n dirtyLayers: Object.freeze([ ...this.#dirtyLayers ].sort((a, b) => a - b)),\n topologyChanged: this.#topologyChanged\n });\n this.#dirtyLayers.clear();\n this.#topologyChanged = false;\n this.#updateScheduled = false;\n this.#inFlightRequests.set(request.revision, request);\n return request;\n }\n\n /** Requeue a consumed current request after cancellation, loss, or retryable failure. */\n RetryUpdateRequest(revision = this.#requestedRevision)\n {\n const request = this.#inFlightRequests.get(revision);\n if (!request) return false;\n this.#inFlightRequests.delete(revision);\n if (revision !== this.#requestedRevision) return false;\n if (this.#failedRevision === revision)\n {\n this.#failedRevision = 0;\n this.#failedError = null;\n }\n for (const layer of request.dirtyLayers)\n {\n if (layer < this.#layers.length) this.#dirtyLayers.add(layer);\n }\n this.#topologyChanged ||= request.topologyChanged;\n this.#ScheduleUpdate();\n this.EmitEvent(\"revisionretry\", this, revision);\n return true;\n }\n\n /** Complete a consumed request as failed, optionally making it retryable. */\n FailUpdateRequest(revision, error, options = {})\n {\n if (options.retry) return this.RetryUpdateRequest(revision);\n if (!this.#inFlightRequests.has(revision)) return false;\n this.#inFlightRequests.delete(revision);\n if (revision !== this.#requestedRevision) return false;\n const failure = error instanceof Error ? error : new Error(String(error ?? \"Texture array preparation failed.\"));\n this.#failedRevision = revision;\n this.#failedError = failure;\n if (this.#preparedRevision === 0) this.SetError(failure);\n this.EmitEvent(\"revisionfailed\", this, revision, failure);\n this.#RejectReadyWaiters(revision, failure);\n return true;\n }\n\n /** Run the registered update handler for the current coalesced frame request. */\n Update(context = {})\n {\n const request = this.ConsumeUpdateRequest();\n if (!request) return null;\n this.EmitEvent(\"update\", this, request, context);\n return this.#updateHandler\n ? this.#updateHandler(this, request, context)\n : request;\n }\n\n /**\n * Atomically publish an opaque adapter allocation with its prepared revision.\n * The caller owns disposal of a successfully displaced allocation.\n */\n CommitPreparedAdapterRevision(revision, adapterKey, candidate, options = {})\n {\n if (!adapterKey) throw new TypeError(\"CjsTextureArrayRes adapter publication requires a key.\");\n if (candidate === null || candidate === undefined)\n {\n throw new TypeError(\"CjsTextureArrayRes adapter publication requires a candidate allocation.\");\n }\n const inFlight = this.#inFlightRequests.has(revision);\n if (!inFlight || revision !== this.#requestedRevision)\n {\n if (inFlight) this.#inFlightRequests.delete(revision);\n if (options.destroyRejected !== false) DestroyAdapterValue(candidate);\n return Object.freeze({ published: false, revision, displaced: null });\n }\n\n const displaced = this.GetAdapterResource(adapterKey);\n this.SetAdapterResource(adapterKey, candidate);\n this.#preparedRevision = revision;\n this.#failedRevision = 0;\n this.#failedError = null;\n this.#inFlightRequests.delete(revision);\n for (const pendingRevision of this.#inFlightRequests.keys())\n {\n if (pendingRevision < revision) this.#inFlightRequests.delete(pendingRevision);\n }\n this.MarkPrepared();\n this.EmitEvent(\"revisionprepared\", this, revision, adapterKey, candidate);\n this.#ResolveReadyWaiters(revision);\n return Object.freeze({\n published: true,\n revision,\n displaced: displaced === candidate ? null : displaced\n });\n }\n\n /** Destroy an unusable adapter allocation and request a complete rebuild. */\n HandleAdapterLoss(adapterKey, options = {})\n {\n if (!adapterKey) throw new TypeError(\"CjsTextureArrayRes adapter loss requires a key.\");\n const lost = this.GetAdapterResource(adapterKey);\n if (this.HasAdapterResource(adapterKey)) this.DestroyAdapterResource(adapterKey, options);\n this.#preparedRevision = 0;\n if (this.#layers.length) this.#InvalidateRange(this.#layers.length, true);\n if (this.state === CjsResource.State.PREPARED) this.MarkPreparing();\n this.EmitEvent(\"adapterlost\", this, adapterKey, lost);\n return lost;\n }\n\n /** Resolve when the generation requested at call time has been prepared. */\n Ready()\n {\n if (this.#requestedRevision === 0)\n {\n const error = new Error(\"Texture array resource has no configured layers.\");\n error.code = \"CJS_TEXTURE_ARRAY_UNCONFIGURED\";\n return Promise.reject(error);\n }\n const revision = this.#requestedRevision;\n if (this.#preparedRevision >= revision && this.IsPrepared()) return Promise.resolve(this);\n if (this.#failedRevision === revision) return Promise.reject(this.#failedError);\n return new Promise((resolve, reject) =>\n {\n this.#readyWaiters.push({ revision, resolve, reject });\n });\n }\n\n #CreateLayer(layer, name = \"\", path = \"\")\n {\n return {\n path: normalizeResourcePath(path),\n resource: null,\n proxy: new CjsTextureParameterProxy(this, layer, { name })\n };\n }\n\n #GetLayer(layer)\n {\n if (!Number.isInteger(layer) || layer < 0 || layer >= this.#layers.length)\n {\n throw new RangeError(`CjsTextureArrayRes layer ${layer} is out of range.`);\n }\n return this.#layers[layer];\n }\n\n #SetLayerNames(names)\n {\n if (!names) return;\n for (let layer = 0; layer < Math.min(names.length, this.#layers.length); layer++)\n {\n this.#layers[layer].proxy.SetParameterName(names[layer]);\n }\n }\n\n #InvalidateLayer(layer)\n {\n this.#InvalidateLayers([ layer ]);\n }\n\n #InvalidateRange(count, topologyChanged = false)\n {\n const layers = [];\n for (let layer = 0; layer < count; layer++) layers.push(layer);\n this.#InvalidateLayers(layers, topologyChanged);\n }\n\n #InvalidateLayers(layers, topologyChanged = false)\n {\n const changed = [];\n for (const layer of layers)\n {\n if (!Number.isInteger(layer) || layer < 0 || layer >= this.#layers.length) continue;\n this.#dirtyLayers.add(layer);\n changed.push(layer);\n }\n if (!changed.length && !topologyChanged) return;\n this.#topologyChanged ||= topologyChanged;\n this.#failedRevision = 0;\n this.#failedError = null;\n this.#requestedRevision += 1;\n this.#ScheduleUpdate();\n this.EmitEvent(\"invalidated\", this, Object.freeze(changed), this.#requestedRevision, Object.freeze({\n topologyChanged: this.#topologyChanged\n }));\n }\n\n #ScheduleUpdate()\n {\n if (this.#updateScheduled) return;\n this.#updateScheduled = true;\n this.#updateScheduler?.(this);\n }\n\n #ResolveReadyWaiters(revision)\n {\n const pending = [];\n for (const waiter of this.#readyWaiters)\n {\n if (waiter.revision <= revision) waiter.resolve(this);\n else pending.push(waiter);\n }\n this.#readyWaiters = pending;\n }\n\n #RejectReadyWaiters(revision, error)\n {\n const pending = [];\n for (const waiter of this.#readyWaiters)\n {\n if (waiter.revision <= revision) waiter.reject(error);\n else pending.push(waiter);\n }\n this.#readyWaiters = pending;\n }\n\n static payload = \"texture-array\";\n}\n\nfunction DestroyAdapterValue(value)\n{\n if (!value || (typeof value !== \"object\" && typeof value !== \"function\")) return;\n const destroy = value.Destroy || value.Dispose || value.destroy || value.dispose;\n if (typeof destroy === \"function\") destroy.call(value);\n}\n"],"names":["_CjsTextureArrayRes","_identity","CjsTextureArrayRes","CjsResource","_initClass","_applyDecs","type","define","className","family","c","Set","Map","constructor","values","options","Array","isArray","resourceValues","layers","paths","layerCount","layerNames","updateScheduler","updateHandler","SetUpdateScheduler","SetUpdateHandler","undefined","SetLayerResourcePaths","SetLayerCount","GetLayerCount","length","value","names","count","Number","isInteger","RangeError","previousCount","layer","push","GetLayerParameter","proxy","GetLayerParameters","out","GetLayerResourcePath","path","GetLayerResourcePaths","SetLayerResourcePath","record","normalizeResourcePath","resource","TypeError","map","resourcePath","GetPath","topologyChanged","contentChanged","namesChanged","changedLayers","next","current","name","GetParameterName","add","SetParameterName","GetLayerResource","SetLayerResource","TouchLayer","TouchAllLayers","GetRequestedRevision","GetPreparedRevision","NeedsUpdate","size","GetDirtyLayers","GetInFlightRevisions","revision","keys","sort","a","b","IsRevisionInFlight","has","schedule","handler","ConsumeUpdateRequest","request","Object","freeze","resources","dirtyLayers","clear","set","RetryUpdateRequest","get","delete","EmitEvent","FailUpdateRequest","error","retry","failure","Error","String","SetError","Update","context","CommitPreparedAdapterRevision","adapterKey","candidate","inFlight","destroyRejected","DestroyAdapterValue","published","displaced","GetAdapterResource","SetAdapterResource","pendingRevision","MarkPrepared","HandleAdapterLoss","lost","HasAdapterResource","DestroyAdapterResource","state","State","PREPARED","MarkPreparing","Ready","code","Promise","reject","IsPrepared","resolve","#CreateLayer","CjsTextureParameterProxy","#GetLayer","#SetLayerNames","Math","min","#InvalidateLayer","#InvalidateRange","#InvalidateLayers","changed","#ScheduleUpdate","#ResolveReadyWaiters","pending","waiter","#RejectReadyWaiters","payload","destroy","Destroy","Dispose","dispose","call"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { CjsEventEmitter } from '@carbonenginejs/core-types/model';
1
+ import { CjsEventEmitter } from '@carbonenginejs/runtime-utils/model';
2
2
 
3
3
  /**
4
4
  * Runtime-only internal texture parameter facade for one array layer.
@@ -1 +1 @@
1
- {"version":3,"file":"CjsTextureParameterProxy.js","sources":["../../../src/texture/CjsTextureParameterProxy.js"],"sourcesContent":["import { CjsEventEmitter } from \"@carbonenginejs/core-types/model\";\n\n/**\n * Runtime-only internal texture parameter facade for one array layer.\n *\n * The proxy mirrors the public texture-parameter path API while delegating\n * storage, invalidation, readiness, and adapter ownership to its parent array.\n * Engines bridge public parameters into it; it does not replace persisted\n * parameter entries or their individual source resources. It deliberately\n * carries no shader metadata or backend objects.\n */\nexport class CjsTextureParameterProxy extends CjsEventEmitter\n{\n #parent;\n #layer;\n #name;\n\n constructor(parent, layer, options = {})\n {\n super();\n if (!parent || typeof parent.SetLayerResourcePath !== \"function\")\n {\n throw new TypeError(\"CjsTextureParameterProxy requires a CjsTextureArrayRes-compatible parent.\");\n }\n if (!Number.isInteger(layer) || layer < 0)\n {\n throw new RangeError(\"CjsTextureParameterProxy layer must be a non-negative integer.\");\n }\n\n this.#parent = parent;\n this.#layer = layer;\n this.#name = options.name === undefined ? \"\" : String(options.name);\n }\n\n get resourcePath()\n {\n return this.GetResourcePath();\n }\n\n /** The aggregate texture resource used by the shader. */\n get textureRes()\n {\n return this.#parent;\n }\n\n /** Compatibility alias for textureRes. */\n get res()\n {\n return this.#parent;\n }\n\n /** Compatibility alias used by Carbon-shaped texture parameters. */\n get resource()\n {\n return this.#parent;\n }\n\n set resourcePath(value)\n {\n this.SetResourcePath(value);\n }\n\n get name()\n {\n return this.#name;\n }\n\n set name(value)\n {\n this.SetParameterName(value);\n }\n\n GetParent()\n {\n return this.#parent;\n }\n\n GetLayerIndex()\n {\n return this.#layer;\n }\n\n GetParameterName()\n {\n return this.#name;\n }\n\n SetParameterName(value)\n {\n const next = value === null || value === undefined ? \"\" : String(value);\n if (next === this.#name) return false;\n const previous = this.#name;\n this.#name = next;\n this.EmitEvent(\"changed\", this, \"name\", next, previous);\n return true;\n }\n\n GetResourcePath()\n {\n return this.#parent.GetLayerResourcePath(this.#layer);\n }\n\n SetResourcePath(value)\n {\n const previous = this.GetResourcePath();\n if (!this.#parent.SetLayerResourcePath(this.#layer, value)) return false;\n this.EmitEvent(\"changed\", this, \"resourcepath\", this.GetResourcePath(), previous);\n return true;\n }\n\n GetValue()\n {\n return this.GetResourcePath();\n }\n\n SetValue(value)\n {\n if (value === undefined) return false;\n return this.SetResourcePath(value);\n }\n\n EqualsValue(value)\n {\n return String(value ?? \"\").trim().replace(/\\\\/gu, \"/\").replace(/\\/+/gu, \"/\").toLowerCase() === this.GetResourcePath();\n }\n\n /** Return the aggregate texture resource used by the shader binding. */\n GetResource()\n {\n return this.#parent;\n }\n\n /** Return the optional resolved source resource for this layer. */\n GetSourceResource()\n {\n return this.#parent.GetLayerResource(this.#layer);\n }\n\n SetSourceResource(resource)\n {\n const previous = this.GetSourceResource();\n if (!this.#parent.SetLayerResource(this.#layer, resource)) return false;\n this.EmitEvent(\"changed\", this, \"sourceresource\", this.GetSourceResource(), previous);\n return true;\n }\n\n SetResource(resource)\n {\n return this.SetSourceResource(resource);\n }\n\n /** Invalidate this layer after an in-place source content revision. */\n Touch()\n {\n this.#parent.TouchLayer(this.#layer);\n this.EmitEvent(\"changed\", this, \"sourcerevision\", this.GetSourceResource());\n return this;\n }\n\n GetResources(out = [])\n {\n if (!out.includes(this.#parent)) out.push(this.#parent);\n return out;\n }\n\n IsPrepared()\n {\n return this.#parent.IsPrepared();\n }\n\n IsGood()\n {\n return this.#parent.IsGood();\n }\n\n Ready(options = {})\n {\n return this.#parent.Ready(options);\n }\n}\n"],"names":["CjsTextureParameterProxy","CjsEventEmitter","constructor","parent","layer","options","SetLayerResourcePath","TypeError","Number","isInteger","RangeError","name","undefined","String","resourcePath","GetResourcePath","textureRes","res","resource","value","SetResourcePath","SetParameterName","GetParent","GetLayerIndex","GetParameterName","next","previous","EmitEvent","GetLayerResourcePath","GetValue","SetValue","EqualsValue","trim","replace","toLowerCase","GetResource","GetSourceResource","GetLayerResource","SetSourceResource","SetLayerResource","SetResource","Touch","TouchLayer","GetResources","out","includes","push","IsPrepared","IsGood","Ready"],"mappings":"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"}
1
+ {"version":3,"file":"CjsTextureParameterProxy.js","sources":["../../../src/texture/CjsTextureParameterProxy.js"],"sourcesContent":["import { CjsEventEmitter } from \"@carbonenginejs/runtime-utils/model\";\n\n/**\n * Runtime-only internal texture parameter facade for one array layer.\n *\n * The proxy mirrors the public texture-parameter path API while delegating\n * storage, invalidation, readiness, and adapter ownership to its parent array.\n * Engines bridge public parameters into it; it does not replace persisted\n * parameter entries or their individual source resources. It deliberately\n * carries no shader metadata or backend objects.\n */\nexport class CjsTextureParameterProxy extends CjsEventEmitter\n{\n #parent;\n #layer;\n #name;\n\n constructor(parent, layer, options = {})\n {\n super();\n if (!parent || typeof parent.SetLayerResourcePath !== \"function\")\n {\n throw new TypeError(\"CjsTextureParameterProxy requires a CjsTextureArrayRes-compatible parent.\");\n }\n if (!Number.isInteger(layer) || layer < 0)\n {\n throw new RangeError(\"CjsTextureParameterProxy layer must be a non-negative integer.\");\n }\n\n this.#parent = parent;\n this.#layer = layer;\n this.#name = options.name === undefined ? \"\" : String(options.name);\n }\n\n get resourcePath()\n {\n return this.GetResourcePath();\n }\n\n /** The aggregate texture resource used by the shader. */\n get textureRes()\n {\n return this.#parent;\n }\n\n /** Compatibility alias for textureRes. */\n get res()\n {\n return this.#parent;\n }\n\n /** Compatibility alias used by Carbon-shaped texture parameters. */\n get resource()\n {\n return this.#parent;\n }\n\n set resourcePath(value)\n {\n this.SetResourcePath(value);\n }\n\n get name()\n {\n return this.#name;\n }\n\n set name(value)\n {\n this.SetParameterName(value);\n }\n\n GetParent()\n {\n return this.#parent;\n }\n\n GetLayerIndex()\n {\n return this.#layer;\n }\n\n GetParameterName()\n {\n return this.#name;\n }\n\n SetParameterName(value)\n {\n const next = value === null || value === undefined ? \"\" : String(value);\n if (next === this.#name) return false;\n const previous = this.#name;\n this.#name = next;\n this.EmitEvent(\"changed\", this, \"name\", next, previous);\n return true;\n }\n\n GetResourcePath()\n {\n return this.#parent.GetLayerResourcePath(this.#layer);\n }\n\n SetResourcePath(value)\n {\n const previous = this.GetResourcePath();\n if (!this.#parent.SetLayerResourcePath(this.#layer, value)) return false;\n this.EmitEvent(\"changed\", this, \"resourcepath\", this.GetResourcePath(), previous);\n return true;\n }\n\n GetValue()\n {\n return this.GetResourcePath();\n }\n\n SetValue(value)\n {\n if (value === undefined) return false;\n return this.SetResourcePath(value);\n }\n\n EqualsValue(value)\n {\n return String(value ?? \"\").trim().replace(/\\\\/gu, \"/\").replace(/\\/+/gu, \"/\").toLowerCase() === this.GetResourcePath();\n }\n\n /** Return the aggregate texture resource used by the shader binding. */\n GetResource()\n {\n return this.#parent;\n }\n\n /** Return the optional resolved source resource for this layer. */\n GetSourceResource()\n {\n return this.#parent.GetLayerResource(this.#layer);\n }\n\n SetSourceResource(resource)\n {\n const previous = this.GetSourceResource();\n if (!this.#parent.SetLayerResource(this.#layer, resource)) return false;\n this.EmitEvent(\"changed\", this, \"sourceresource\", this.GetSourceResource(), previous);\n return true;\n }\n\n SetResource(resource)\n {\n return this.SetSourceResource(resource);\n }\n\n /** Invalidate this layer after an in-place source content revision. */\n Touch()\n {\n this.#parent.TouchLayer(this.#layer);\n this.EmitEvent(\"changed\", this, \"sourcerevision\", this.GetSourceResource());\n return this;\n }\n\n GetResources(out = [])\n {\n if (!out.includes(this.#parent)) out.push(this.#parent);\n return out;\n }\n\n IsPrepared()\n {\n return this.#parent.IsPrepared();\n }\n\n IsGood()\n {\n return this.#parent.IsGood();\n }\n\n Ready(options = {})\n {\n return this.#parent.Ready(options);\n }\n}\n"],"names":["CjsTextureParameterProxy","CjsEventEmitter","constructor","parent","layer","options","SetLayerResourcePath","TypeError","Number","isInteger","RangeError","name","undefined","String","resourcePath","GetResourcePath","textureRes","res","resource","value","SetResourcePath","SetParameterName","GetParent","GetLayerIndex","GetParameterName","next","previous","EmitEvent","GetLayerResourcePath","GetValue","SetValue","EqualsValue","trim","replace","toLowerCase","GetResource","GetSourceResource","GetLayerResource","SetSourceResource","SetLayerResource","SetResource","Touch","TouchLayer","GetResources","out","includes","push","IsPrepared","IsGood","Ready"],"mappings":"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"}
package/docs/README.md CHANGED
@@ -24,8 +24,8 @@ packages realize that payload into backend objects.
24
24
 
25
25
  ## Where it fits
26
26
 
27
- - Foundations consumed: `@carbonenginejs/core-types` (event emitter, model
28
- contracts) and `@carbonenginejs/core-math` where formats need math values.
27
+ - Foundations consumed: `@carbonenginejs/runtime-utils` (event emitter, model
28
+ contracts) and `@carbonenginejs/runtime-utils` where formats need math values.
29
29
  - Normal consumers: `runtime-core` (configures and exposes a `CjsResMan`),
30
30
  `runtime-trinity` and `runtime-sof` (request GPU-free objects), and engine
31
31
  packages (`engine-webgpu`, future WebGL engines) that realize prepared
@@ -60,8 +60,12 @@ packages realize that payload into backend objects.
60
60
  `Tr2TexturePipeline` CPU steps and `Tr2TextureLodManager` membership.
61
61
  - [reference/events.md](reference/events.md): the `CjsEventEmitter` contract
62
62
  and event memory rules.
63
+ - [reference/classes/README.md](reference/classes/README.md): the searchable
64
+ one-sentence class-purpose catalog.
63
65
  - [formats/README.md](formats/README.md): format import map and per-format
64
66
  output notes.
67
+ - [formats/gr2.md](formats/gr2.md): Granny GR2/GSF reading, output modes,
68
+ conversions, graph shape, and class hydration.
65
69
  - [formats/wwise.md](formats/wwise.md): Wwise soundbank and media readers.
66
70
  - [formats/stl.md](formats/stl.md): STL geometry export.
67
71
  - [formats/provenance.md](formats/provenance.md): format ownership, fork
@@ -42,7 +42,7 @@ historical mapping.
42
42
  source/read/resource deduplication, object loader dispatch, and prefetch.
43
43
  - `CjsTextureArrayRes` and `CjsTextureParameterProxy` for material-facing,
44
44
  frame-coalesced texture-array inputs.
45
- - Raw `CjsEventEmitter` (from `core-types/model`) for manager/runtime events
45
+ - Raw `CjsEventEmitter` (from `runtime-utils/model`) for manager/runtime events
46
46
  without requiring `CjsModel` inheritance.
47
47
  - Path normalization, extension helpers, and source adapters for memory and
48
48
  `fetch`.
@@ -57,9 +57,10 @@ retention without introducing a parallel DTO class hierarchy.
57
57
  | Wwise media (`.wem`) | `CjsWemFormat` | `@carbonenginejs/runtime-resource/formats/wem` |
58
58
  | YAML (`.yaml`/`.yml`) | `CjsYamlFormat` | `@carbonenginejs/runtime-resource/formats/yaml` |
59
59
 
60
- Detailed pages: [Wwise soundbanks and media](wwise.md),
61
- [STL export](stl.md). Ownership history, retained snapshots, and donor
62
- licensing are recorded in [provenance.md](provenance.md).
60
+ Detailed pages: [Granny GR2 and GSF](gr2.md),
61
+ [Wwise soundbanks and media](wwise.md), and [STL export](stl.md). Ownership
62
+ history, retained snapshots, and donor licensing are recorded in
63
+ [provenance.md](provenance.md).
63
64
 
64
65
  ## Granny GR2/GSF
65
66
 
@@ -69,9 +70,9 @@ Oodle1, and the clean-room BitKnit2 decoder), reflected type-tree walking,
69
70
  GR2 JSON emission, optional curve decompression, CCP packed tangent-frame
70
71
  unpacking, and caller-class hydration (`emit: "gr2"`/`"cmf"` with a
71
72
  `classes` map). It was migrated from `@carbonenginejs/format-gr2` after that
72
- package's 2026-07-24 MIT relicense; the frozen donor repository documents
73
- the reader API and JSON graph in detail, and this copy preserves its
74
- behavior and test surface.
73
+ package's 2026-07-24 MIT relicense, preserving its behavior and test
74
+ surface; [gr2.md](gr2.md) documents the reader API, output modes, graph
75
+ shape, and hydration contract.
75
76
 
76
77
  ## Red output markers
77
78
 
@@ -0,0 +1,161 @@
1
+ # Granny GR2 and GSF
2
+
3
+ Status: Evolving
4
+ Scope: `@carbonenginejs/runtime-resource/formats/gr2`
5
+ Audience: Users and integrators
6
+ Summary: Defines the pure-JavaScript GR2/GSF reader, its output modes, conversion options, graph shape, and class-hydration boundary.
7
+
8
+ ## Purpose
9
+
10
+ `CjsGr2Format` reads Granny 3D `.gr2` geometry, skeleton, animation, and
11
+ morph-target data, plus Granny State `.gsf` profiles. It runs in Node and the
12
+ browser without `granny2.dll`, native addons, a GPU, or private assets.
13
+
14
+ The reader owns Granny container parsing, reflected type-tree walking, section
15
+ decompression, JSON projection, optional curve and vertex-channel conversion,
16
+ GSF projection, and caller-class hydration. Resource caching and publication
17
+ remain with `CjsResMan`; GPU realization remains with engine packages.
18
+
19
+ Supported section compression is None, Oodle1, and the in-project clean-room
20
+ BitKnit2 decoder. Licensing and migration history are recorded in
21
+ [format provenance](provenance.md).
22
+
23
+ ## Import and basic use
24
+
25
+ Import the runtime-resource wrapper from its explicit format subpath:
26
+
27
+ ```js
28
+ import { CjsGr2Format } from "@carbonenginejs/runtime-resource/formats/gr2";
29
+
30
+ const graph = CjsGr2Format.read(bytes);
31
+ const summary = CjsGr2Format.inspect(bytes);
32
+ const asynchronousGraph = await CjsGr2Format.readAsync(bytes);
33
+ ```
34
+
35
+ The wrapper exposes the normal runtime-resource format metadata and
36
+ `isSupported(bytes)` magic probe. It also exports the migrated
37
+ `CjsFormatGr2` reader engine for compatibility, but new consumers should use
38
+ `CjsGr2Format`.
39
+
40
+ Register it with `CjsResMan` when GR2/GSF should participate in ordinary
41
+ resource loading:
42
+
43
+ ```js
44
+ import { CjsResMan } from "@carbonenginejs/runtime-resource";
45
+ import { CjsGr2Format } from "@carbonenginejs/runtime-resource/formats/gr2";
46
+
47
+ const resMan = new CjsResMan().Register({
48
+ source,
49
+ formats: [ CjsGr2Format ]
50
+ });
51
+
52
+ const resource = resMan.GetResource("res:/model/ship.gr2");
53
+ const graph = await resource.Ready();
54
+ ```
55
+
56
+ Concrete formats are not imported or registered by the package root.
57
+
58
+ ## Output modes
59
+
60
+ `emit` selects the representation:
61
+
62
+ | Value | Result |
63
+ |---|---|
64
+ | `"json"` | Default stable GR2 graph with plain objects |
65
+ | `"gr2Json"` | Explicit alias for the JSON graph |
66
+ | `"gr2"` | GR2 graph hydrated with caller-supplied classes |
67
+ | `"cmf"` | CMF-shaped graph hydrated with caller-supplied classes |
68
+ | `"raw"` | Low-level reflected `granny_file_info` result |
69
+
70
+ `"gr2"` and `"cmf"` require a non-empty `classes` map. Classes may also be
71
+ supplied with `"json"`/`"gr2Json"` to hydrate selected JSON nodes while
72
+ leaving omitted nodes as plain objects.
73
+
74
+ ## Conversion options
75
+
76
+ | Option | Default | Effect |
77
+ |---|---:|---|
78
+ | `decompressCurves` | `false` | Adds decoded `knots`, `controls`, and `dimension` to supported compressed animation curves while retaining the raw curve fields |
79
+ | `unpackTangents` | `false` | Converts packed CCP tangent frames into separate normal, tangent, and binormal channels |
80
+ | `rebuildMissingNormals` | `false` | Generates absent normals from positions and triangle indices |
81
+ | `rebuildMissingTangents` | `false` | Generates absent tangents from positions, normals, UVs, and triangle indices |
82
+ | `rebuildMissingBiNormals` | `false` | Generates absent binormals from normals and tangents |
83
+ | `classes` | `{}` | Maps supported graph node keys to constructors |
84
+
85
+ Tangent unpacking and missing-channel rebuild options may be functions when a
86
+ caller needs per-mesh policy. Rebuild options fill absent data; they do not
87
+ repair authored channels that are present but incorrect.
88
+
89
+ A reusable reader profile can hold these defaults:
90
+
91
+ ```js
92
+ const reader = new CjsGr2Format({
93
+ decompressCurves: true,
94
+ unpackTangents: true
95
+ });
96
+
97
+ const first = reader.Read(firstBytes);
98
+ const second = reader.Read(secondBytes);
99
+ ```
100
+
101
+ ## JSON graph and hydration
102
+
103
+ The default graph has this general shape:
104
+
105
+ ```text
106
+ Root
107
+ |-- grannyFileFormatRevision, grannyFileSource
108
+ |-- meshes
109
+ | |-- boneBindings, morphTargets
110
+ | |-- vertex: flat numeric channels
111
+ | `-- indices: triangle index groups
112
+ |-- models
113
+ | `-- skeleton -> bones
114
+ `-- animations
115
+ `-- trackGroups -> transformTracks -> curves
116
+ ```
117
+
118
+ Vertex channels include positions, normals, tangents, binormals, UVs, blend
119
+ indices, and blend weights when available. `IndexGroup.faces` is a flat array
120
+ of triangle indices. Sparse morph targets carry `vertexIndices`; native and
121
+ annotation-set morph targets share the same projected shape.
122
+
123
+ For each registered class key, hydration constructs the class without
124
+ arguments and calls:
125
+
126
+ ```js
127
+ new Class().SetValues(nodeFields);
128
+ ```
129
+
130
+ Constructors must therefore support zero-argument construction and
131
+ `SetValues(values)`. Supported GR2 and CMF keys are exposed through
132
+ `CjsGr2Format.CLASS_KEYS`; use `SetClass`, `SetClasses`, `GetClass`, and
133
+ `HasClass` on reusable reader instances.
134
+
135
+ `ToJSON(value)` and static `toJSON(value)` convert hydrated output into a
136
+ JSON-compatible value. They do not write a binary `.gr2` file or return JSON
137
+ text.
138
+
139
+ ## Granny State
140
+
141
+ GSF uses the ordinary Granny container with a GState root schema. The reader
142
+ provides dedicated classification, projection, and inspection:
143
+
144
+ ```js
145
+ if (CjsGr2Format.isGsf(bytes)) {
146
+ const state = CjsGr2Format.readGsf(bytes);
147
+ const dependencies = CjsGr2Format.inspectGsf(bytes);
148
+ }
149
+ ```
150
+
151
+ The stable GSF projection contains container revision data, model and
152
+ retarget hints, the state machine, animation slots and sets, referenced
153
+ relative `.gr2` files, token count, editor data, and extended data.
154
+ `readGsfAsync` provides the equivalent promise-facing entry point.
155
+
156
+ ## Related documentation
157
+
158
+ - [Format subpaths](README.md)
159
+ - [Architecture and boundaries](../architecture.md)
160
+ - [Resource lifecycle](../concepts/resource-lifecycle.md)
161
+ - [Format ownership and provenance](provenance.md)