@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.
- package/NOTICE +5 -3
- package/README.md +1 -1
- package/dist/CjsResMan.js +1 -1
- package/dist/CjsResMan.js.map +1 -1
- package/dist/CjsResource.js +2 -2
- package/dist/CjsResource.js.map +1 -1
- package/dist/CjsResourceSource.js +9 -0
- package/dist/CjsResourceSource.js.map +1 -1
- package/dist/format/CjsBlueReader.js +2 -2
- package/dist/format/CjsBlueReader.js.map +1 -1
- package/dist/format/CjsFormat.js +10 -5
- package/dist/format/CjsFormat.js.map +1 -1
- package/dist/format/CjsResourceProbe.js +2 -2
- package/dist/format/CjsResourceProbe.js.map +1 -1
- package/dist/formats/black/core/CjsBlackBinaryReader.js +4 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +6 -1
- package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
- package/dist/formats/black/core/CjsBlackReader.js +2 -2
- package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +4 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
- package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -0
- package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js.map +1 -0
- package/dist/formats/black/core/blackDefinitions.js +1 -1
- package/dist/formats/black/core/blackDefinitions.js.map +1 -1
- package/dist/formats/black/core/blackSchema.js +1 -1
- package/dist/formats/bnk/core/musicNodes.js +4 -0
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/cmf/core/binary.js +5 -0
- package/dist/formats/cmf/core/binary.js.map +1 -1
- package/dist/formats/dds/CjsDdsFormat.js +7 -0
- package/dist/formats/dds/CjsDdsFormat.js.map +1 -1
- package/dist/formats/dds/core/bc7.js +7 -2
- package/dist/formats/dds/core/bc7.js.map +1 -1
- package/dist/formats/fbx/core/helpers.js +11 -1
- package/dist/formats/fbx/core/helpers.js.map +1 -1
- package/dist/formats/flac/CjsFlacFormat.js +6 -0
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/formats/gif/CjsGifFormat.js +5 -0
- package/dist/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +3 -3
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gr2/core/tangents.js +9 -9
- package/dist/formats/gr2/core/tangents.js.map +1 -1
- package/dist/formats/index.js +4 -4
- package/dist/formats/jpeg/CjsJpegFormat.js +6 -0
- package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -1
- package/dist/formats/jpeg/core/jpeg.js +10 -0
- package/dist/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/formats/mp3/CjsMp3Format.js +5 -0
- package/dist/formats/mp3/CjsMp3Format.js.map +1 -1
- package/dist/formats/mp4/CjsMp4Format.js +6 -0
- package/dist/formats/mp4/CjsMp4Format.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +2 -2
- package/dist/formats/obj/core/helpers.js.map +1 -1
- package/dist/formats/ogg/CjsOggFormat.js +6 -0
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/formats/ogg/core/vorbis.js +5 -0
- package/dist/formats/ogg/core/vorbis.js.map +1 -1
- package/dist/formats/png/CjsPngFormat.js +6 -0
- package/dist/formats/png/CjsPngFormat.js.map +1 -1
- package/dist/formats/red/CjsRedFormat.js +1 -1
- package/dist/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/formats/red/core/blackDefinitions.js +1 -1
- package/dist/formats/stl/core/stl.js +7 -2
- package/dist/formats/stl/core/stl.js.map +1 -1
- package/dist/formats/tga/CjsTgaFormat.js +5 -0
- package/dist/formats/tga/CjsTgaFormat.js.map +1 -1
- package/dist/formats/wav/CjsWavFormat.js +6 -0
- package/dist/formats/wav/CjsWavFormat.js.map +1 -1
- package/dist/formats/webm/CjsWebmFormat.js +6 -0
- package/dist/formats/webm/CjsWebmFormat.js.map +1 -1
- package/dist/formats/webp/CjsWebpFormat.js +5 -0
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/formats/wem/CjsWemFormat.js +3 -2
- package/dist/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/formats/yaml/CjsYamlFormat.js +6 -0
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +6 -0
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/resources/AudioGeometryResData.js +3 -3
- package/dist/resources/AudioGeometryResData.js.map +1 -1
- package/dist/resources/GStateBindingCallbackData.js +2 -2
- package/dist/resources/GStateBindingCallbackData.js.map +1 -1
- package/dist/resources/MeshDecalData.js +2 -2
- package/dist/resources/MeshDecalData.js.map +1 -1
- package/dist/resources/MeshDecalLodData.js +2 -2
- package/dist/resources/MeshDecalLodData.js.map +1 -1
- package/dist/resources/Tr2EffectRes.js +1 -1
- package/dist/resources/Tr2EffectRes.js.map +1 -1
- package/dist/resources/Tr2GrannyIntersectionResult.js +4 -4
- package/dist/resources/Tr2GrannyIntersectionResult.js.map +1 -1
- package/dist/resources/Tr2GrannyStateRes.js +1 -1
- package/dist/resources/Tr2GrannyStateRes.js.map +1 -1
- package/dist/resources/Tr2ImageRes.js +1 -1
- package/dist/resources/Tr2ImageRes.js.map +1 -1
- package/dist/resources/Tr2LightProfileRes.js +1 -1
- package/dist/resources/Tr2LightProfileRes.js.map +1 -1
- package/dist/resources/Tr2MaterialArea.js +2 -2
- package/dist/resources/Tr2MaterialArea.js.map +1 -1
- package/dist/resources/Tr2MaterialMesh.js +2 -2
- package/dist/resources/Tr2MaterialMesh.js.map +1 -1
- package/dist/resources/Tr2MaterialRes.js +2 -2
- package/dist/resources/Tr2MaterialRes.js.map +1 -1
- package/dist/resources/Tr2ShaderPermutation.js +2 -2
- package/dist/resources/Tr2ShaderPermutation.js.map +1 -1
- package/dist/resources/Tr2TextureLodManager.js +2 -2
- package/dist/resources/Tr2TextureLodManager.js.map +1 -1
- package/dist/resources/Tr2TextureLodUpdateRequest.js +2 -2
- package/dist/resources/Tr2TextureLodUpdateRequest.js.map +1 -1
- package/dist/resources/Tr2TexturePackChannel.js +2 -2
- package/dist/resources/Tr2TexturePackChannel.js.map +1 -1
- package/dist/resources/Tr2TexturePipeline.js +2 -2
- package/dist/resources/Tr2TexturePipeline.js.map +1 -1
- package/dist/resources/Tr2TexturePipelineParams.js +2 -2
- package/dist/resources/Tr2TexturePipelineParams.js.map +1 -1
- package/dist/resources/Tr2TexturePipelineStepCompress.js +2 -2
- package/dist/resources/Tr2TexturePipelineStepCompress.js.map +1 -1
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js +2 -2
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +1 -1
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js +2 -2
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -1
- package/dist/resources/Tr2TexturePipelineStepLoad.js +2 -2
- package/dist/resources/Tr2TexturePipelineStepLoad.js.map +1 -1
- package/dist/resources/Tr2TexturePipelineStepPack.js +2 -2
- package/dist/resources/Tr2TexturePipelineStepPack.js.map +1 -1
- package/dist/resources/TriGeometryRes.js +1 -1
- package/dist/resources/TriGeometryRes.js.map +1 -1
- package/dist/resources/TriGeometryResAreaData.js +3 -3
- package/dist/resources/TriGeometryResAreaData.js.map +1 -1
- package/dist/resources/TriGeometryResJointData.js +3 -3
- package/dist/resources/TriGeometryResJointData.js.map +1 -1
- package/dist/resources/TriGeometryResLodData.js +2 -2
- package/dist/resources/TriGeometryResLodData.js.map +1 -1
- package/dist/resources/TriGeometryResMeshData.js +4 -4
- package/dist/resources/TriGeometryResMeshData.js.map +1 -1
- package/dist/resources/TriGeometryResSkeletonData.js +2 -2
- package/dist/resources/TriGeometryResSkeletonData.js.map +1 -1
- package/dist/resources/TriGrannyRes.js +1 -1
- package/dist/resources/TriGrannyRes.js.map +1 -1
- package/dist/resources/TriJointBinding.js +3 -3
- package/dist/resources/TriJointBinding.js.map +1 -1
- package/dist/resources/TriMorphTargetGeometryConstants.js +2 -2
- package/dist/resources/TriMorphTargetGeometryConstants.js.map +1 -1
- package/dist/resources/TriRtGeometryConstants.js +2 -2
- package/dist/resources/TriRtGeometryConstants.js.map +1 -1
- package/dist/resources/TriTextureRes.js +1 -1
- package/dist/resources/TriTextureRes.js.map +1 -1
- package/dist/resources/texturePipelineBehavior.js +2 -2
- package/dist/resources/texturePipelineBehavior.js.map +1 -1
- package/dist/texture/CjsTextureArrayRes.js +1 -1
- package/dist/texture/CjsTextureArrayRes.js.map +1 -1
- package/dist/texture/CjsTextureParameterProxy.js +1 -1
- package/dist/texture/CjsTextureParameterProxy.js.map +1 -1
- package/docs/README.md +6 -2
- package/docs/architecture.md +1 -1
- package/docs/formats/README.md +7 -6
- package/docs/formats/gr2.md +161 -0
- package/docs/reference/classes/README.md +33 -0
- package/docs/reference/classes/core.md +106 -0
- package/docs/reference/classes/dropped.md +46 -0
- package/docs/reference/classes/formats.md +522 -0
- package/docs/reference/classes/resources.md +346 -0
- package/docs/reference/classes/texture.md +26 -0
- package/docs/reference/events.md +1 -1
- package/format-notices/black/NOTICE +1 -1
- package/package.json +2 -4
- package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +0 -4
- 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/
|
|
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":"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"}
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CjsTextureParameterProxy.js","sources":["../../../src/texture/CjsTextureParameterProxy.js"],"sourcesContent":["import { CjsEventEmitter } from \"@carbonenginejs/
|
|
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/
|
|
28
|
-
contracts) and `@carbonenginejs/
|
|
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
|
package/docs/architecture.md
CHANGED
|
@@ -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 `
|
|
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`.
|
package/docs/formats/README.md
CHANGED
|
@@ -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: [
|
|
61
|
-
[STL export](stl.md). Ownership
|
|
62
|
-
licensing are recorded in
|
|
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
|
|
73
|
-
the reader API
|
|
74
|
-
|
|
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)
|