@carbonenginejs/runtime 0.1.0-alpha.6 → 0.1.0-alpha.7
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.
Potentially problematic release.
This version of @carbonenginejs/runtime might be problematic. Click here for more details.
- package/dist/global/consts/effectPaths.js +4 -1
- package/dist/global/consts/effectPaths.js.map +1 -1
- package/dist/global/consts/index.js +1 -1
- package/dist/global/index.js +1 -1
- package/dist/index.js +3 -3
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +19 -2
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/resource/format/index.js +1 -1
- package/dist/resource/formats/hlsl/core/carbonTypedViews.js +121 -65
- package/dist/resource/formats/hlsl/core/carbonTypedViews.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +10 -7
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/resource/formats/webgpu/core/effectBackendBodySet.js +3 -1
- package/dist/resource/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
- package/dist/resource/formats/webgpu/core/packageEffect.js +5 -0
- package/dist/resource/formats/webgpu/core/packageEffect.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/emitWgsl.js +20 -0
- package/dist/resource/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/emulatedAddressing.js +93 -4
- package/dist/resource/formats/webgpu/core/wgsl/emulatedAddressing.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +74 -64
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerFragmentProgram.js +16 -7
- package/dist/resource/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/wgslTypedViews.js +69 -27
- package/dist/resource/formats/webgpu/core/wgsl/wgslTypedViews.js.map +1 -1
- package/dist/resource/geometry/registerGeometryResources.js +10 -1
- package/dist/resource/geometry/registerGeometryResources.js.map +1 -1
- package/dist/sof/EveSOFDNA.js +4 -2
- package/dist/sof/EveSOFDNA.js.map +1 -1
- package/dist/sof/EveSOFDataMgr.js +83 -69
- package/dist/sof/EveSOFDataMgr.js.map +1 -1
- package/dist/trinity/core/Tr2Denoiser.js +6 -1
- package/dist/trinity/core/Tr2Denoiser.js.map +1 -1
- package/dist/trinity/core/Tr2ShadowMap.js +7 -2
- package/dist/trinity/core/Tr2ShadowMap.js.map +1 -1
- package/dist/trinity/core/context/Tr2RenderContext.js +43 -0
- package/dist/trinity/core/context/Tr2RenderContext.js.map +1 -1
- package/dist/trinity/core/device/Tr2GpuStructuredBuffer.js +134 -0
- package/dist/trinity/core/device/Tr2GpuStructuredBuffer.js.map +1 -0
- package/dist/trinity/core/index.js +1 -0
- package/dist/trinity/core/index.js.map +1 -1
- package/dist/trinity/core/lighting/Tr2LightManager.js +410 -124
- package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
- package/dist/trinity/eve/effect/lensflare/EveLensflare.js +303 -312
- package/dist/trinity/eve/effect/lensflare/EveLensflare.js.map +1 -1
- package/dist/trinity/eve/effect/lensflare/EveOccluder.js +117 -0
- package/dist/trinity/eve/effect/lensflare/EveOccluder.js.map +1 -0
- package/dist/trinity/eve/index.js +1 -0
- package/dist/trinity/eve/index.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceScene.js +286 -6
- package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +212 -32
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
- package/dist/trinity/generated/eve/effect/index.js +0 -1
- package/dist/trinity/generated/eve/effect/index.js.map +1 -1
- package/dist/trinity/generated/eve/index.js +0 -1
- package/dist/trinity/generated/eve/index.js.map +1 -1
- package/dist/trinity/generated/index.js +0 -2
- package/dist/trinity/generated/index.js.map +1 -1
- package/dist/trinity/generated/trinityCore/index.js +0 -1
- package/dist/trinity/generated/trinityCore/index.js.map +1 -1
- package/dist/trinity/index.js +2 -2
- package/dist/trinity/postProcess/Tr2PostProcessRenderer.js +4 -1
- package/dist/trinity/postProcess/Tr2PostProcessRenderer.js.map +1 -1
- package/dist/trinity/postProcess/Tr2SSAO.js +282 -21
- package/dist/trinity/postProcess/Tr2SSAO.js.map +1 -1
- package/dist/trinity/shader/parameter/Tr2RuntimeTextureParameter.js +71 -53
- package/dist/trinity/shader/parameter/Tr2RuntimeTextureParameter.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +81 -18
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js +46 -4
- package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js +32 -1
- package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js +27 -0
- package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +29 -4
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js +32 -2
- package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +57 -5
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js +111 -5
- package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js.map +1 -1
- package/docs/trinity/reference/classes/generated.md +20 -20
- package/docs/trinity/reference/classes/post-process.md +1 -1
- package/package.json +1 -1
- package/dist/trinity/generated/eve/effect/EveOccluder.js +0 -38
- package/dist/trinity/generated/eve/effect/EveOccluder.js.map +0 -1
- package/dist/trinity/generated/trinityCore/Tr2GpuStructuredBuffer.js +0 -48
- package/dist/trinity/generated/trinityCore/Tr2GpuStructuredBuffer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EveLensflare.js","sources":["../../../../../../src/trinity/eve/effect/lensflare/EveLensflare.js"],"sourcesContent":["// Source: trinity/trinity/Eve/EveLensflare.h\n// Source: trinity/trinity/Eve/EveLensflare.cpp\n// Hand-maintained after promotion from generated schema intake.\nimport { carbon, impl, edit, type } from \"#schema\";\nimport { CjsModel } from \"#model\";\nimport { mat4 } from \"#math/mat4\";\nimport { vec3 } from \"#math/vec3\";\nimport { vec4 } from \"#math/vec4\";\nimport { ITr2Renderable } from \"../../../core/ITr2Renderable.js\";\nimport { Tr2VariableStore } from \"../../../core/variable/Tr2VariableStore.js\";\nimport { Tr2OcclusionBuffer } from \"./Tr2OcclusionBuffer.js\";\n\n/** Scratch for PrepareRender's negated vectors. */\nconst prepareScratch = vec3.create();\n\n/** The float whose bits are `value`: Carbon's `*reinterpret_cast<float*>( &offset )` (cpp:170). */\nconst bitsAsFloat = value => new Float32Array(new Uint32Array([ value >>> 0 ]).buffer)[0];\n\n/** Represents a lens-flare graph with CPU-side visibility and controller state. */\n@type.define({ className: \"EveLensflare\", family: \"eve/effect\" })\n@carbon.inherit(ITr2Renderable)\nexport class EveLensflare extends CjsModel\n{\n\n #controllerVariables = new Map();\n\n /** m_translationCurve (ITriVectorFunctionPtr) [READWRITE] */\n @edit.readwrite\n @type.objectRef(\"ITriVectorFunction\")\n translationCurve = null;\n\n /** m_mesh (Tr2MeshPtr) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.model(\"Tr2Mesh\")\n mesh = null;\n\n /** m_name (std::string) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.string\n name = \"\";\n\n /** m_backgroundOccluders (PEveOccluderVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"EveOccluder\")\n backgroundOccluders = [];\n\n /** m_occluders (PEveOccluderVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"EveOccluder\")\n occluders = [];\n\n /** m_curveSets (PTriCurveSetVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"TriCurveSet\")\n curveSets = [];\n\n /** m_distanceToEdgeCurves (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n distanceToEdgeCurves = [];\n\n /** m_distanceToCenterCurves (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n distanceToCenterCurves = [];\n\n /** m_radialAngleCurves (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n radialAngleCurves = [];\n\n /** m_xDistanceToCenter (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n xDistanceToCenter = [];\n\n /** m_yDistanceToCenter (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n yDistanceToCenter = [];\n\n /** m_controllers (PITr2ControllerVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITr2Controller\")\n controllers = [];\n\n /** m_bindings (PITr2ValueBindingVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITr2ValueBinding\")\n bindings = [];\n\n /** m_cameraFactor (float) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.float32\n cameraFactor = 20;\n\n /** m_position (Vector3) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.vec3\n position = vec3.create();\n\n /** m_flares (PEveTransformVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"EveTransform\")\n flares = [];\n\n /** m_update (bool) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.boolean\n update = true;\n\n /** m_display (bool) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.boolean\n display = true;\n\n /** m_isVisible (EveLensflare.h:95; ctor false, cpp:68) - runtime state,\n * not persisted. */\n isVisible = false;\n\n /** m_direction (EveLensflare.h:106) - zero until PrepareRender stamps\n * Normalize(-position); the first-frame zero direction dots to 0, which\n * counts as VISIBLE (the >= comparison) - deliberate Carbon behavior. */\n direction = vec3.create();\n\n /** m_sunSize (EveLensflare.h:107; ctor 0, cpp:71) - computed by Carbon's\n * Update from the distance-to-center falloff (cpp:161-165); PrepareRender\n * consumes it but does not produce it. Runtime state, not persisted. */\n sunSize = 0;\n\n /** m_occlusionOffset / m_backgroundOcclusionOffset (EveLensflare.h:140-141) -\n * Tr2OcclusionBuffer slots this lensflare allocates on its first occlusion\n * query (RunOcclusionQueries, cpp:330-337). null until then; Carbon's null\n * case uploads 0. */\n occlusionOffset = null;\n\n backgroundOcclusionOffset = null;\n\n /** m_directionVar: the global \"LensflareFxDirectionScale\" (cpp:72). */\n #directionVar = Tr2VariableStore.GlobalStore().RegisterVariable(\"LensflareFxDirectionScale\", [ 0, 0, 0, 1 ]);\n\n /**\n * m_occScaleVar: the global \"LensflareFxOccScale\" (cpp:73), (1, 0, 0, 0)\n * until the first Update. x and y carry the foreground and background slot\n * bases as float BITS; the god rays read FlareOcclusionBuffer at y.\n */\n #occScaleVar = Tr2VariableStore.GlobalStore().RegisterVariable(\"LensflareFxOccScale\", [ 1, 0, 0, 0 ]);\n\n /** m_transform (EveLensflare.h:102; ctor identity, cpp:74) - stamped by\n * PrepareRender, forwarded to the flare children as their parent. */\n transform = mat4.create();\n\n /** Carbon EveLensflare::Update (EveLensflare.cpp:145-182): position from the\n * translation curve, the sun-size curve of very old magic numbers\n * (1.5 / ln(d_AU + 2.71), 0.1495978707e12 metres per AU; no curve means\n * sunSize 1, not the constructed 0), then curve sets and controllers.\n * Then Carbon's occlusion upload (cpp:168-171): the slot bases bit-cast into\n * the global LensflareFxOccScale. It is not a duplicate of the per-object\n * indices GetPerObjectData ships: the flare mesh reads those, but the god\n * rays read this GLOBAL, and until 2026-09-26 it was never written. The curve is\n * called out-last (Update(simTime, position)) per the org convention -\n * Carbon's is out-first. */\n @carbon.method\n @impl.implemented\n Update(realTime, simTime)\n {\n if (!this.update) return;\n\n if (this.translationCurve)\n {\n this.translationCurve.Update(simTime, this.position);\n const distanceToCenter = vec3.length(this.position) / 0.1495978707e12;\n this.sunSize = 1.5 / Math.log(distanceToCenter + 2.71);\n }\n else\n {\n this.sunSize = 1;\n }\n\n this.#occScaleVar.SetValue([\n bitsAsFloat(this.occlusionOffset ?? 0),\n bitsAsFloat(this.backgroundOcclusionOffset ?? 0),\n 0,\n 0\n ]);\n\n for (const curveSet of this.curveSets)\n {\n curveSet?.Update(realTime, simTime);\n }\n for (const controller of this.controllers)\n {\n controller?.Update(0.5);\n }\n }\n\n /** Carbon EveLensflare::UpdateVisibility (EveLensflare.cpp:298-311): the\n * viewDir dot test - visible iff dot(frustum.viewDir, direction) >= 0\n * (a sun exactly perpendicular to the view IS visible), then every flare\n * child updates its visibility under this lensflare's transform. NO display\n * gate (the display || isVisible gate lives in GetRenderables, cpp:281).\n * ONE-FRAME LATENCY is contract: within a Carbon frame this runs before\n * PrepareRender, so the dot uses the PREVIOUS frame's direction and\n * forwards the previous frame's transform - do not \"fix\" the order. Scene\n * call site: EveSpaceScene.cpp:1462-1466 (sequential, single-lensflare). */\n @carbon.method\n @impl.implemented\n UpdateVisibility(updateContext)\n {\n this.isVisible = false;\n const frustum = updateContext?.GetFrustum?.() ?? updateContext?.frustum;\n const viewDir = frustum?.viewDir ?? frustum?.m_viewDir;\n const viewDotDir = viewDir ? vec3.dot(viewDir, this.direction) : 0;\n this.isVisible = viewDotDir >= 0;\n for (const flare of this.flares)\n {\n flare?.UpdateVisibility(updateContext, this.transform);\n }\n }\n\n /**\n * Carbon RunOcclusionQueries (cpp:323-347): allocates this lensflare's\n * foreground and background slots on first call - a new slot is Cleared to\n * visibility 1.0 - then runs each foreground occluder's query into its\n * counters.\n *\n * PARTIAL: EveOccluder.RunQuery (EveOccluder.cpp:150-185) is not ported, so\n * the occluders do not run and the slots keep visibility 1.0 - the flare\n * reads unoccluded. That is reported once rather than skipped silently.\n *\n * @param {Tr2RenderContext} renderContext The frame's context.\n * @param {EveUpdateContext} _updateContext The occluders' context.\n * @returns {void}\n */\n @carbon.method\n @impl.adapted\n RunOcclusionQueries(renderContext, _updateContext)\n {\n if (!this.display) return;\n\n const occlusionBuffer = Tr2OcclusionBuffer.getInstance();\n if (this.occlusionOffset === null) this.occlusionOffset = occlusionBuffer.AllocateOffset(renderContext);\n if (this.backgroundOcclusionOffset === null) this.backgroundOcclusionOffset = occlusionBuffer.AllocateOffset(renderContext);\n\n if (this.occluders.length) EveLensflare.#WarnOccludersUnported();\n }\n\n /**\n * Carbon RunBackgroundOcclusionQueries (cpp:359-379): the background slot,\n * then the background occluders. Carbon calls it from the background pass,\n * only for scenes with planets (EveSpaceScene.cpp:2153-2170). PARTIAL for the\n * same reason as RunOcclusionQueries.\n *\n * @param {Tr2RenderContext} renderContext The frame's context.\n * @param {EveUpdateContext} _updateContext The occluders' context.\n * @returns {void}\n */\n @carbon.method\n @impl.adapted\n RunBackgroundOcclusionQueries(renderContext, _updateContext)\n {\n if (!this.display) return;\n\n if (this.backgroundOcclusionOffset === null)\n {\n this.backgroundOcclusionOffset = Tr2OcclusionBuffer.getInstance().AllocateOffset(renderContext);\n }\n\n if (this.backgroundOccluders.length) EveLensflare.#WarnOccludersUnported();\n }\n\n /** Carbon method SetControllerVariable (MAP_METHOD_AND_WRAP). */\n @carbon.method\n @impl.implemented\n SetControllerVariable(name, value)\n {\n const key = String(name);\n const next = Number(value);\n this.#controllerVariables.set(key, next);\n for (const controller of this.controllers) controller?.SetVariable(key, next);\n }\n\n /**\n * Carbon EveLensflare::HandleControllerEvent (cpp:497-503).\n *\n * MISSING UNTIL 2026-09-05. Carbon declares it beside SetControllerVariable\n * and StartControllers, both of which were ported; this one was not, and the\n * hedge at every call site meant a lens flare silently ignored every\n * controller event rather than failing.\n */\n @carbon.method\n @impl.implemented\n HandleControllerEvent(name)\n {\n const key = String(name);\n for (const controller of this.controllers) controller?.HandleEvent(key);\n }\n\n /** Carbon method StartControllers (MAP_METHOD_AND_WRAP). */\n @carbon.method\n @impl.implemented\n StartControllers()\n {\n for (const controller of this.controllers) controller?.Start();\n }\n\n /**\n * Carbon PrepareRender (cpp:192-266): the per-frame placement that needs\n * this frame's frustum. The direction to the sun (from the camera when the\n * flare has no position), a transform that turns the flare geometry toward\n * it and parks it `cameraFactor` in front of the camera, the\n * LensflareFxDirectionScale global, and the sun's screen position driving\n * the edge, centre, angle and x/y curves before the bindings copy.\n *\n * Carbon's row-vector `Transform( v, M )` over a row-major matrix is\n * gl-matrix `transformMat4` over the same bytes.\n *\n * The render context is an ADDED argument: Carbon reads the view from\n * Tr2Renderer::GetViewTransform, a static this runtime keeps on the context.\n *\n * @param {TriFrustum} frustum This frame's frustum.\n * @param {Tr2RenderContext} renderContext The frame's context.\n * @returns {void}\n */\n @carbon.method\n @impl.adapted\n PrepareRender(frustum, renderContext)\n {\n if (!this.display) return;\n\n if (vec3.squaredLength(this.position) === 0) vec3.normalize(this.direction, vec3.negate(prepareScratch, frustum.viewPos));\n else vec3.normalize(this.direction, vec3.negate(prepareScratch, this.position));\n\n const cameraSpacePos = vec3.scaleAndAdd(vec3.create(), frustum.viewPos, frustum.viewDir, -this.cameraFactor);\n\n mat4.arcFromForward(this.transform, vec3.negate(prepareScratch, this.direction));\n this.transform[12] = cameraSpacePos[0];\n this.transform[13] = cameraSpacePos[1];\n this.transform[14] = cameraSpacePos[2];\n this.transform[15] = 1;\n\n this.#directionVar.SetValue([ this.direction[0], this.direction[1], this.direction[2], this.sunSize ]);\n\n const direction = vec4.fromValues(this.direction[0], this.direction[1], this.direction[2], 0);\n vec4.transformMat4(direction, direction, renderContext.GetViewTransform());\n vec4.transformMat4(direction, direction, frustum.projectionMatrix);\n direction[0] /= direction[3];\n direction[1] /= direction[3];\n\n const distanceToEdge = 1 - Math.min(1 - Math.abs(direction[0]), 1 - Math.abs(direction[1]));\n const distanceToCenter = Math.hypot(direction[0], direction[1]);\n const radialAngle = Math.atan2(direction[1], direction[0]) + Math.PI;\n\n for (const curve of this.distanceToEdgeCurves) curve.UpdateValue(distanceToEdge);\n for (const curve of this.distanceToCenterCurves) curve.UpdateValue(distanceToCenter);\n for (const curve of this.radialAngleCurves) curve.UpdateValue(radialAngle);\n for (const curve of this.xDistanceToCenter) curve.UpdateValue(direction[0] + 10);\n for (const curve of this.yDistanceToCenter) curve.UpdateValue(direction[1] + 10);\n for (const binding of this.bindings) binding.CopyValue();\n }\n\n /**\n * Carbon GetRenderables (cpp:278-296): nothing unless displayed and visible;\n * each flare child's renderables, then this lensflare itself for its mesh.\n *\n * @param {TriFrustum} _frustum This frame's frustum (unused, as in Carbon).\n * @param {Array} renderables Out: the renderables.\n * @returns {Array} `renderables`.\n */\n @carbon.method\n @impl.implemented\n GetRenderables(_frustum, renderables = [])\n {\n if (!this.display || !this.isVisible) return renderables;\n\n for (const flare of this.flares) flare.GetRenderables(renderables, null);\n if (this.mesh) renderables.push(this);\n return renderables;\n }\n\n /** Carbon EveLensflare::GetBatches delegates the selected mesh areas (cpp:381-387). */\n @carbon.method\n @impl.implemented\n GetBatches(batches, batchType, perObjectData, _reason)\n {\n if (this.mesh)\n {\n this.mesh.GetBatches?.(batches, this.mesh.GetAreas(batchType), perObjectData);\n }\n }\n\n /** Carbon EveLensflare::HasTransparentBatches is always false (cpp:389-392). */\n @carbon.method\n @impl.implemented\n HasTransparentBatches()\n {\n return false;\n }\n\n /** Carbon EveLensflare::GetSortValue is the constant one (cpp:394-397). */\n @carbon.method\n @impl.implemented\n GetSortValue()\n {\n return 1;\n }\n\n /** Carbon EveLensflare::GetPerObjectData (cpp:399-410): directionScale =\n * (direction, sunSize); indices[0]/[1] from the optional occlusion offsets\n * (null uploads 0). indices[2] and [3] are NEVER written in Carbon - the\n * per-element writes keep that arena-garbage parity. The struct registers\n * with stages [\"vs\", \"ps\"]: one payload, same bytes bound to both slots\n * (cpp:24-38). */\n @carbon.method\n @impl.implemented\n GetPerObjectData(accumulator)\n {\n const data = accumulator.Alloc(\"EveLensflarePerObjectData\");\n\n data.Set(\"directionScale\", [this.direction[0], this.direction[1], this.direction[2], this.sunSize]);\n data.SetIndex(\"indices\", 0, [this.occlusionOffset ?? 0]);\n data.SetIndex(\"indices\", 1, [this.backgroundOcclusionOffset ?? 0]);\n\n return data;\n }\n\n /**\n * Returns this lensflare's occlusion-buffer slots. Carbon holds them as\n * Tr2OcclusionBuffer::Offset shared_ptrs whose deleter frees the slot when\n * the lensflare is destroyed (EveOccluder.cpp:36, 70-74); JavaScript has no\n * destructor, so the owner removing a lensflare calls this.\n *\n * @returns {void}\n */\n Destroy()\n {\n const occlusionBuffer = Tr2OcclusionBuffer.getInstance();\n occlusionBuffer.DestroyOffset(this.occlusionOffset);\n occlusionBuffer.DestroyOffset(this.backgroundOcclusionOffset);\n this.occlusionOffset = null;\n this.backgroundOcclusionOffset = null;\n }\n\n /** Reports, once per page, that occluders are present but EveOccluder.RunQuery is not ported. */\n static #WarnOccludersUnported()\n {\n if (EveLensflare.#occludersWarned) return;\n EveLensflare.#occludersWarned = true;\n console.warn(\"EveLensflare: EveOccluder.RunQuery is not ported; lens flares read unoccluded (visibility 1.0).\");\n }\n\n static #occludersWarned = false;\n\n}\n"],"names":["prepareScratch","vec3","create","bitsAsFloat","value","Float32Array","Uint32Array","buffer","_EveLensflare","_identity","EveLensflare","CjsModel","e","_init_translationCurve","_init_extra_translationCurve","_init_mesh","_init_extra_mesh","_init_name","_init_extra_name","_init_backgroundOccluders","_init_extra_backgroundOccluders","_init_occluders","_init_extra_occluders","_init_curveSets","_init_extra_curveSets","_init_distanceToEdgeCurves","_init_extra_distanceToEdgeCurves","_init_distanceToCenterCurves","_init_extra_distanceToCenterCurves","_init_radialAngleCurves","_init_extra_radialAngleCurves","_init_xDistanceToCenter","_init_extra_xDistanceToCenter","_init_yDistanceToCenter","_init_extra_yDistanceToCenter","_init_controllers","_init_extra_controllers","_init_bindings","_init_extra_bindings","_init_cameraFactor","_init_extra_cameraFactor","_init_position","_init_extra_position","_init_flares","_init_extra_flares","_init_update","_init_extra_update","_init_display","_init_extra_display","_initProto","c","_initClass","_applyDecs","type","define","className","family","carbon","inherit","ITr2Renderable","edit","readwrite","objectRef","persist","model","string","read","list","float32","boolean","method","impl","implemented","adapted","Map","translationCurve","mesh","name","backgroundOccluders","occluders","curveSets","distanceToEdgeCurves","distanceToCenterCurves","radialAngleCurves","xDistanceToCenter","yDistanceToCenter","controllers","bindings","cameraFactor","position","flares","update","display","isVisible","direction","sunSize","occlusionOffset","backgroundOcclusionOffset","Tr2VariableStore","GlobalStore","RegisterVariable","transform","mat4","Update","realTime","simTime","distanceToCenter","length","Math","log","SetValue","curveSet","controller","UpdateVisibility","updateContext","frustum","GetFrustum","viewDir","m_viewDir","viewDotDir","dot","flare","RunOcclusionQueries","renderContext","_updateContext","occlusionBuffer","Tr2OcclusionBuffer","getInstance","AllocateOffset","RunBackgroundOcclusionQueries","SetControllerVariable","key","String","next","Number","set","SetVariable","HandleControllerEvent","HandleEvent","StartControllers","Start","PrepareRender","squaredLength","normalize","negate","viewPos","cameraSpacePos","scaleAndAdd","arcFromForward","vec4","fromValues","transformMat4","GetViewTransform","projectionMatrix","distanceToEdge","min","abs","hypot","radialAngle","atan2","PI","curve","UpdateValue","binding","CopyValue","GetRenderables","_frustum","renderables","push","GetBatches","batches","batchType","perObjectData","_reason","GetAreas","HasTransparentBatches","GetSortValue","GetPerObjectData","accumulator","data","Alloc","Set","SetIndex","Destroy","DestroyOffset","#WarnOccludersUnported","console","warn","constructor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EveLensflare.js","sources":["../../../../../../src/trinity/eve/effect/lensflare/EveLensflare.js"],"sourcesContent":["// Source: trinity/trinity/Eve/EveLensflare.h\n// Source: trinity/trinity/Eve/EveLensflare.cpp\n// Hand-maintained after promotion from generated schema intake.\nimport { carbon, impl, edit, type } from \"#schema\";\nimport { CjsModel } from \"#model\";\nimport { mat4 } from \"#math/mat4\";\nimport { vec3 } from \"#math/vec3\";\nimport { vec4 } from \"#math/vec4\";\nimport { ITr2Renderable } from \"../../../core/ITr2Renderable.js\";\nimport { Tr2VariableStore } from \"../../../core/variable/Tr2VariableStore.js\";\nimport { Tr2OcclusionBuffer } from \"./Tr2OcclusionBuffer.js\";\n\n/** Scratch for PrepareRender's negated vectors. */\nconst prepareScratch = vec3.create();\n\n/** The float whose bits are `value`: Carbon's `*reinterpret_cast<float*>( &offset )` (cpp:170). */\nconst bitsAsFloat = value => new Float32Array(new Uint32Array([ value >>> 0 ]).buffer)[0];\n\n/** Represents a lens-flare graph with CPU-side visibility and controller state. */\n@type.define({ className: \"EveLensflare\", family: \"eve/effect\" })\n@carbon.inherit(ITr2Renderable)\nexport class EveLensflare extends CjsModel\n{\n\n #controllerVariables = new Map();\n\n /** m_translationCurve (ITriVectorFunctionPtr) [READWRITE] */\n @edit.readwrite\n @type.objectRef(\"ITriVectorFunction\")\n translationCurve = null;\n\n /** m_mesh (Tr2MeshPtr) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.model(\"Tr2Mesh\")\n mesh = null;\n\n /** m_name (std::string) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.string\n name = \"\";\n\n /** m_backgroundOccluders (PEveOccluderVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"EveOccluder\")\n backgroundOccluders = [];\n\n /** m_occluders (PEveOccluderVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"EveOccluder\")\n occluders = [];\n\n /** m_curveSets (PTriCurveSetVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"TriCurveSet\")\n curveSets = [];\n\n /** m_distanceToEdgeCurves (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n distanceToEdgeCurves = [];\n\n /** m_distanceToCenterCurves (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n distanceToCenterCurves = [];\n\n /** m_radialAngleCurves (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n radialAngleCurves = [];\n\n /** m_xDistanceToCenter (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n xDistanceToCenter = [];\n\n /** m_yDistanceToCenter (PITriFunctionVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITriFunction\")\n yDistanceToCenter = [];\n\n /** m_controllers (PITr2ControllerVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITr2Controller\")\n controllers = [];\n\n /** m_bindings (PITr2ValueBindingVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"ITr2ValueBinding\")\n bindings = [];\n\n /** m_cameraFactor (float) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.float32\n cameraFactor = 20;\n\n /** m_position (Vector3) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.vec3\n position = vec3.create();\n\n /** m_flares (PEveTransformVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"EveTransform\")\n flares = [];\n\n /** m_update (bool) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.boolean\n update = true;\n\n /** m_display (bool) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.boolean\n display = true;\n\n /** m_isVisible (EveLensflare.h:95; ctor false, cpp:68) - runtime state,\n * not persisted. */\n isVisible = false;\n\n /** m_direction (EveLensflare.h:106) - zero until PrepareRender stamps\n * Normalize(-position); the first-frame zero direction dots to 0, which\n * counts as VISIBLE (the >= comparison) - deliberate Carbon behavior. */\n direction = vec3.create();\n\n /** m_sunSize (EveLensflare.h:107; ctor 0, cpp:71) - computed by Carbon's\n * Update from the distance-to-center falloff (cpp:161-165); PrepareRender\n * consumes it but does not produce it. Runtime state, not persisted. */\n sunSize = 0;\n\n /** m_occlusionOffset / m_backgroundOcclusionOffset (EveLensflare.h:140-141) -\n * Tr2OcclusionBuffer slots this lensflare allocates on its first occlusion\n * query (RunOcclusionQueries, cpp:330-337). null until then; Carbon's null\n * case uploads 0. */\n occlusionOffset = null;\n\n backgroundOcclusionOffset = null;\n\n /** m_directionVar: the global \"LensflareFxDirectionScale\" (cpp:72). */\n #directionVar = Tr2VariableStore.GlobalStore().RegisterVariable(\"LensflareFxDirectionScale\", [ 0, 0, 0, 1 ]);\n\n /**\n * m_occScaleVar: the global \"LensflareFxOccScale\" (cpp:73), (1, 0, 0, 0)\n * until the first Update. x and y carry the foreground and background slot\n * bases as float BITS; the god rays read FlareOcclusionBuffer at y.\n */\n #occScaleVar = Tr2VariableStore.GlobalStore().RegisterVariable(\"LensflareFxOccScale\", [ 1, 0, 0, 0 ]);\n\n /** m_transform (EveLensflare.h:102; ctor identity, cpp:74) - stamped by\n * PrepareRender, forwarded to the flare children as their parent. */\n transform = mat4.create();\n\n /** Carbon EveLensflare::Update (EveLensflare.cpp:145-182): position from the\n * translation curve, the sun-size curve of very old magic numbers\n * (1.5 / ln(d_AU + 2.71), 0.1495978707e12 metres per AU; no curve means\n * sunSize 1, not the constructed 0), then curve sets and controllers.\n * Then Carbon's occlusion upload (cpp:168-171): the slot bases bit-cast into\n * the global LensflareFxOccScale. It is not a duplicate of the per-object\n * indices GetPerObjectData ships: the flare mesh reads those, but the god\n * rays read this GLOBAL, and until 2026-09-26 it was never written. The curve is\n * called out-last (Update(simTime, position)) per the org convention -\n * Carbon's is out-first. */\n @carbon.method\n @impl.implemented\n Update(realTime, simTime)\n {\n if (!this.update) return;\n\n if (this.translationCurve)\n {\n this.translationCurve.Update(simTime, this.position);\n const distanceToCenter = vec3.length(this.position) / 0.1495978707e12;\n this.sunSize = 1.5 / Math.log(distanceToCenter + 2.71);\n }\n else\n {\n this.sunSize = 1;\n }\n\n this.#occScaleVar.SetValue([\n bitsAsFloat(this.occlusionOffset ?? 0),\n bitsAsFloat(this.backgroundOcclusionOffset ?? 0),\n 0,\n 0\n ]);\n\n for (const curveSet of this.curveSets)\n {\n curveSet?.Update(realTime, simTime);\n }\n for (const controller of this.controllers)\n {\n controller?.Update(0.5);\n }\n }\n\n /** Carbon EveLensflare::UpdateVisibility (EveLensflare.cpp:298-311): the\n * viewDir dot test - visible iff dot(frustum.viewDir, direction) >= 0\n * (a sun exactly perpendicular to the view IS visible), then every flare\n * child updates its visibility under this lensflare's transform. NO display\n * gate (the display || isVisible gate lives in GetRenderables, cpp:281).\n * ONE-FRAME LATENCY is contract: within a Carbon frame this runs before\n * PrepareRender, so the dot uses the PREVIOUS frame's direction and\n * forwards the previous frame's transform - do not \"fix\" the order. Scene\n * call site: EveSpaceScene.cpp:1462-1466 (sequential, single-lensflare). */\n @carbon.method\n @impl.implemented\n UpdateVisibility(updateContext)\n {\n this.isVisible = false;\n const frustum = updateContext?.GetFrustum?.() ?? updateContext?.frustum;\n const viewDir = frustum?.viewDir ?? frustum?.m_viewDir;\n const viewDotDir = viewDir ? vec3.dot(viewDir, this.direction) : 0;\n this.isVisible = viewDotDir >= 0;\n for (const flare of this.flares)\n {\n flare?.UpdateVisibility(updateContext, this.transform);\n }\n }\n\n /**\n * Carbon RunOcclusionQueries (cpp:323-347): allocates this lensflare's\n * foreground and background slots on first call - a new slot is Cleared to\n * visibility 1.0 - then runs each foreground occluder's query into its\n * counters, with fog weight 1.\n *\n * @param {Tr2RenderContext} renderContext The frame's context.\n * @param {EveUpdateContext} updateContext The occluders' context.\n * @returns {void}\n */\n @carbon.method\n @impl.implemented\n RunOcclusionQueries(renderContext, updateContext)\n {\n if (!this.display) return;\n\n const occlusionBuffer = Tr2OcclusionBuffer.getInstance();\n if (this.occlusionOffset === null) this.occlusionOffset = occlusionBuffer.AllocateOffset(renderContext);\n if (this.backgroundOcclusionOffset === null) this.backgroundOcclusionOffset = occlusionBuffer.AllocateOffset(renderContext);\n\n let index = 0;\n for (const occluder of this.occluders)\n {\n occluder.RunQuery(renderContext, updateContext, this.transform, Tr2OcclusionBuffer.getOccluderOffset(this.occlusionOffset, index++), 1);\n }\n }\n\n /**\n * Carbon RunBackgroundOcclusionQueries (cpp:359-379): the background slot,\n * then the background occluders. Carbon calls it from the background pass,\n * only for scenes with planets (EveSpaceScene.cpp:2153-2170). Fog weight 0.\n *\n * @param {Tr2RenderContext} renderContext The frame's context.\n * @param {EveUpdateContext} updateContext The occluders' context.\n * @returns {void}\n */\n @carbon.method\n @impl.implemented\n RunBackgroundOcclusionQueries(renderContext, updateContext)\n {\n if (!this.display) return;\n\n if (this.backgroundOcclusionOffset === null)\n {\n this.backgroundOcclusionOffset = Tr2OcclusionBuffer.getInstance().AllocateOffset(renderContext);\n }\n\n let index = 0;\n for (const occluder of this.backgroundOccluders)\n {\n occluder.RunQuery(renderContext, updateContext, this.transform, Tr2OcclusionBuffer.getOccluderOffset(this.backgroundOcclusionOffset, index++), 0);\n }\n }\n\n /** Carbon method SetControllerVariable (MAP_METHOD_AND_WRAP). */\n @carbon.method\n @impl.implemented\n SetControllerVariable(name, value)\n {\n const key = String(name);\n const next = Number(value);\n this.#controllerVariables.set(key, next);\n for (const controller of this.controllers) controller?.SetVariable(key, next);\n }\n\n /**\n * Carbon EveLensflare::HandleControllerEvent (cpp:497-503).\n *\n * MISSING UNTIL 2026-09-05. Carbon declares it beside SetControllerVariable\n * and StartControllers, both of which were ported; this one was not, and the\n * hedge at every call site meant a lens flare silently ignored every\n * controller event rather than failing.\n */\n @carbon.method\n @impl.implemented\n HandleControllerEvent(name)\n {\n const key = String(name);\n for (const controller of this.controllers) controller?.HandleEvent(key);\n }\n\n /** Carbon method StartControllers (MAP_METHOD_AND_WRAP). */\n @carbon.method\n @impl.implemented\n StartControllers()\n {\n for (const controller of this.controllers) controller?.Start();\n }\n\n /**\n * Carbon PrepareRender (cpp:192-266): the per-frame placement that needs\n * this frame's frustum. The direction to the sun (from the camera when the\n * flare has no position), a transform that turns the flare geometry toward\n * it and parks it `cameraFactor` in front of the camera, the\n * LensflareFxDirectionScale global, and the sun's screen position driving\n * the edge, centre, angle and x/y curves before the bindings copy.\n *\n * Carbon's row-vector `Transform( v, M )` over a row-major matrix is\n * gl-matrix `transformMat4` over the same bytes.\n *\n * The render context is an ADDED argument: Carbon reads the view from\n * Tr2Renderer::GetViewTransform, a static this runtime keeps on the context.\n *\n * @param {TriFrustum} frustum This frame's frustum.\n * @param {Tr2RenderContext} renderContext The frame's context.\n * @returns {void}\n */\n @carbon.method\n @impl.adapted\n PrepareRender(frustum, renderContext)\n {\n if (!this.display) return;\n\n if (vec3.squaredLength(this.position) === 0) vec3.normalize(this.direction, vec3.negate(prepareScratch, frustum.viewPos));\n else vec3.normalize(this.direction, vec3.negate(prepareScratch, this.position));\n\n const cameraSpacePos = vec3.scaleAndAdd(vec3.create(), frustum.viewPos, frustum.viewDir, -this.cameraFactor);\n\n mat4.arcFromForward(this.transform, vec3.negate(prepareScratch, this.direction));\n this.transform[12] = cameraSpacePos[0];\n this.transform[13] = cameraSpacePos[1];\n this.transform[14] = cameraSpacePos[2];\n this.transform[15] = 1;\n\n this.#directionVar.SetValue([ this.direction[0], this.direction[1], this.direction[2], this.sunSize ]);\n\n const direction = vec4.fromValues(this.direction[0], this.direction[1], this.direction[2], 0);\n vec4.transformMat4(direction, direction, renderContext.GetViewTransform());\n vec4.transformMat4(direction, direction, frustum.projectionMatrix);\n direction[0] /= direction[3];\n direction[1] /= direction[3];\n\n const distanceToEdge = 1 - Math.min(1 - Math.abs(direction[0]), 1 - Math.abs(direction[1]));\n const distanceToCenter = Math.hypot(direction[0], direction[1]);\n const radialAngle = Math.atan2(direction[1], direction[0]) + Math.PI;\n\n for (const curve of this.distanceToEdgeCurves) curve.UpdateValue(distanceToEdge);\n for (const curve of this.distanceToCenterCurves) curve.UpdateValue(distanceToCenter);\n for (const curve of this.radialAngleCurves) curve.UpdateValue(radialAngle);\n for (const curve of this.xDistanceToCenter) curve.UpdateValue(direction[0] + 10);\n for (const curve of this.yDistanceToCenter) curve.UpdateValue(direction[1] + 10);\n for (const binding of this.bindings) binding.CopyValue();\n }\n\n /**\n * Carbon GetRenderables (cpp:278-296): nothing unless displayed and visible;\n * each flare child's renderables, then this lensflare itself for its mesh.\n *\n * @param {TriFrustum} _frustum This frame's frustum (unused, as in Carbon).\n * @param {Array} renderables Out: the renderables.\n * @returns {Array} `renderables`.\n */\n @carbon.method\n @impl.implemented\n GetRenderables(_frustum, renderables = [])\n {\n if (!this.display || !this.isVisible) return renderables;\n\n for (const flare of this.flares) flare.GetRenderables(renderables, null);\n if (this.mesh) renderables.push(this);\n return renderables;\n }\n\n /** Carbon EveLensflare::GetBatches delegates the selected mesh areas (cpp:381-387). */\n @carbon.method\n @impl.implemented\n GetBatches(batches, batchType, perObjectData, _reason)\n {\n if (this.mesh)\n {\n this.mesh.GetBatches?.(batches, this.mesh.GetAreas(batchType), perObjectData);\n }\n }\n\n /** Carbon EveLensflare::HasTransparentBatches is always false (cpp:389-392). */\n @carbon.method\n @impl.implemented\n HasTransparentBatches()\n {\n return false;\n }\n\n /** Carbon EveLensflare::GetSortValue is the constant one (cpp:394-397). */\n @carbon.method\n @impl.implemented\n GetSortValue()\n {\n return 1;\n }\n\n /** Carbon EveLensflare::GetPerObjectData (cpp:399-410): directionScale =\n * (direction, sunSize); indices[0]/[1] from the optional occlusion offsets\n * (null uploads 0). indices[2] and [3] are NEVER written in Carbon - the\n * per-element writes keep that arena-garbage parity. The struct registers\n * with stages [\"vs\", \"ps\"]: one payload, same bytes bound to both slots\n * (cpp:24-38). */\n @carbon.method\n @impl.implemented\n GetPerObjectData(accumulator)\n {\n const data = accumulator.Alloc(\"EveLensflarePerObjectData\");\n\n data.Set(\"directionScale\", [this.direction[0], this.direction[1], this.direction[2], this.sunSize]);\n data.SetIndex(\"indices\", 0, [this.occlusionOffset ?? 0]);\n data.SetIndex(\"indices\", 1, [this.backgroundOcclusionOffset ?? 0]);\n\n return data;\n }\n\n /**\n * Returns this lensflare's occlusion-buffer slots. Carbon holds them as\n * Tr2OcclusionBuffer::Offset shared_ptrs whose deleter frees the slot when\n * the lensflare is destroyed (EveOccluder.cpp:36, 70-74); JavaScript has no\n * destructor, so the owner removing a lensflare calls this.\n *\n * @returns {void}\n */\n Destroy()\n {\n const occlusionBuffer = Tr2OcclusionBuffer.getInstance();\n occlusionBuffer.DestroyOffset(this.occlusionOffset);\n occlusionBuffer.DestroyOffset(this.backgroundOcclusionOffset);\n this.occlusionOffset = null;\n this.backgroundOcclusionOffset = null;\n }\n\n\n}\n"],"names":["prepareScratch","vec3","create","bitsAsFloat","value","Float32Array","Uint32Array","buffer","_EveLensflare","EveLensflare","CjsModel","e","_init_translationCurve","_init_extra_translationCurve","_init_mesh","_init_extra_mesh","_init_name","_init_extra_name","_init_backgroundOccluders","_init_extra_backgroundOccluders","_init_occluders","_init_extra_occluders","_init_curveSets","_init_extra_curveSets","_init_distanceToEdgeCurves","_init_extra_distanceToEdgeCurves","_init_distanceToCenterCurves","_init_extra_distanceToCenterCurves","_init_radialAngleCurves","_init_extra_radialAngleCurves","_init_xDistanceToCenter","_init_extra_xDistanceToCenter","_init_yDistanceToCenter","_init_extra_yDistanceToCenter","_init_controllers","_init_extra_controllers","_init_bindings","_init_extra_bindings","_init_cameraFactor","_init_extra_cameraFactor","_init_position","_init_extra_position","_init_flares","_init_extra_flares","_init_update","_init_extra_update","_init_display","_init_extra_display","_initProto","c","_initClass","_applyDecs","type","define","className","family","carbon","inherit","ITr2Renderable","edit","readwrite","objectRef","persist","model","string","read","list","float32","boolean","method","impl","implemented","adapted","Map","translationCurve","mesh","name","backgroundOccluders","occluders","curveSets","distanceToEdgeCurves","distanceToCenterCurves","radialAngleCurves","xDistanceToCenter","yDistanceToCenter","controllers","bindings","cameraFactor","position","flares","update","display","isVisible","direction","sunSize","occlusionOffset","backgroundOcclusionOffset","Tr2VariableStore","GlobalStore","RegisterVariable","transform","mat4","Update","realTime","simTime","distanceToCenter","length","Math","log","SetValue","curveSet","controller","UpdateVisibility","updateContext","frustum","GetFrustum","viewDir","m_viewDir","viewDotDir","dot","flare","RunOcclusionQueries","renderContext","occlusionBuffer","Tr2OcclusionBuffer","getInstance","AllocateOffset","index","occluder","RunQuery","getOccluderOffset","RunBackgroundOcclusionQueries","SetControllerVariable","key","String","next","Number","set","SetVariable","HandleControllerEvent","HandleEvent","StartControllers","Start","PrepareRender","squaredLength","normalize","negate","viewPos","cameraSpacePos","scaleAndAdd","arcFromForward","vec4","fromValues","transformMat4","GetViewTransform","projectionMatrix","distanceToEdge","min","abs","hypot","radialAngle","atan2","PI","curve","UpdateValue","binding","CopyValue","GetRenderables","_frustum","renderables","push","GetBatches","batches","batchType","perObjectData","_reason","GetAreas","HasTransparentBatches","GetSortValue","GetPerObjectData","accumulator","data","Alloc","Set","SetIndex","Destroy","DestroyOffset"],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { identity as _identity, applyDecs2311 as _applyDecs2311 } from '../../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { edit, type, carbon, impl } from '#schema';
|
|
3
|
+
import { CjsModel } from '#model';
|
|
4
|
+
import { RenderingMode, TriBatchType } from '#consts/graphics';
|
|
5
|
+
import '#consts/render-context';
|
|
6
|
+
import '#resource/geometry';
|
|
7
|
+
import '../../../core/batch/TriRenderBatch/DefaultKeyGenerator.js';
|
|
8
|
+
import { EffectKeyGenerator } from '../../../core/batch/TriRenderBatch/EffectKeyGenerator.js';
|
|
9
|
+
import '../../../core/batch/TriRenderBatch/ITriRenderBatchAccumulator.js';
|
|
10
|
+
import { TriRenderBatchAccumulator } from '../../../core/batch/TriRenderBatch/TriRenderBatchAccumulator.js';
|
|
11
|
+
import { Tr2VariableStore as _Tr2VariableStore } from '../../../core/variable/Tr2VariableStore.js';
|
|
12
|
+
import { EveUpdateContext as _EveUpdateContext } from '../../EveUpdateContext.js';
|
|
13
|
+
|
|
14
|
+
let _initProto, _initClass, _init_sprites, _init_extra_sprites, _init_name, _init_extra_name, _init_display, _init_extra_display;
|
|
15
|
+
|
|
16
|
+
/** The bits of a uint32 read as a float32: Carbon's `*reinterpret_cast<float*>( &bufferOffset )`. */
|
|
17
|
+
const bitsAsFloat = value => new Float32Array(new Uint32Array([value >>> 0]).buffer)[0];
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A lens flare's occlusion test: sprites drawn against the scene depth whose
|
|
21
|
+
* shader counts, into the flare's FlareOcclusionBuffer slot, how many of
|
|
22
|
+
* their pixels pass. Tr2OcclusionBuffer's CopyCounters turns the counts into
|
|
23
|
+
* the visibility the flare and the god rays read.
|
|
24
|
+
*/
|
|
25
|
+
let _EveOccluder;
|
|
26
|
+
new class extends _identity {
|
|
27
|
+
static [class EveOccluder extends CjsModel {
|
|
28
|
+
static {
|
|
29
|
+
({
|
|
30
|
+
e: [_init_sprites, _init_extra_sprites, _init_name, _init_extra_name, _init_display, _init_extra_display, _initProto],
|
|
31
|
+
c: [_EveOccluder, _initClass]
|
|
32
|
+
} = _applyDecs2311(this, [type.define({
|
|
33
|
+
className: "EveOccluder",
|
|
34
|
+
family: "eve/effect",
|
|
35
|
+
purpose: "Groups sprite occlusion elements that can be displayed as one named EVE scene effect."
|
|
36
|
+
})], [[[edit, edit.read, edit, edit.persist, void 0, type.list("EveTransform")], 16, "sprites"], [[edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "name"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "display"], [[carbon, carbon.method, impl, impl.adapted], 18, "RunQuery"]], 0, void 0, CjsModel));
|
|
37
|
+
}
|
|
38
|
+
/** m_sprites (PEveTransformVector) [READ, PERSIST] */
|
|
39
|
+
sprites = (_initProto(this), _init_sprites(this, []));
|
|
40
|
+
|
|
41
|
+
/** m_name (std::string) [READWRITE, PERSIST] */
|
|
42
|
+
name = (_init_extra_sprites(this), _init_name(this, ""));
|
|
43
|
+
|
|
44
|
+
/** m_display (bool) [READWRITE, PERSIST] */
|
|
45
|
+
display = (_init_extra_name(this), _init_display(this, true));
|
|
46
|
+
|
|
47
|
+
/** m_batches (h:82): the accumulator the sprites' batches are drawn from (cpp:115-119). */
|
|
48
|
+
_batches = (_init_extra_display(this), new TriRenderBatchAccumulator(EffectKeyGenerator));
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Carbon EveOccluder::RunQuery (cpp:150-185): publishes the counter slot and
|
|
52
|
+
* the fog weight, then draws each sprite opaque against the bound depth.
|
|
53
|
+
* The sprites' shader (lensflareoccluder) adds each covered pixel, and each
|
|
54
|
+
* pixel with nothing in front, into the two counters at the slot.
|
|
55
|
+
*
|
|
56
|
+
* Adapted in two places: the accumulator's pool allocator is bound per
|
|
57
|
+
* call from the render context (Carbon's constructor takes Tr2Renderer's,
|
|
58
|
+
* cpp:136-137), and the float globals are set through _RegisterFloat,
|
|
59
|
+
* because our store refuses to re-register a whole float.
|
|
60
|
+
*
|
|
61
|
+
* @param {Tr2RenderContext} renderContext The frame's context.
|
|
62
|
+
* @param {EveUpdateContext} updateContext The scene's update context.
|
|
63
|
+
* @param {Float32Array} transform The lensflare's transform.
|
|
64
|
+
* @param {number} bufferOffset The counter slot (Tr2OcclusionBuffer.getOccluderOffset).
|
|
65
|
+
* @param {number} fogWeight 1 for foreground occluders, 0 for background.
|
|
66
|
+
* @returns {void}
|
|
67
|
+
*/
|
|
68
|
+
RunQuery(renderContext, updateContext, transform, bufferOffset, fogWeight) {
|
|
69
|
+
if (!this.display) return;
|
|
70
|
+
const store = _Tr2VariableStore.GlobalStore();
|
|
71
|
+
_EveOccluder._RegisterFloat(store, "OcclusionBufferOffset", bitsAsFloat(bufferOffset));
|
|
72
|
+
_EveOccluder._RegisterFloat(store, "OcclusionFogWeight", fogWeight);
|
|
73
|
+
renderContext.GetEffectStateManager().ApplyStandardStates(RenderingMode.RM_OPAQUE);
|
|
74
|
+
|
|
75
|
+
// The sprites' own view update goes through the parent transform; the
|
|
76
|
+
// synchronous pass gets an empty context, as Carbon's dummyContext.
|
|
77
|
+
const renderables = [];
|
|
78
|
+
const dummyContext = _EveOccluder._dummyContext;
|
|
79
|
+
for (const sprite of this.sprites) {
|
|
80
|
+
sprite.UpdateSyncronous(dummyContext);
|
|
81
|
+
sprite.UpdateVisibility(updateContext, transform);
|
|
82
|
+
sprite.GetRenderables(renderables);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Only the opaque areas matter for an occlusion query (cpp:173-179).
|
|
86
|
+
// Carbon's accumulator takes Tr2Renderer's pool allocator at construction
|
|
87
|
+
// (cpp:117-118); ours lives on the render context, so it is bound here.
|
|
88
|
+
const batches = this._batches;
|
|
89
|
+
batches.SetTriPoolAllocator(renderContext.GetTriPoolAllocator());
|
|
90
|
+
for (const renderable of renderables) {
|
|
91
|
+
const objectData = renderable.GetPerObjectData(batches);
|
|
92
|
+
renderable.GetBatches(batches, TriBatchType.TRIBATCHTYPE_OPAQUE, objectData);
|
|
93
|
+
}
|
|
94
|
+
batches.Finalize();
|
|
95
|
+
renderContext.RenderBatches(batches);
|
|
96
|
+
batches.Clear();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* GlobalStore().RegisterVariable( name, float ). A float that happens to be
|
|
101
|
+
* whole (0, 1) reads as an int to TriVariable.getVariableType and the
|
|
102
|
+
* re-registration is refused, so the existing variable takes the value.
|
|
103
|
+
*/
|
|
104
|
+
static _RegisterFloat(store, name, value) {
|
|
105
|
+
if (!store.RegisterVariable(name, value)) store.FindVariable(name).SetValue(value);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Carbon's stack-local `EveUpdateContext dummyContext` (cpp:166). */
|
|
109
|
+
}];
|
|
110
|
+
_dummyContext = new _EveUpdateContext();
|
|
111
|
+
constructor() {
|
|
112
|
+
super(_EveOccluder), _initClass();
|
|
113
|
+
}
|
|
114
|
+
}();
|
|
115
|
+
|
|
116
|
+
export { _EveOccluder as EveOccluder };
|
|
117
|
+
//# sourceMappingURL=EveOccluder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EveOccluder.js","sources":["../../../../../../src/trinity/eve/effect/lensflare/EveOccluder.js"],"sourcesContent":["// Source: trinity/trinity/Eve/EveOccluder.h\n// Source: trinity/trinity/Eve/EveOccluder.cpp\nimport { carbon, edit, impl, type } from \"#schema\";\nimport { CjsModel } from \"#model\";\nimport { RenderingMode, TriBatchType } from \"#consts/graphics\";\nimport { EffectKeyGenerator, TriRenderBatchAccumulator } from \"../../../core/batch/TriRenderBatch/index.js\";\nimport { Tr2VariableStore } from \"../../../core/variable/Tr2VariableStore.js\";\nimport { EveUpdateContext } from \"../../EveUpdateContext.js\";\n\n/** The bits of a uint32 read as a float32: Carbon's `*reinterpret_cast<float*>( &bufferOffset )`. */\nconst bitsAsFloat = value => new Float32Array(new Uint32Array([ value >>> 0 ]).buffer)[0];\n\n/**\n * A lens flare's occlusion test: sprites drawn against the scene depth whose\n * shader counts, into the flare's FlareOcclusionBuffer slot, how many of\n * their pixels pass. Tr2OcclusionBuffer's CopyCounters turns the counts into\n * the visibility the flare and the god rays read.\n */\n@type.define({ className: \"EveOccluder\", family: \"eve/effect\", purpose: \"Groups sprite occlusion elements that can be displayed as one named EVE scene effect.\" })\nexport class EveOccluder extends CjsModel\n{\n\n /** m_sprites (PEveTransformVector) [READ, PERSIST] */\n @edit.read\n @edit.persist\n @type.list(\"EveTransform\")\n sprites = [];\n\n /** m_name (std::string) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.string\n name = \"\";\n\n /** m_display (bool) [READWRITE, PERSIST] */\n @edit.readwrite\n @edit.persist\n @type.boolean\n display = true;\n\n /** m_batches (h:82): the accumulator the sprites' batches are drawn from (cpp:115-119). */\n _batches = new TriRenderBatchAccumulator(EffectKeyGenerator);\n\n /**\n * Carbon EveOccluder::RunQuery (cpp:150-185): publishes the counter slot and\n * the fog weight, then draws each sprite opaque against the bound depth.\n * The sprites' shader (lensflareoccluder) adds each covered pixel, and each\n * pixel with nothing in front, into the two counters at the slot.\n *\n * Adapted in two places: the accumulator's pool allocator is bound per\n * call from the render context (Carbon's constructor takes Tr2Renderer's,\n * cpp:136-137), and the float globals are set through _RegisterFloat,\n * because our store refuses to re-register a whole float.\n *\n * @param {Tr2RenderContext} renderContext The frame's context.\n * @param {EveUpdateContext} updateContext The scene's update context.\n * @param {Float32Array} transform The lensflare's transform.\n * @param {number} bufferOffset The counter slot (Tr2OcclusionBuffer.getOccluderOffset).\n * @param {number} fogWeight 1 for foreground occluders, 0 for background.\n * @returns {void}\n */\n @carbon.method\n @impl.adapted\n RunQuery(renderContext, updateContext, transform, bufferOffset, fogWeight)\n {\n if (!this.display) return;\n\n const store = Tr2VariableStore.GlobalStore();\n EveOccluder._RegisterFloat(store, \"OcclusionBufferOffset\", bitsAsFloat(bufferOffset));\n EveOccluder._RegisterFloat(store, \"OcclusionFogWeight\", fogWeight);\n\n renderContext.GetEffectStateManager().ApplyStandardStates(RenderingMode.RM_OPAQUE);\n\n // The sprites' own view update goes through the parent transform; the\n // synchronous pass gets an empty context, as Carbon's dummyContext.\n const renderables = [];\n const dummyContext = EveOccluder._dummyContext;\n for (const sprite of this.sprites)\n {\n sprite.UpdateSyncronous(dummyContext);\n sprite.UpdateVisibility(updateContext, transform);\n sprite.GetRenderables(renderables);\n }\n\n // Only the opaque areas matter for an occlusion query (cpp:173-179).\n // Carbon's accumulator takes Tr2Renderer's pool allocator at construction\n // (cpp:117-118); ours lives on the render context, so it is bound here.\n const batches = this._batches;\n batches.SetTriPoolAllocator(renderContext.GetTriPoolAllocator());\n for (const renderable of renderables)\n {\n const objectData = renderable.GetPerObjectData(batches);\n renderable.GetBatches(batches, TriBatchType.TRIBATCHTYPE_OPAQUE, objectData);\n }\n batches.Finalize();\n\n renderContext.RenderBatches(batches);\n batches.Clear();\n }\n\n /**\n * GlobalStore().RegisterVariable( name, float ). A float that happens to be\n * whole (0, 1) reads as an int to TriVariable.getVariableType and the\n * re-registration is refused, so the existing variable takes the value.\n */\n static _RegisterFloat(store, name, value)\n {\n if (!store.RegisterVariable(name, value)) store.FindVariable(name).SetValue(value);\n }\n\n /** Carbon's stack-local `EveUpdateContext dummyContext` (cpp:166). */\n static _dummyContext = new EveUpdateContext();\n\n}\n"],"names":["bitsAsFloat","value","Float32Array","Uint32Array","buffer","_EveOccluder","_identity","EveOccluder","CjsModel","e","_init_sprites","_init_extra_sprites","_init_name","_init_extra_name","_init_display","_init_extra_display","_initProto","c","_initClass","_applyDecs","type","define","className","family","purpose","edit","read","persist","list","readwrite","string","boolean","carbon","method","impl","adapted","sprites","name","display","_batches","TriRenderBatchAccumulator","EffectKeyGenerator","RunQuery","renderContext","updateContext","transform","bufferOffset","fogWeight","store","Tr2VariableStore","GlobalStore","_RegisterFloat","GetEffectStateManager","ApplyStandardStates","RenderingMode","RM_OPAQUE","renderables","dummyContext","_dummyContext","sprite","UpdateSyncronous","UpdateVisibility","GetRenderables","batches","SetTriPoolAllocator","GetTriPoolAllocator","renderable","objectData","GetPerObjectData","GetBatches","TriBatchType","TRIBATCHTYPE_OPAQUE","Finalize","RenderBatches","Clear","RegisterVariable","FindVariable","SetValue","EveUpdateContext","constructor"],"mappings":"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"}
|
|
@@ -204,6 +204,7 @@ export { IEveDistributionSpawner } from './distribution/spawners/IEveDistributio
|
|
|
204
204
|
export { EveMultiEffect } from './effect/multiEffect/EveMultiEffect.js';
|
|
205
205
|
export { EveMultiEffectParameter } from './effect/multiEffect/EveMultiEffectParameter.js';
|
|
206
206
|
export { EveLensflare } from './effect/lensflare/EveLensflare.js';
|
|
207
|
+
export { EveOccluder } from './effect/lensflare/EveOccluder.js';
|
|
207
208
|
export { Tr2OcclusionBuffer } from './effect/lensflare/Tr2OcclusionBuffer.js';
|
|
208
209
|
export { EveBoxVolume } from './volume/EveBoxVolume.js';
|
|
209
210
|
export { EveEllipsoidVolume } from './volume/EveEllipsoidVolume.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|