@carbonenginejs/runtime-resource 0.11.1 → 0.12.1
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/dist/CjsResMan.js +4 -4
- package/dist/CjsResMan.js.map +1 -1
- package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -4
- package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/dist/format/CjsByteReader.js +310 -0
- package/dist/format/CjsByteReader.js.map +1 -0
- package/dist/format/CjsByteWriter.js +242 -0
- package/dist/format/CjsByteWriter.js.map +1 -0
- package/dist/format/CjsFormatError.js +41 -0
- package/dist/format/CjsFormatError.js.map +1 -0
- package/dist/format/CjsStringTable.js +268 -0
- package/dist/format/CjsStringTable.js.map +1 -0
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js +361 -0
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -0
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -0
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -0
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +372 -0
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +1 -0
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +427 -0
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -0
- package/dist/format/carbonEffect/carbonEffectRecords.js +955 -0
- package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -0
- package/dist/format/compareUtf8.js +36 -0
- package/dist/format/compareUtf8.js.map +1 -0
- package/dist/format/index.js +11 -0
- package/dist/format/index.js.map +1 -0
- package/dist/formats/bnk/CjsBnkFormat.js +18 -2
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/eventAction.js +305 -0
- package/dist/formats/bnk/core/eventAction.js.map +1 -0
- package/dist/formats/bnk/core/graph.js +3 -6
- package/dist/formats/bnk/core/graph.js.map +1 -1
- package/dist/formats/bnk/core/helpers.js +62 -11
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/nodeBase.js +532 -0
- package/dist/formats/bnk/core/nodeBase.js.map +1 -0
- package/dist/formats/bnk/core/sfxNodes.js +632 -0
- package/dist/formats/bnk/core/sfxNodes.js.map +1 -0
- package/dist/formats/bnk/core/soundbanksInfo.js +59 -51
- package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
- package/dist/formats/gr2/CjsGr2Format.js +256 -13
- package/dist/formats/gr2/CjsGr2Format.js.map +1 -1
- package/dist/formats/gr2/core/helpers.js +15 -15
- package/dist/formats/gr2/core/helpers.js.map +1 -1
- package/dist/formats/gr2/core/json.js +1 -1
- package/dist/formats/gr2/core/json.js.map +1 -1
- package/dist/formats/gr2/core/targets.js +1 -1
- package/dist/formats/gr2/core/targets.js.map +1 -1
- package/dist/formats/gr2/index.js +0 -1
- package/dist/formats/gr2/index.js.map +1 -1
- package/dist/formats/hlsl/core/HlslReader.js +7 -257
- package/dist/formats/hlsl/core/HlslReader.js.map +1 -1
- package/dist/formats/hlsl/core/analysis.js +1 -1
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +781 -0
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +21 -1
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
- package/dist/formats/hlsl/index.js +1 -0
- package/dist/formats/hlsl/index.js.map +1 -1
- package/dist/formats/index.js +3 -6
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/webgl/core/cewg/CewgPackage.js +2 -1
- package/dist/formats/webgl/core/cewg/CewgPackage.js.map +1 -1
- package/dist/formats/webgl/core/cewg/binary.js +11 -93
- package/dist/formats/webgl/core/cewg/binary.js.map +1 -1
- package/dist/formats/webgl/core/effectPackage.js +4 -1
- package/dist/formats/webgl/core/effectPackage.js.map +1 -1
- package/dist/formats/webgl/core/errors.js +3 -3
- package/dist/formats/webgl/core/errors.js.map +1 -1
- package/dist/formats/webgpu/CjsWebgpuFormat.js +4 -23
- package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +197 -0
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js +368 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/containerViews.js +355 -0
- package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/validateContainer.js +90 -0
- package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +1 -0
- package/dist/formats/webgpu/core/effectBackendBodySet.js +21 -20
- package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
- package/dist/formats/webgpu/core/helpers.js +87 -92
- package/dist/formats/webgpu/core/helpers.js.map +1 -1
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +14 -13
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js.map +1 -1
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +10 -8
- package/dist/formats/webgpu/core/ir/inferValueTypes.js.map +1 -1
- package/dist/formats/webgpu/core/packageEffect.js +94 -9
- package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
- package/dist/formats/webgpu/core/packageMetadata.js +10 -1
- package/dist/formats/webgpu/core/packageMetadata.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +17 -15
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +13 -12
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +9 -8
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +23 -22
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +46 -44
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js.map +1 -1
- package/dist/resource/CjsResource.js +700 -684
- package/dist/resource/CjsResource.js.map +1 -1
- package/dist/resource/Tr2LightProfileRes.js +18 -27
- package/dist/resource/Tr2LightProfileRes.js.map +1 -1
- package/dist/resource/audio/CjsAudioBufferRes.js +2 -2
- package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -1
- package/dist/resource/audio/CjsAudioRes.js +2 -2
- package/dist/resource/audio/CjsAudioRes.js.map +1 -1
- package/dist/resource/geometry/TriGeometryRes.js +605 -586
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +21 -30
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -1
- package/dist/resource/geometry/granny/TriGrannyRes.js +21 -30
- package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -1
- package/dist/resource/shader/Tr2EffectRes.js +9 -7
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
- package/dist/resource/shader/Tr2MaterialArea.js +5 -3
- package/dist/resource/shader/Tr2MaterialArea.js.map +1 -1
- package/dist/resource/shader/Tr2MaterialMesh.js +4 -2
- package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -1
- package/dist/resource/shader/Tr2MaterialRes.js +5 -3
- package/dist/resource/shader/Tr2MaterialRes.js.map +1 -1
- package/dist/resource/shader/Tr2Shader.js +26 -21
- package/dist/resource/shader/Tr2Shader.js.map +1 -1
- package/dist/resource/shader/Tr2ShaderPermutation.js +8 -6
- package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +5 -3
- package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +5 -3
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +17 -15
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +11 -9
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +8 -6
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +15 -13
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +7 -5
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +11 -9
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +8 -6
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
- package/dist/resource/texture/CjsTextureArrayRes.js +400 -411
- package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -1
- package/dist/resource/texture/Tr2ImageRes.js +99 -95
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
- package/dist/resource/texture/TriTextureRes.js +312 -273
- package/dist/resource/texture/TriTextureRes.js.map +1 -1
- package/docs/README.md +13 -1
- package/docs/architecture.md +3 -3
- package/docs/concepts/resource-lifecycle.md +9 -2
- package/docs/concepts/shader-resource-model.md +114 -0
- package/docs/concepts/writing-an-engine-adapter.md +115 -0
- package/docs/formats/README.md +24 -1
- package/docs/formats/carbon-effect-container.md +452 -0
- package/docs/formats/dxbc/README.md +68 -0
- package/docs/formats/dxbc/architecture.md +80 -0
- package/docs/formats/dxbc/reference/api.md +77 -0
- package/docs/formats/dxbc/reference/classes/README.md +9 -0
- package/docs/formats/dxbc/reference/decoded-output.md +122 -0
- package/docs/formats/gr2.md +3 -4
- package/docs/formats/hlsl/README.md +54 -0
- package/docs/formats/hlsl/architecture.md +67 -0
- package/docs/formats/hlsl/guides/hydrating-json-output.md +62 -0
- package/docs/formats/hlsl/guides/reading-effects.md +64 -0
- package/docs/formats/hlsl/reference/advanced-analysis.md +66 -0
- package/docs/formats/hlsl/reference/api.md +98 -0
- package/docs/formats/hlsl/reference/classes/README.md +11 -0
- package/docs/formats/hlsl/reference/json-graph.md +100 -0
- package/docs/formats/hlsl/reference/portable-reflection.md +141 -0
- package/docs/formats/provenance.md +32 -17
- package/docs/formats/webgl/README.md +57 -0
- package/docs/formats/webgl/architecture.md +70 -0
- package/docs/formats/webgl/carbon-constant-layouts.md +326 -0
- package/docs/formats/webgl/decl-io.md +1234 -0
- package/docs/formats/webgl/effect-reflection.md +127 -0
- package/docs/formats/webgl/memory-structured.md +871 -0
- package/docs/formats/webgl/reference/classes/README.md +9 -0
- package/docs/formats/webgl/texture-sample.md +964 -0
- package/docs/formats/webgpu/README.md +84 -0
- package/docs/formats/webgpu/architecture.md +96 -0
- package/docs/formats/webgpu/formats/cewgpu.md +216 -0
- package/docs/formats/webgpu/guides/effect-packaging.md +191 -0
- package/docs/formats/webgpu/reference/api.md +197 -0
- package/docs/formats/webgpu/reference/classes/README.md +9 -0
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1543 -0
- package/docs/formats/wwise.md +45 -4
- package/docs/reference/classes/core.md +80 -0
- package/docs/reference/classes/formats.md +24 -34
- package/docs/reference/events.md +25 -0
- package/docs/reference/motherlode-cache.md +22 -8
- package/docs/reference/workers.md +5 -5
- package/docs/roadmap.md +61 -41
- package/format-notices/bnk/NOTICE +5 -4
- package/format-notices/webgl/NOTICE +1 -1
- package/package.json +2 -1
- package/dist/formats/gr2/core/CjsFormatGr2.js +0 -273
- package/dist/formats/gr2/core/CjsFormatGr2.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js +0 -415
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js +0 -100
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/binary.js +0 -93
- package/dist/formats/webgpu/core/cewgpu/binary.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/tags.js +0 -17
- package/dist/formats/webgpu/core/cewgpu/tags.js.map +0 -1
- package/dist/formats/webgpu/core/effectPackageValidation.js +0 -1078
- package/dist/formats/webgpu/core/effectPackageValidation.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriTextureRes.js","sources":["../../../../src/resource/texture/TriTextureRes.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TriTextureRes.h\n// Source: trinity/trinity/Resources/TriTextureRes.cpp\n// Source: trinity/trinity/Resources/TriTextureRes_Blue.cpp\nimport { carbon, impl, io, type } from \"@carbonenginejs/runtime-utils/schema\";\nimport { CjsResource } from \"../CjsResource.js\";\nimport {\n ResourcePayloadType,\n validateRgbaPayload,\n validateTexturePayload,\n validateVideoPayload\n} from \"../../format/payloadContract.js\";\nimport {\n resourceBoundaryError,\n resourcePayloadError,\n validateResourcePayload\n} from \"../resourceBoundary.js\";\n\n/**\n * Resource record that owns Carbon-style texture identity and validated\n * texture, RGBA, or video payload facts with mirrored dimension/format\n * metadata, while engine packages decide what those facts become on a device.\n *\n * The resource never creates or retains a backend texture.\n */\n@type.define({ className: \"TriTextureRes\", family: \"resources\" })\nexport class TriTextureRes extends CjsResource\n{\n @io.read\n @type.unknown\n format = null;\n\n @io.persist\n @type.unknown\n type = null;\n\n @io.read\n @type.color\n averageColor = [0, 0, 0, 0];\n\n @io.read\n @type.uint32\n depth = 0;\n\n @io.readwrite\n @type.float32\n cutoutHeight = 1;\n\n @io.read\n @type.uint32\n height = 0;\n\n @io.read\n @type.boolean\n lodEnabled = false;\n\n @io.read\n @type.boolean\n hadLodRequests = false;\n\n @io.read\n @type.uint32\n cpuMip = 0;\n\n @io.read\n @type.uint32\n gpuMip = 0;\n\n @io.read\n @type.unknown\n wrappedRenderTarget = null;\n\n @io.read\n @type.uint32\n originalResolution = 0;\n\n @io.read\n @type.uint64\n originalMemoryUsage = 0;\n\n @io.readwrite\n @type.string\n name = \"\";\n\n @io.read\n @type.uint32\n arraySize = 0;\n\n @io.readwrite\n @type.float32\n cutoutWidth = 1;\n\n @io.read\n @type.uint32\n width = 0;\n\n @io.readwrite\n @type.float32\n cutoutX = 0;\n\n @io.readwrite\n @type.float32\n cutoutY = 0;\n\n /** Creates a TriTextureRes with caller-provided initial state. */\n constructor(values = null) {\n super();\n this.SetValues(values || {}, {\n markDirty: false,\n skipUpdate: true,\n skipEvents: true\n });\n }\n\n /**\n * Attach a plain texture, RGBA, or video payload and mirror Carbon-exposed\n * metadata. Invalid payloads are rejected before replacing the current one.\n *\n * @param {object|null} payload\n * @param {object|null} options\n * @returns {TriTextureRes}\n */\n SetPayload(payload = null, options = null) {\n if (payload === null) {\n super.SetPayload(null);\n return this;\n }\n\n const validator = {\n [ResourcePayloadType.RGBA]: validateRgbaPayload,\n [ResourcePayloadType.TEXTURE]: validateTexturePayload,\n [ResourcePayloadType.VIDEO]: validateVideoPayload\n }[payload?.payloadType];\n if (!validator) {\n throw resourcePayloadError(\n \"TriTextureRes\",\n 'Expected payloadType \"rgba\", \"texture\", or \"video\".',\n \"payloadType\"\n );\n }\n validateResourcePayload(\"TriTextureRes\", payload, validator);\n\n const values = { ...(options || {}) };\n if (payload.pixelFormat !== undefined || payload.format !== undefined) values.format = payload.pixelFormat || payload.format;\n if (payload.width !== undefined) values.width = payload.width;\n if (payload.height !== undefined) values.height = payload.height;\n if (payload.depth !== undefined) values.depth = payload.depth;\n if (payload.arraySize !== undefined) values.arraySize = payload.arraySize;\n else if (Array.isArray(payload.faces)) values.arraySize = payload.faces.length;\n if (payload.mipCount !== undefined) values.cpuMip = payload.mipCount;\n else if (payload.payloadType === ResourcePayloadType.RGBA) values.cpuMip = 1;\n if (payload.hadLodRequests !== undefined) values.hadLodRequests = !!payload.hadLodRequests;\n values.originalMemoryUsage = getPayloadMemoryUsage(payload);\n values.originalResolution = Math.max(payload.width || 0, payload.height || 0, this.originalResolution || 0);\n\n super.SetPayload(payload);\n this.SetValues(values);\n return this;\n }\n\n /**\n * Return the number of mip levels known to this texture resource.\n *\n * @returns {number}\n */\n @carbon.method\n @impl.adapted\n GetMipCount() {\n return this.GetPayload()?.mipCount || this.cpuMip || 0;\n }\n\n /**\n * Return the multisample type for this texture.\n *\n * @returns {number}\n */\n @carbon.method\n @impl.adapted\n GetMsaaType() {\n const payload = this.GetPayload();\n return payload?.multiSampleType ?? payload?.msaaType ?? payload?.samples ?? 1;\n }\n\n /**\n * Return the multisample quality for this texture.\n *\n * @returns {number}\n */\n @carbon.method\n @impl.adapted\n GetMsaaQuality() {\n const payload = this.GetPayload();\n return payload?.multiSampleQuality ?? payload?.msaaQuality ?? 0;\n }\n\n /**\n * Return true if this texture has received LOD requests.\n *\n * @returns {boolean}\n */\n @carbon.method\n @impl.adapted\n HadLodRequests() {\n return this.hadLodRequests;\n }\n\n /**\n * Return the shader-resource-view heap index when a backend owns one.\n *\n * @returns {number}\n */\n @carbon.method\n @impl.notSupported\n GetSrvIndexInHeap() {\n throw resourceBoundaryError(\"TriTextureRes\", \"GetSrvIndexInHeap\", \"Runtime-resource does not own descriptor heaps.\");\n }\n\n /**\n * Save this texture asynchronously.\n *\n * @param {string} path\n * @returns {boolean}\n */\n @carbon.method\n @impl.notSupported\n SaveAsync(path = \"\") {\n throw resourceBoundaryError(\n \"TriTextureRes\",\n \"SaveAsync\",\n `Use a format writer and caller-owned destination to save texture payloads${path ? ` (${path})` : \"\"}.`\n );\n }\n\n /**\n * Save this texture synchronously.\n *\n * @param {string} path\n * @returns {boolean}\n */\n @carbon.method\n @impl.notSupported\n Save(path = \"\") {\n throw resourceBoundaryError(\n \"TriTextureRes\",\n \"Save\",\n `Use a format writer and caller-owned destination to save texture payloads${path ? ` (${path})` : \"\"}.`\n );\n }\n\n /**\n * Return true if an asynchronous save is active.\n *\n * @returns {boolean}\n */\n @carbon.method\n @impl.noop\n IsSaving() {\n return false;\n }\n\n /**\n * Return true if the asynchronous save operation has completed.\n *\n * @returns {boolean}\n */\n @carbon.method\n @impl.noop\n IsSaveCompleted() {\n return true;\n }\n\n /**\n * Return true if the asynchronous save operation succeeded.\n *\n * @returns {boolean}\n */\n @carbon.method\n @impl.noop\n IsSaveSucceeded() {\n return false;\n }\n\n /**\n * Wait for an asynchronous save operation.\n *\n * @returns {boolean}\n */\n @carbon.method\n @impl.noop\n WaitForSave() {\n return this.IsSaveCompleted();\n }\n\n /**\n * Device texture allocation belongs to engine-gpu.\n *\n * @throws {Error}\n */\n @carbon.method\n @impl.notSupported\n CreateEmptyTexture() {\n throw resourceBoundaryError(\"TriTextureRes\", \"CreateEmptyTexture\", \"Use engine-gpu to allocate device textures.\");\n }\n\n /**\n * Render-target wrapping belongs to engine-gpu.\n *\n * @throws {Error}\n */\n @carbon.method\n @impl.notSupported\n SetFromRenderTarget() {\n throw resourceBoundaryError(\"TriTextureRes\", \"SetFromRenderTarget\", \"Runtime-resource does not own render targets.\");\n }\n\n /**\n * Create a texture copy from a render target.\n *\n * @throws {Error}\n */\n @carbon.method\n @impl.notSupported\n CreateAndCopyFromRenderTarget() {\n throw resourceBoundaryError(\"TriTextureRes\", \"CreateAndCopyFromRenderTarget\", \"Runtime-resource does not own render targets.\");\n }\n\n /**\n * Create a device texture from a host bitmap.\n *\n * @throws {Error}\n */\n @carbon.method\n @impl.notSupported\n CreateFromHostBitmap() {\n throw resourceBoundaryError(\"TriTextureRes\", \"CreateFromHostBitmap\", \"Use engine-gpu to allocate and upload texture data.\");\n }\n\n /**\n * Create this texture from another texture resource.\n *\n * @throws {Error}\n */\n @carbon.method\n @impl.notSupported\n CreateFromTexture() {\n throw resourceBoundaryError(\"TriTextureRes\", \"CreateFromTexture\", \"Use engine-gpu to copy device textures.\");\n }\n\n /**\n * Return true if this texture owns a backend allocation object.\n *\n * @param {string|number} type\n * @param {string|number} object\n * @returns {boolean}\n */\n @carbon.method\n @impl.adapted\n HasALObject(type, object) {\n return this.HasAdapterResource(`${type}:${object}`);\n }\n\n /**\n * Return an engine-owned texture pipeline object when attached.\n *\n * @returns {*}\n */\n @carbon.method\n @impl.adapted\n GetPipeline() {\n return this.GetAdapterResource(\"pipeline\");\n }\n\n /**\n * Return memory size for the original non-LODed texture.\n *\n * @returns {number}\n */\n @carbon.method\n @impl.adapted\n GetOriginalMemoryUsage() {\n return this.originalMemoryUsage || getPayloadMemoryUsage(this.GetPayload());\n }\n\n /**\n * Store the average color reported by decoded texture data.\n *\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @returns {TriTextureRes}\n */\n @carbon.method\n @impl.adapted\n SetAverageColor(red = 0, green = 0, blue = 0, alpha = 0) {\n this.averageColor = [red, green, blue, alpha];\n return this;\n }\n\n /**\n * Update a texture subresource.\n *\n * @throws {Error}\n */\n @carbon.method\n @impl.notSupported\n UpdateSubresource() {\n throw resourceBoundaryError(\"TriTextureRes\", \"UpdateSubresource\", \"Use engine-gpu to upload texture bytes.\");\n }\n\n /**\n * Resource preparation does not decide device upload policy.\n *\n * @returns {boolean}\n */\n @carbon.method\n @impl.adapted\n PrepareResources() {\n return this.IsPrepared();\n }\n\n static payload = \"texture\";\n}\n\nfunction getPayloadMemoryUsage(payload)\n{\n if (!payload || typeof payload !== \"object\") return 0;\n if (Number.isSafeInteger(payload.originalMemoryUsage) && payload.originalMemoryUsage >= 0)\n {\n return payload.originalMemoryUsage;\n }\n return ArrayBuffer.isView(payload.data) || payload.data instanceof ArrayBuffer\n ? payload.data.byteLength\n : 0;\n}\n"],"names":["_TriTextureRes","_identity","TriTextureRes","CjsResource","e","_init_format","_init_extra_format","_init_type","_init_extra_type","_init_averageColor","_init_extra_averageColor","_init_depth","_init_extra_depth","_init_cutoutHeight","_init_extra_cutoutHeight","_init_height","_init_extra_height","_init_lodEnabled","_init_extra_lodEnabled","_init_hadLodRequests","_init_extra_hadLodRequests","_init_cpuMip","_init_extra_cpuMip","_init_gpuMip","_init_extra_gpuMip","_init_wrappedRenderTarget","_init_extra_wrappedRenderTarget","_init_originalResolution","_init_extra_originalResolution","_init_originalMemoryUsage","_init_extra_originalMemoryUsage","_init_name","_init_extra_name","_init_arraySize","_init_extra_arraySize","_init_cutoutWidth","_init_extra_cutoutWidth","_init_width","_init_extra_width","_init_cutoutX","_init_extra_cutoutX","_init_cutoutY","_init_extra_cutoutY","_initProto","c","_initClass","_applyDecs","type","define","className","family","io","read","unknown","persist","color","uint32","readwrite","float32","boolean","uint64","string","carbon","method","impl","adapted","notSupported","noop","format","averageColor","depth","cutoutHeight","height","lodEnabled","hadLodRequests","cpuMip","gpuMip","wrappedRenderTarget","originalResolution","originalMemoryUsage","name","arraySize","cutoutWidth","width","cutoutX","cutoutY","constructor","values","SetValues","markDirty","skipUpdate","skipEvents","SetPayload","payload","options","validator","ResourcePayloadType","RGBA","validateRgbaPayload","TEXTURE","validateTexturePayload","VIDEO","validateVideoPayload","payloadType","resourcePayloadError","validateResourcePayload","pixelFormat","undefined","Array","isArray","faces","length","mipCount","getPayloadMemoryUsage","Math","max","GetMipCount","GetPayload","GetMsaaType","multiSampleType","msaaType","samples","GetMsaaQuality","multiSampleQuality","msaaQuality","HadLodRequests","GetSrvIndexInHeap","resourceBoundaryError","SaveAsync","path","Save","IsSaving","IsSaveCompleted","IsSaveSucceeded","WaitForSave","CreateEmptyTexture","SetFromRenderTarget","CreateAndCopyFromRenderTarget","CreateFromHostBitmap","CreateFromTexture","HasALObject","object","HasAdapterResource","GetPipeline","GetAdapterResource","GetOriginalMemoryUsage","SetAverageColor","red","green","blue","alpha","UpdateSubresource","PrepareResources","IsPrepared","Number","isSafeInteger","ArrayBuffer","isView","data","byteLength"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TriTextureRes.js","sources":["../../../../src/resource/texture/TriTextureRes.js"],"sourcesContent":["// Source: trinity/trinity/Resources/TriTextureRes.h\n// Source: trinity/trinity/Resources/TriTextureRes.cpp\n// Source: trinity/trinity/Resources/TriTextureRes_Blue.cpp\nimport { CjsSchema, carbon, impl, io, type } from \"@carbonenginejs/runtime-utils/schema\";\nimport { CjsResource } from \"../CjsResource.js\";\nimport {\n ResourcePayloadType,\n validateRgbaPayload,\n validateTexturePayload,\n validateVideoPayload\n} from \"../../format/payloadContract.js\";\nimport {\n resourceBoundaryError,\n resourcePayloadError,\n validateResourcePayload\n} from \"../resourceBoundary.js\";\n\n/**\n * Resource record that owns Carbon-style texture identity and validated\n * texture, RGBA, or video payload facts with mirrored dimension/format\n * metadata, while engine packages decide what those facts become on a device.\n *\n * The resource never creates or retains a backend texture.\n */\nexport class TriTextureRes extends CjsResource\n{\n format = null;\n type = null;\n averageColor = [0, 0, 0, 0];\n depth = 0;\n cutoutHeight = 1;\n height = 0;\n lodEnabled = false;\n hadLodRequests = false;\n cpuMip = 0;\n gpuMip = 0;\n wrappedRenderTarget = null;\n originalResolution = 0;\n originalMemoryUsage = 0;\n name = \"\";\n arraySize = 0;\n cutoutWidth = 1;\n width = 0;\n cutoutX = 0;\n cutoutY = 0;\n\n /** Creates a TriTextureRes with caller-provided initial state. */\n constructor(values = null) {\n super();\n this.SetValues(values || {}, {\n markDirty: false,\n skipUpdate: true,\n skipEvents: true\n });\n }\n\n /**\n * Attach a plain texture, RGBA, or video payload and mirror Carbon-exposed\n * metadata. Invalid payloads are rejected before replacing the current one.\n *\n * @param {object|null} payload\n * @param {object|null} options\n * @returns {TriTextureRes}\n */\n SetPayload(payload = null, options = null) {\n if (payload === null) {\n super.SetPayload(null);\n return this;\n }\n\n const validator = {\n [ResourcePayloadType.RGBA]: validateRgbaPayload,\n [ResourcePayloadType.TEXTURE]: validateTexturePayload,\n [ResourcePayloadType.VIDEO]: validateVideoPayload\n }[payload?.payloadType];\n if (!validator) {\n throw resourcePayloadError(\n \"TriTextureRes\",\n 'Expected payloadType \"rgba\", \"texture\", or \"video\".',\n \"payloadType\"\n );\n }\n validateResourcePayload(\"TriTextureRes\", payload, validator);\n\n const values = { ...(options || {}) };\n if (payload.pixelFormat !== undefined || payload.format !== undefined) values.format = payload.pixelFormat || payload.format;\n if (payload.width !== undefined) values.width = payload.width;\n if (payload.height !== undefined) values.height = payload.height;\n if (payload.depth !== undefined) values.depth = payload.depth;\n if (payload.arraySize !== undefined) values.arraySize = payload.arraySize;\n else if (Array.isArray(payload.faces)) values.arraySize = payload.faces.length;\n if (payload.mipCount !== undefined) values.cpuMip = payload.mipCount;\n else if (payload.payloadType === ResourcePayloadType.RGBA) values.cpuMip = 1;\n if (payload.hadLodRequests !== undefined) values.hadLodRequests = !!payload.hadLodRequests;\n values.originalMemoryUsage = getPayloadMemoryUsage(payload);\n values.originalResolution = Math.max(payload.width || 0, payload.height || 0, this.originalResolution || 0);\n\n super.SetPayload(payload);\n this.SetValues(values);\n return this;\n }\n\n /**\n * Return the number of mip levels known to this texture resource.\n *\n * @returns {number}\n */\n GetMipCount() {\n return this.GetPayload()?.mipCount || this.cpuMip || 0;\n }\n\n /**\n * Return the multisample type for this texture.\n *\n * @returns {number}\n */\n GetMsaaType() {\n const payload = this.GetPayload();\n return payload?.multiSampleType ?? payload?.msaaType ?? payload?.samples ?? 1;\n }\n\n /**\n * Return the multisample quality for this texture.\n *\n * @returns {number}\n */\n GetMsaaQuality() {\n const payload = this.GetPayload();\n return payload?.multiSampleQuality ?? payload?.msaaQuality ?? 0;\n }\n\n /**\n * Return true if this texture has received LOD requests.\n *\n * @returns {boolean}\n */\n HadLodRequests() {\n return this.hadLodRequests;\n }\n\n /**\n * Return the shader-resource-view heap index when a backend owns one.\n *\n * @returns {number}\n */\n GetSrvIndexInHeap() {\n throw resourceBoundaryError(\"TriTextureRes\", \"GetSrvIndexInHeap\", \"Runtime-resource does not own descriptor heaps.\");\n }\n\n /**\n * Save this texture asynchronously.\n *\n * @param {string} path\n * @returns {boolean}\n */\n SaveAsync(path = \"\") {\n throw resourceBoundaryError(\n \"TriTextureRes\",\n \"SaveAsync\",\n `Use a format writer and caller-owned destination to save texture payloads${path ? ` (${path})` : \"\"}.`\n );\n }\n\n /**\n * Save this texture synchronously.\n *\n * @param {string} path\n * @returns {boolean}\n */\n Save(path = \"\") {\n throw resourceBoundaryError(\n \"TriTextureRes\",\n \"Save\",\n `Use a format writer and caller-owned destination to save texture payloads${path ? ` (${path})` : \"\"}.`\n );\n }\n\n /**\n * Return true if an asynchronous save is active.\n *\n * @returns {boolean}\n */\n IsSaving() {\n return false;\n }\n\n /**\n * Return true if the asynchronous save operation has completed.\n *\n * @returns {boolean}\n */\n IsSaveCompleted() {\n return true;\n }\n\n /**\n * Return true if the asynchronous save operation succeeded.\n *\n * @returns {boolean}\n */\n IsSaveSucceeded() {\n return false;\n }\n\n /**\n * Wait for an asynchronous save operation.\n *\n * @returns {boolean}\n */\n WaitForSave() {\n return this.IsSaveCompleted();\n }\n\n /**\n * Device texture allocation belongs to engine-gpu.\n *\n * @throws {Error}\n */\n CreateEmptyTexture() {\n throw resourceBoundaryError(\"TriTextureRes\", \"CreateEmptyTexture\", \"Use engine-gpu to allocate device textures.\");\n }\n\n /**\n * Render-target wrapping belongs to engine-gpu.\n *\n * @throws {Error}\n */\n SetFromRenderTarget() {\n throw resourceBoundaryError(\"TriTextureRes\", \"SetFromRenderTarget\", \"Runtime-resource does not own render targets.\");\n }\n\n /**\n * Create a texture copy from a render target.\n *\n * @throws {Error}\n */\n CreateAndCopyFromRenderTarget() {\n throw resourceBoundaryError(\"TriTextureRes\", \"CreateAndCopyFromRenderTarget\", \"Runtime-resource does not own render targets.\");\n }\n\n /**\n * Create a device texture from a host bitmap.\n *\n * @throws {Error}\n */\n CreateFromHostBitmap() {\n throw resourceBoundaryError(\"TriTextureRes\", \"CreateFromHostBitmap\", \"Use engine-gpu to allocate and upload texture data.\");\n }\n\n /**\n * Create this texture from another texture resource.\n *\n * @throws {Error}\n */\n CreateFromTexture() {\n throw resourceBoundaryError(\"TriTextureRes\", \"CreateFromTexture\", \"Use engine-gpu to copy device textures.\");\n }\n\n /**\n * Return true if this texture owns a backend allocation object.\n *\n * @param {string|number} type\n * @param {string|number} object\n * @returns {boolean}\n */\n HasALObject(type, object) {\n return this.HasAdapterResource(`${type}:${object}`);\n }\n\n /**\n * Return an engine-owned texture pipeline object when attached.\n *\n * @returns {*}\n */\n GetPipeline() {\n return this.GetAdapterResource(\"pipeline\");\n }\n\n /**\n * Return memory size for the original non-LODed texture.\n *\n * @returns {number}\n */\n GetOriginalMemoryUsage() {\n return this.originalMemoryUsage || getPayloadMemoryUsage(this.GetPayload());\n }\n\n /**\n * Store the average color reported by decoded texture data.\n *\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @returns {TriTextureRes}\n */\n SetAverageColor(red = 0, green = 0, blue = 0, alpha = 0) {\n this.averageColor = [red, green, blue, alpha];\n return this;\n }\n\n /**\n * Update a texture subresource.\n *\n * @throws {Error}\n */\n UpdateSubresource() {\n throw resourceBoundaryError(\"TriTextureRes\", \"UpdateSubresource\", \"Use engine-gpu to upload texture bytes.\");\n }\n\n /**\n * Resource preparation does not decide device upload policy.\n *\n * @returns {boolean}\n */\n PrepareResources() {\n return this.IsPrepared();\n }\n\n static payload = \"texture\";\n}\n\nfunction getPayloadMemoryUsage(payload)\n{\n if (!payload || typeof payload !== \"object\") return 0;\n if (Number.isSafeInteger(payload.originalMemoryUsage) && payload.originalMemoryUsage >= 0)\n {\n return payload.originalMemoryUsage;\n }\n return ArrayBuffer.isView(payload.data) || payload.data instanceof ArrayBuffer\n ? payload.data.byteLength\n : 0;\n}\n\n// Declared as data rather than with decorators, so the resource tree loads from\n// source without a transform. Field order is key order, and GetValues() exports\n// in that order.\nCjsSchema.define(TriTextureRes, {\n className: \"TriTextureRes\",\n family: \"resources\",\n fields: {\n format: [ type.unknown, io.read ],\n type: [ type.unknown, io.persist ],\n averageColor: [ type.color, io.read ],\n depth: [ type.uint32, io.read ],\n cutoutHeight: [ type.float32, io.readwrite ],\n height: [ type.uint32, io.read ],\n lodEnabled: [ type.boolean, io.read ],\n hadLodRequests: [ type.boolean, io.read ],\n cpuMip: [ type.uint32, io.read ],\n gpuMip: [ type.uint32, io.read ],\n wrappedRenderTarget: [ type.unknown, io.read ],\n originalResolution: [ type.uint32, io.read ],\n originalMemoryUsage: [ type.uint64, io.read ],\n name: [ type.string, io.readwrite ],\n arraySize: [ type.uint32, io.read ],\n cutoutWidth: [ type.float32, io.readwrite ],\n width: [ type.uint32, io.read ],\n cutoutX: [ type.float32, io.readwrite ],\n cutoutY: [ type.float32, io.readwrite ]\n },\n methods: {\n GetMipCount: [ carbon.method, impl.adapted ],\n GetMsaaType: [ carbon.method, impl.adapted ],\n GetMsaaQuality: [ carbon.method, impl.adapted ],\n HadLodRequests: [ carbon.method, impl.adapted ],\n GetSrvIndexInHeap: [ carbon.method, impl.notSupported ],\n SaveAsync: [ carbon.method, impl.notSupported ],\n Save: [ carbon.method, impl.notSupported ],\n IsSaving: [ carbon.method, impl.noop ],\n IsSaveCompleted: [ carbon.method, impl.noop ],\n IsSaveSucceeded: [ carbon.method, impl.noop ],\n WaitForSave: [ carbon.method, impl.noop ],\n CreateEmptyTexture: [ carbon.method, impl.notSupported ],\n SetFromRenderTarget: [ carbon.method, impl.notSupported ],\n CreateAndCopyFromRenderTarget: [ carbon.method, impl.notSupported ],\n CreateFromHostBitmap: [ carbon.method, impl.notSupported ],\n CreateFromTexture: [ carbon.method, impl.notSupported ],\n HasALObject: [ carbon.method, impl.adapted ],\n GetPipeline: [ carbon.method, impl.adapted ],\n GetOriginalMemoryUsage: [ carbon.method, impl.adapted ],\n SetAverageColor: [ carbon.method, impl.adapted ],\n UpdateSubresource: [ carbon.method, impl.notSupported ],\n PrepareResources: [ carbon.method, impl.adapted ]\n }\n});\n"],"names":["TriTextureRes","CjsResource","format","type","averageColor","depth","cutoutHeight","height","lodEnabled","hadLodRequests","cpuMip","gpuMip","wrappedRenderTarget","originalResolution","originalMemoryUsage","name","arraySize","cutoutWidth","width","cutoutX","cutoutY","constructor","values","SetValues","markDirty","skipUpdate","skipEvents","SetPayload","payload","options","validator","ResourcePayloadType","RGBA","validateRgbaPayload","TEXTURE","validateTexturePayload","VIDEO","validateVideoPayload","payloadType","resourcePayloadError","validateResourcePayload","pixelFormat","undefined","Array","isArray","faces","length","mipCount","getPayloadMemoryUsage","Math","max","GetMipCount","GetPayload","GetMsaaType","multiSampleType","msaaType","samples","GetMsaaQuality","multiSampleQuality","msaaQuality","HadLodRequests","GetSrvIndexInHeap","resourceBoundaryError","SaveAsync","path","Save","IsSaving","IsSaveCompleted","IsSaveSucceeded","WaitForSave","CreateEmptyTexture","SetFromRenderTarget","CreateAndCopyFromRenderTarget","CreateFromHostBitmap","CreateFromTexture","HasALObject","object","HasAdapterResource","GetPipeline","GetAdapterResource","GetOriginalMemoryUsage","SetAverageColor","red","green","blue","alpha","UpdateSubresource","PrepareResources","IsPrepared","Number","isSafeInteger","ArrayBuffer","isView","data","byteLength","CjsSchema","define","className","family","fields","unknown","io","read","persist","color","uint32","float32","readwrite","boolean","uint64","string","methods","carbon","method","impl","adapted","notSupported","noop"],"mappings":"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"}
|
package/docs/README.md
CHANGED
|
@@ -47,7 +47,9 @@ hydration boundary.
|
|
|
47
47
|
|
|
48
48
|
- [Architecture and boundaries](architecture.md)
|
|
49
49
|
- [Resource lifecycle concepts](concepts/resource-lifecycle.md)
|
|
50
|
+
- [Shader resource model](concepts/shader-resource-model.md)
|
|
50
51
|
- [Format subpaths](formats/README.md)
|
|
52
|
+
- [Carbon compiled-effect container](formats/carbon-effect-container.md)
|
|
51
53
|
|
|
52
54
|
## Documentation map
|
|
53
55
|
|
|
@@ -55,6 +57,12 @@ hydration boundary.
|
|
|
55
57
|
GPU-free split.
|
|
56
58
|
- [concepts/resource-lifecycle.md](concepts/resource-lifecycle.md): states,
|
|
57
59
|
the load/prepare split, and the request workflow.
|
|
60
|
+
- [concepts/shader-resource-model.md](concepts/shader-resource-model.md): how
|
|
61
|
+
`Tr2EffectRes`, `Tr2Shader` and `Tr2Effect` relate, verified against Carbon —
|
|
62
|
+
one file, many permutations, many effects sharing them.
|
|
63
|
+
- [concepts/writing-an-engine-adapter.md](concepts/writing-an-engine-adapter.md):
|
|
64
|
+
the coupling rules and the reflection/topology seam for engine packages —
|
|
65
|
+
read before writing a second engine.
|
|
58
66
|
- [reference/motherlode-cache.md](reference/motherlode-cache.md): canonical
|
|
59
67
|
identity, byte-budget cache, payload retention, and purge contracts.
|
|
60
68
|
- [reference/reload.md](reference/reload.md): the candidate-first atomic
|
|
@@ -77,10 +85,14 @@ hydration boundary.
|
|
|
77
85
|
one-sentence class-purpose catalog.
|
|
78
86
|
- [formats/README.md](formats/README.md): format import map and per-format
|
|
79
87
|
output notes.
|
|
88
|
+
- [formats/carbon-effect-container.md](formats/carbon-effect-container.md): the
|
|
89
|
+
public v15 compiled-effect binary layout, extension rules, shared byte reader
|
|
90
|
+
and writer, and arena offset policy a byte-exact re-emit depends on.
|
|
80
91
|
- [formats/gr2.md](formats/gr2.md): Granny GR2/GSF reading, output modes,
|
|
81
92
|
conversions, graph shape, and class hydration.
|
|
82
93
|
- [formats/wwise.md](formats/wwise.md): Wwise soundbank and media readers.
|
|
83
94
|
- [formats/stl.md](formats/stl.md): STL geometry export.
|
|
84
95
|
- [formats/provenance.md](formats/provenance.md): format ownership, fork
|
|
85
96
|
provenance, and retained snapshots.
|
|
86
|
-
- [roadmap.md](roadmap.md): approved future direction
|
|
97
|
+
- [roadmap.md](roadmap.md): approved future direction with explicit current
|
|
98
|
+
boundary context where needed to interpret the plan.
|
package/docs/architecture.md
CHANGED
|
@@ -74,9 +74,9 @@ historical mapping.
|
|
|
74
74
|
|
|
75
75
|
- WebGL/WebGPU realization, allocations, upload accounting, device budgets,
|
|
76
76
|
capability limits, and device-loss recovery (engine packages).
|
|
77
|
-
- Shader binary decoding, backend translation, and package serialization
|
|
78
|
-
in the
|
|
79
|
-
engine packages.
|
|
77
|
+
- Shader binary decoding, backend translation, and package serialization live
|
|
78
|
+
in the explicit `runtime-resource/formats/{hlsl,dxbc,webgl,webgpu}` subpaths.
|
|
79
|
+
Backend shader objects remain in engine packages.
|
|
80
80
|
- AudioBuffer construction, playback, or audio manager behavior.
|
|
81
81
|
- Audio-library document construction, enrichment, media-ID interpretation,
|
|
82
82
|
and delivery-route selection.
|
|
@@ -183,10 +183,13 @@ failure: destroy candidate -> LOADED (CPU payload retained)
|
|
|
183
183
|
|
|
184
184
|
ccpwgl keeps every resource in `Tw2MotherLode` until it is explicitly cleared
|
|
185
185
|
or auto-purged, and its `IsGood()` implicitly calls `KeepAlive()`, so many
|
|
186
|
-
read/check paths keep resources resident. CarbonEngineJS
|
|
186
|
+
read/check paths keep resources resident. CarbonEngineJS retains that behavior
|
|
187
|
+
for the resource being queried, while keeping payload retention and hard locks
|
|
187
188
|
explicit:
|
|
188
189
|
|
|
189
|
-
- `IsGood()
|
|
190
|
+
- `IsGood()` calls `KeepAlive()` before checking preparation. It renews this
|
|
191
|
+
handle and starts its bounded reload path when the handle is `PURGED`.
|
|
192
|
+
- `IsPrepared()` and `HasLoaded()` remain pure state checks.
|
|
190
193
|
- `KeepAlive()` and `KeepPayloadAlive()` are the explicit liveness operations.
|
|
191
194
|
- `Lock()` / `Unlock()` maintain a non-underflowing count and prevent identity
|
|
192
195
|
and payload eviction during a sweep.
|
|
@@ -195,6 +198,10 @@ explicit:
|
|
|
195
198
|
never infers JavaScript reachability. `CjsResMan.Update()` may request it
|
|
196
199
|
only under an explicitly configured automatic policy.
|
|
197
200
|
|
|
201
|
+
Generic liveness never walks arbitrary child fields. `IsGood()` renews only the
|
|
202
|
+
handle on which it is called; an aggregate consumer that owns child resources
|
|
203
|
+
must query or retain those children explicitly.
|
|
204
|
+
|
|
198
205
|
The CPU/GPU split adds an axis that ccpwgl blurs: CPU payload memory and
|
|
199
206
|
device memory are different budgets. Retention therefore distinguishes:
|
|
200
207
|
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Shader resource model
|
|
2
|
+
|
|
3
|
+
Status: Stable
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource`, with notes on `@carbonenginejs/runtime-trinity`
|
|
5
|
+
Audience: Anyone touching `Tr2EffectRes`, `Tr2Shader`, `Tr2Effect`, or shader effect formats
|
|
6
|
+
Summary: Explains how one effect file, its permutations, and the objects that resolve them relate.
|
|
7
|
+
|
|
8
|
+
## Three levels
|
|
9
|
+
|
|
10
|
+
The distinction between resource, resolved shader, and effect instance is
|
|
11
|
+
load-bearing:
|
|
12
|
+
|
|
13
|
+
| Level | Represents | Owns |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `Tr2EffectRes` | One effect file | Bytes, permutation axes, offset table, and a cache of resolved shaders |
|
|
16
|
+
| `Tr2Shader` | One permutation | Techniques and passes for one option set |
|
|
17
|
+
| `Tr2Effect` | One instance | Authored options, a resource reference, and the currently resolved shader |
|
|
18
|
+
|
|
19
|
+
One file yields many shaders. One shader represents one permutation. Many
|
|
20
|
+
effect instances may share the same resource and cached shader.
|
|
21
|
+
|
|
22
|
+
## Carbon model
|
|
23
|
+
|
|
24
|
+
Carbon's `Tr2EffectRes` retains the whole compiled file, its permutation
|
|
25
|
+
records, and a map from permutation index to `Tr2Shader`. Its
|
|
26
|
+
`GetShader(options, count)` resolves an option tuple to an index and reuses the
|
|
27
|
+
cached shader for that index.
|
|
28
|
+
|
|
29
|
+
`Tr2Effect` inherits the shader pointer from `Tr2Material`. Rebuilding an
|
|
30
|
+
effect clears that pointer and resolves it again through the resource. This
|
|
31
|
+
creates two deliberate caches:
|
|
32
|
+
|
|
33
|
+
- the resource caches one hydrated shader per permutation index; and
|
|
34
|
+
- each effect instance caches its currently resolved pointer.
|
|
35
|
+
|
|
36
|
+
Changing effect options therefore selects another shader from the same loaded
|
|
37
|
+
file rather than loading another file.
|
|
38
|
+
|
|
39
|
+
## Runtime-resource model
|
|
40
|
+
|
|
41
|
+
`runtime-resource/src/resource/shader/Tr2EffectRes.js` follows the same shape:
|
|
42
|
+
|
|
43
|
+
| Carbon | Runtime-resource |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| shader map keyed by permutation index | private `#shaders` map |
|
|
46
|
+
| `GetShader(options, count)` | option resolution followed by `GetShaderByIndex` |
|
|
47
|
+
| permutation records | `permutationGraph.axes` and `variants` |
|
|
48
|
+
| offset-table body lookup | portable reflection lookup; Carbon-record adapter pending |
|
|
49
|
+
| retained file bytes | `GetPayload()` |
|
|
50
|
+
|
|
51
|
+
`runtime-trinity`'s `Tr2Effect.RebuildCachedDataInternal` clears and
|
|
52
|
+
re-resolves its shader through the effect resource. Renderer-owned pipelines,
|
|
53
|
+
bind groups, and GPU handles are not part of this device-free graph.
|
|
54
|
+
|
|
55
|
+
## Package coverage
|
|
56
|
+
|
|
57
|
+
Carbon effect files carry every permutation and select through a dense offset
|
|
58
|
+
table. Representative source files demonstrate why body count and permutation
|
|
59
|
+
count are different:
|
|
60
|
+
|
|
61
|
+
| File | Permutations | Distinct bodies |
|
|
62
|
+
| --- | ---: | ---: |
|
|
63
|
+
| `effect.dx11/.../unpacked_quadv5.sm_hi` | 480 | 144 |
|
|
64
|
+
| `effect.gles2/.../geometryviewer.sm_hi` | 80 | 27 |
|
|
65
|
+
| `effect.gles2/.../textureviewer.sm_hi` | 18 | 3 |
|
|
66
|
+
|
|
67
|
+
Current `.cewgpu` bytes use Carbon's version-15 record layout and retain every
|
|
68
|
+
permutation row and representable non-program description fields. Non-dynamic
|
|
69
|
+
sampler names are unrecoverable and stage order is canonicalized. Emitted body
|
|
70
|
+
dedupe follows exact emitted bytes, so it need not preserve the original source
|
|
71
|
+
alias partition. `mode: "selected"` narrows which body receives translated
|
|
72
|
+
WGSL; it does not discard source permutations. `mode: "all"` attempts every
|
|
73
|
+
distinct body after the resolved selection passes the initial translation gate.
|
|
74
|
+
|
|
75
|
+
`.cewg` remains its own CEWG chunk format. Its current package contract also
|
|
76
|
+
preserves complete source permutation topology and supports selected versus
|
|
77
|
+
all backend coverage.
|
|
78
|
+
|
|
79
|
+
The selected/all distinction is therefore backend translation scope, not
|
|
80
|
+
source cardinality. A resource can still reason about every option tuple even
|
|
81
|
+
when some bodies have no translated backend program.
|
|
82
|
+
|
|
83
|
+
## Current integration boundaries
|
|
84
|
+
|
|
85
|
+
The wire topology is complete, but two adapters still require focused
|
|
86
|
+
regression proof:
|
|
87
|
+
|
|
88
|
+
- the raw CEWGPU container's Carbon description must be converted to the
|
|
89
|
+
portable envelope expected by `Tr2Shader.fromPortable`; and
|
|
90
|
+
- the engine's derived body-program view must agree on stable pass-unit
|
|
91
|
+
identity.
|
|
92
|
+
|
|
93
|
+
Until those adapters are reconciled, the presence of every permutation proves
|
|
94
|
+
source preservation, not successful runtime hydration or execution.
|
|
95
|
+
|
|
96
|
+
## Reading the model without inventing gaps
|
|
97
|
+
|
|
98
|
+
Three recurring mistakes explain most false conclusions in this area:
|
|
99
|
+
|
|
100
|
+
1. **Searching only one package.** `Tr2EffectRes` is in runtime-resource while
|
|
101
|
+
`Tr2Effect` is in runtime-trinity.
|
|
102
|
+
2. **Searching only the derived class.** The effect's shader pointer is
|
|
103
|
+
declared on its `Tr2Material` base.
|
|
104
|
+
3. **Confusing permutation rows with stored bodies.** Several rows may alias
|
|
105
|
+
one description body while remaining distinct option selections.
|
|
106
|
+
|
|
107
|
+
When an expected mechanism appears absent, check the owner package, base
|
|
108
|
+
classes, and record indirection before treating the absence as a design gap.
|
|
109
|
+
|
|
110
|
+
## Related documentation
|
|
111
|
+
|
|
112
|
+
- [CEWGPU effect container](../formats/webgpu/formats/cewgpu.md)
|
|
113
|
+
- [Carbon compiled-effect container](../formats/carbon-effect-container.md)
|
|
114
|
+
- [WebGPU effect packaging](../formats/webgpu/guides/effect-packaging.md)
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Writing an engine adapter
|
|
2
|
+
|
|
3
|
+
Status: Stable
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource`, addressed to engine packages
|
|
5
|
+
Audience: Anyone building `engine-webgl`, a second WebGPU engine, or any package that realizes CPU payloads into backend objects
|
|
6
|
+
Summary: The coupling rules, the reflection/topology seam, and the two mistakes `engine-webgpu` already made that a second engine must not repeat.
|
|
7
|
+
|
|
8
|
+
## Read this before writing a second engine
|
|
9
|
+
|
|
10
|
+
`engine-webgpu` is currently the only engine package. Most of its shape is right
|
|
11
|
+
and worth copying. Two things are not, and both are easier to avoid than to undo.
|
|
12
|
+
This document exists because the second engine is being written after the first
|
|
13
|
+
one's mistakes were diagnosed but before they were fixed.
|
|
14
|
+
|
|
15
|
+
## The coupling rule
|
|
16
|
+
|
|
17
|
+
**Engine packages take functions and duck-typed objects. They do not import the
|
|
18
|
+
layers above or beside them.**
|
|
19
|
+
|
|
20
|
+
`engine-webgpu` declares this as a non-goal and holds it: no dependency on
|
|
21
|
+
`runtime-core`, `runtime-resource`, or `runtime-trinity`. Three existing seams
|
|
22
|
+
show the pattern, and a new engine should reach for one of them rather than
|
|
23
|
+
inventing a fourth:
|
|
24
|
+
|
|
25
|
+
| seam | shape |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `CjsWebGPUPackage.fromBytes(bytes, { read })` | the format reader arrives as a **function** |
|
|
28
|
+
| `CjsWebGPUTrinityBatchDispatcher(hooks)` | `ResolveMaterial` / `ResolveBindings` arrive as **hooks**; the batch is duck-typed on the `Tr2RenderBatch` shape |
|
|
29
|
+
| `CjsTextureArrayRes` | the engine calls `ConsumeUpdateRequest()`, prepares a candidate, then `CommitPreparedAdapterRevision()` — **the resource layer owns the state machine and never holds engine code** |
|
|
30
|
+
|
|
31
|
+
The third is the most instructive. Realization is not a callback the resource
|
|
32
|
+
layer fires into the engine; it is a request the engine consumes and a commit it
|
|
33
|
+
returns. The engine drives its own frame, which is what an engine must do, while
|
|
34
|
+
the resource layer keeps the queue, the revisions, and the failure handling.
|
|
35
|
+
|
|
36
|
+
## What the resource layer owns
|
|
37
|
+
|
|
38
|
+
Resource identity, the cache, CPU payload lifecycle, format selection, the
|
|
39
|
+
load/publication queues, and **permutation selection**. It stops at a published
|
|
40
|
+
CPU payload; it hands out objects and accepts commits.
|
|
41
|
+
|
|
42
|
+
It is GPU-free and stays that way. It does not define GPU-shaped interfaces for
|
|
43
|
+
engines to implement, which is precisely why the consume/commit shape is used
|
|
44
|
+
instead of an injected realizer.
|
|
45
|
+
|
|
46
|
+
## The seam: reflection from the shader, topology from the package
|
|
47
|
+
|
|
48
|
+
This is the distinction the first engine got wrong.
|
|
49
|
+
|
|
50
|
+
**Carbon reflection belongs to `Tr2Shader`.** One file yields many shaders, one
|
|
51
|
+
shader is one permutation, and many effects share them — see
|
|
52
|
+
[shader-resource-model.md](shader-resource-model.md). The surface is
|
|
53
|
+
`GetConstant(name)`, `GetResource(name)`, `GetParameterAnnotations(parameterName)`,
|
|
54
|
+
`GetEffectDescription()` and `iterateStages()`, reachable through
|
|
55
|
+
`GetPortableEffectReflection` -> `Tr2Shader.fromPortable`.
|
|
56
|
+
|
|
57
|
+
**Backend binding topology belongs to the package**, because it has no Carbon
|
|
58
|
+
counterpart — it comes from the lowered IR, not from Carbon's D3D-era reflection.
|
|
59
|
+
|
|
60
|
+
| ask the shader | ask the package |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `constants[].{name, offset, size}` | `group`, `binding`, `visibility` |
|
|
63
|
+
| resource `type`, `isSRGB` | `generatedSymbol`, `resourceKind` |
|
|
64
|
+
| annotations | `registerIndex`, `registerSpace` |
|
|
65
|
+
| the parameter's name | `viewDimension` |
|
|
66
|
+
|
|
67
|
+
If you find yourself wanting *richer package reflection*, you are on the wrong
|
|
68
|
+
side of this table. The data you want is on the shader, and it is there because
|
|
69
|
+
Carbon put it there.
|
|
70
|
+
|
|
71
|
+
## The two mistakes not to copy
|
|
72
|
+
|
|
73
|
+
### 1. Do not read format-package records for Carbon reflection
|
|
74
|
+
|
|
75
|
+
`engine-webgpu/src/core/packageHelpers.js` and
|
|
76
|
+
`src/core/spaceObjectMainBindings.js` read `metadataName`, `heapView`,
|
|
77
|
+
`carbon.type`, `carbon.isSRGB` and `carbon.constants[].{name, offset, size}`
|
|
78
|
+
directly out of the format package, to pack real material uniform bytes. Twelve
|
|
79
|
+
lines, two files, and a known layering defect: engine code must consume the
|
|
80
|
+
resource-owned `Tr2Shader` reflection graph rather than make format-package
|
|
81
|
+
records its material API.
|
|
82
|
+
|
|
83
|
+
It is deferred rather than fixed because nothing can use that path until the
|
|
84
|
+
shader work lands, so the break is theoretical. That is a reason not to rush it,
|
|
85
|
+
not a reason to reproduce it.
|
|
86
|
+
|
|
87
|
+
### 2. Do not reimplement permutation selection
|
|
88
|
+
|
|
89
|
+
`Tr2EffectRes` already keeps a permutation-index-keyed shader cache and resolves
|
|
90
|
+
options through it — Carbon's own mechanism, and ours matches. An engine that
|
|
91
|
+
grows its own index-keyed resolution is writing a second copy of a tested thing.
|
|
92
|
+
|
|
93
|
+
Building pipelines, bind groups and GPU objects is **not** duplication; that is
|
|
94
|
+
the engine's whole job. The line falls exactly where the table above falls.
|
|
95
|
+
|
|
96
|
+
## runtime-core is optional
|
|
97
|
+
|
|
98
|
+
`runtime-core` wires named services by default — `RegisterResourceBehavior`
|
|
99
|
+
registers "a structural request policy without importing its owner", and the
|
|
100
|
+
resource manager, space-object factory and audio manager register the same way.
|
|
101
|
+
It is a convenience wrapper, not a dependency.
|
|
102
|
+
|
|
103
|
+
Every hook it registers can be passed by hand. An engine that only works when
|
|
104
|
+
`runtime-core` is present has taken a dependency through the back door.
|
|
105
|
+
|
|
106
|
+
## Checklist for a new engine package
|
|
107
|
+
|
|
108
|
+
- no imports of `runtime-core`, `runtime-resource`, or `runtime-trinity`
|
|
109
|
+
- readers, material resolvers and batch shapes arrive injected or duck-typed
|
|
110
|
+
- Carbon reflection is read from a shader object handed in, never from format
|
|
111
|
+
records
|
|
112
|
+
- permutation selection is asked for, never reimplemented
|
|
113
|
+
- long-lived state machines and queues stay in the resource layer; the engine
|
|
114
|
+
consumes requests and commits results
|
|
115
|
+
- the package works with `runtime-core` absent
|
package/docs/formats/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Status: Evolving
|
|
4
4
|
Scope: `@carbonenginejs/runtime-resource/formats`
|
|
5
5
|
Audience: Users and integrators
|
|
6
|
-
Summary: Maps every
|
|
6
|
+
Summary: Maps every owned format subpath and records cross-format output conventions.
|
|
7
7
|
|
|
8
8
|
## Import rule
|
|
9
9
|
|
|
@@ -70,6 +70,29 @@ Detailed pages: [Granny GR2 and GSF](gr2.md),
|
|
|
70
70
|
history, retained snapshots, and donor licensing are recorded in
|
|
71
71
|
[provenance.md](provenance.md).
|
|
72
72
|
|
|
73
|
+
## Black and Red reader boundary
|
|
74
|
+
|
|
75
|
+
`CjsBlackReader` and `CjsRedReader` share `CjsBlueReader` as an output and
|
|
76
|
+
hydration backend. The shared layer owns payload/runtime target creation,
|
|
77
|
+
payload-reference markers, hydration-adapter coordination, reports, and
|
|
78
|
+
runtime finalization. It does not own transport framing or graph traversal.
|
|
79
|
+
|
|
80
|
+
Black retains its binary buffer and cursor, string tables, numeric reference
|
|
81
|
+
tokens, schema/descriptor field resolution, skip behavior, and
|
|
82
|
+
Black-specific property readers. Structure-list parsing and skipping therefore
|
|
83
|
+
remain on the Black side. Red retains YAML parsing, anchors and aliases, typed
|
|
84
|
+
table decoding, and lenient named-field assignment. Red is the YAML-encoded
|
|
85
|
+
Blue graph transport; the generic `CjsYamlFormat` reader is separate and does
|
|
86
|
+
not use the Blue backend.
|
|
87
|
+
|
|
88
|
+
These readers are source-bound and garbage-collected rather than explicitly
|
|
89
|
+
disposed. A read entry point resets its graph state before walking the same
|
|
90
|
+
bound source again; Black also restores its binary cursor. Runtime hydration
|
|
91
|
+
constructs a target when its node is encountered, applies that node's values
|
|
92
|
+
after its children have been read, and defers all `finalize` calls until the
|
|
93
|
+
complete graph is available. Untyped Red maps remain plain value objects and
|
|
94
|
+
do not enter the runtime adapter lifecycle.
|
|
95
|
+
|
|
73
96
|
## Granny GR2/GSF
|
|
74
97
|
|
|
75
98
|
`CjsGr2Format` reads `.gr2` geometry/skeleton/animation graphs and `.gsf`
|