@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.

Files changed (92) hide show
  1. package/dist/global/consts/effectPaths.js +4 -1
  2. package/dist/global/consts/effectPaths.js.map +1 -1
  3. package/dist/global/consts/index.js +1 -1
  4. package/dist/global/index.js +1 -1
  5. package/dist/index.js +3 -3
  6. package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +19 -2
  7. package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  8. package/dist/resource/format/index.js +1 -1
  9. package/dist/resource/formats/hlsl/core/carbonTypedViews.js +121 -65
  10. package/dist/resource/formats/hlsl/core/carbonTypedViews.js.map +1 -1
  11. package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +10 -7
  12. package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  13. package/dist/resource/formats/webgpu/core/effectBackendBodySet.js +3 -1
  14. package/dist/resource/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  15. package/dist/resource/formats/webgpu/core/packageEffect.js +5 -0
  16. package/dist/resource/formats/webgpu/core/packageEffect.js.map +1 -1
  17. package/dist/resource/formats/webgpu/core/wgsl/emitWgsl.js +20 -0
  18. package/dist/resource/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -1
  19. package/dist/resource/formats/webgpu/core/wgsl/emulatedAddressing.js +93 -4
  20. package/dist/resource/formats/webgpu/core/wgsl/emulatedAddressing.js.map +1 -1
  21. package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +74 -64
  22. package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
  23. package/dist/resource/formats/webgpu/core/wgsl/lowerFragmentProgram.js +16 -7
  24. package/dist/resource/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -1
  25. package/dist/resource/formats/webgpu/core/wgsl/wgslTypedViews.js +69 -27
  26. package/dist/resource/formats/webgpu/core/wgsl/wgslTypedViews.js.map +1 -1
  27. package/dist/resource/geometry/registerGeometryResources.js +10 -1
  28. package/dist/resource/geometry/registerGeometryResources.js.map +1 -1
  29. package/dist/sof/EveSOFDNA.js +4 -2
  30. package/dist/sof/EveSOFDNA.js.map +1 -1
  31. package/dist/sof/EveSOFDataMgr.js +83 -69
  32. package/dist/sof/EveSOFDataMgr.js.map +1 -1
  33. package/dist/trinity/core/Tr2Denoiser.js +6 -1
  34. package/dist/trinity/core/Tr2Denoiser.js.map +1 -1
  35. package/dist/trinity/core/Tr2ShadowMap.js +7 -2
  36. package/dist/trinity/core/Tr2ShadowMap.js.map +1 -1
  37. package/dist/trinity/core/context/Tr2RenderContext.js +43 -0
  38. package/dist/trinity/core/context/Tr2RenderContext.js.map +1 -1
  39. package/dist/trinity/core/device/Tr2GpuStructuredBuffer.js +134 -0
  40. package/dist/trinity/core/device/Tr2GpuStructuredBuffer.js.map +1 -0
  41. package/dist/trinity/core/index.js +1 -0
  42. package/dist/trinity/core/index.js.map +1 -1
  43. package/dist/trinity/core/lighting/Tr2LightManager.js +410 -124
  44. package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
  45. package/dist/trinity/eve/effect/lensflare/EveLensflare.js +303 -312
  46. package/dist/trinity/eve/effect/lensflare/EveLensflare.js.map +1 -1
  47. package/dist/trinity/eve/effect/lensflare/EveOccluder.js +117 -0
  48. package/dist/trinity/eve/effect/lensflare/EveOccluder.js.map +1 -0
  49. package/dist/trinity/eve/index.js +1 -0
  50. package/dist/trinity/eve/index.js.map +1 -1
  51. package/dist/trinity/eve/scene/EveSpaceScene.js +286 -6
  52. package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
  53. package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +212 -32
  54. package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
  55. package/dist/trinity/generated/eve/effect/index.js +0 -1
  56. package/dist/trinity/generated/eve/effect/index.js.map +1 -1
  57. package/dist/trinity/generated/eve/index.js +0 -1
  58. package/dist/trinity/generated/eve/index.js.map +1 -1
  59. package/dist/trinity/generated/index.js +0 -2
  60. package/dist/trinity/generated/index.js.map +1 -1
  61. package/dist/trinity/generated/trinityCore/index.js +0 -1
  62. package/dist/trinity/generated/trinityCore/index.js.map +1 -1
  63. package/dist/trinity/index.js +2 -2
  64. package/dist/trinity/postProcess/Tr2PostProcessRenderer.js +4 -1
  65. package/dist/trinity/postProcess/Tr2PostProcessRenderer.js.map +1 -1
  66. package/dist/trinity/postProcess/Tr2SSAO.js +282 -21
  67. package/dist/trinity/postProcess/Tr2SSAO.js.map +1 -1
  68. package/dist/trinity/shader/parameter/Tr2RuntimeTextureParameter.js +71 -53
  69. package/dist/trinity/shader/parameter/Tr2RuntimeTextureParameter.js.map +1 -1
  70. package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +81 -18
  71. package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
  72. package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js +46 -4
  73. package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js.map +1 -1
  74. package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js +32 -1
  75. package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js.map +1 -1
  76. package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js +27 -0
  77. package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js.map +1 -1
  78. package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +29 -4
  79. package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
  80. package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js +32 -2
  81. package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js.map +1 -1
  82. package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +57 -5
  83. package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -1
  84. package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js +111 -5
  85. package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js.map +1 -1
  86. package/docs/trinity/reference/classes/generated.md +20 -20
  87. package/docs/trinity/reference/classes/post-process.md +1 -1
  88. package/package.json +1 -1
  89. package/dist/trinity/generated/eve/effect/EveOccluder.js +0 -38
  90. package/dist/trinity/generated/eve/effect/EveOccluder.js.map +0 -1
  91. package/dist/trinity/generated/trinityCore/Tr2GpuStructuredBuffer.js +0 -48
  92. package/dist/trinity/generated/trinityCore/Tr2GpuStructuredBuffer.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { identity as _identity, applyDecs2311 as _applyDecs2311 } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
- import { edit, type, carbon, impl } from '#schema';
2
+ import { edit, type, carbon, impl, CjsSchema } from '#schema';
3
3
  import { CjsModel } from '#model';
4
4
  import { mat4 } from '#math/mat4';
5
5
  import { quat } from '#math/quat';
@@ -15,8 +15,8 @@ import { EveUpdateContext as _EveUpdateContext } from '../EveUpdateContext.js';
15
15
  import { EveEffectRoot2 as _EveEffectRoot } from '../spaceObject/EveEffectRoot2.js';
16
16
  import { EveCamera as _EveCamera } from '../camera/EveCamera.js';
17
17
  import { CjsPerFrameLayouts } from '../../core/rawData/CjsPerFrameLayouts.js';
18
- import { PixelFormat, ShaderType, Tr2GpuUsage, TextureType } from '#consts/render-context';
19
- import { Tr2SubresourceData } from '#trinityal';
18
+ import { PixelFormat, Tr2LoadAction, Tr2StoreAction, ShaderType, RenderState, Tr2GpuUsage, TextureType } from '#consts/render-context';
19
+ import { Tr2DepthAttachment, Tr2ColorAttachment, Tr2SubresourceData } from '#trinityal';
20
20
  import { TriBatchType, RenderingMode } from '#consts/graphics';
21
21
  import '#resource/geometry';
22
22
  import '../../core/batch/TriRenderBatch/DefaultKeyGenerator.js';
@@ -35,7 +35,10 @@ import { Tr2ShadowMap as _Tr2ShadowMap } from '../../core/Tr2ShadowMap.js';
35
35
  import { Tr2VolumetricsRenderer as _Tr2VolumetricsRender } from '../../core/volumetrics/Tr2VolumetricsRenderer.js';
36
36
  import { screenToProjection, convertProjectionCoordToWorldPickRay } from '../../core/view/pickRay.js';
37
37
  import { EveVisualizeMethod } from '../../generated/eve/enums.js';
38
- import { ShadowQuality } from '../../generated/trinityCore/enums.js';
38
+ import { ShadowQuality, Tr2RenderReason } from '../../generated/trinityCore/enums.js';
39
+ import { TriFrustum } from '../../core/view/TriFrustum.js';
40
+ import { TriShadowOrthoFrustum } from './shadows/TriShadowOrthoFrustum.js';
41
+ import { GpuResourceHandle } from '../../core/Tr2GpuResourcePool/GpuResourceHandle.js';
39
42
  import { blue, EnumRegistrationType } from '#blue';
40
43
  import './EveSpaceSceneRenderDriver.js';
41
44
 
@@ -68,6 +71,16 @@ const SHADOW_CLIP_TO_UV = mat4.fromValues(0.5, 0, 0, 0, 0, -0.5, 0, 0, 0, 0, 1,
68
71
  // const, NEVER mutated - objects in m_objects are scene roots.
69
72
  const IDENTITY = mat4.create();
70
73
 
74
+ /** Carbon's default-constructed EveSpaceScene::ShadowResources: every texture empty. */
75
+ function EmptyShadowResources() {
76
+ return {
77
+ shadowMap: new GpuResourceHandle(),
78
+ cascadedShadowDepth: new GpuResourceHandle(),
79
+ pointLightShadowMap: new GpuResourceHandle(),
80
+ pointLightShadowDepth: new GpuResourceHandle()
81
+ };
82
+ }
83
+
71
84
  // ---------------------------------------------------------------------------
72
85
  // DRIVER-ORDER CONTRACT (per frame) - the CPU visibility/gather drive.
73
86
  // Carbon runs steps 5-12 inside EveSpaceScene::BeginRender/GatherBatches
@@ -140,7 +153,7 @@ new class extends _identity {
140
153
  } = _applyDecs2311(this, [type.define({
141
154
  className: "EveSpaceScene",
142
155
  family: "eve/scene"
143
- })], [[[edit, edit.readwrite, type, type.int32, void 0, type.enum("trinity.EveSpaceScene.EveVisualizeMethod")], 16, "visualizeMethod"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "envMap1ResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "envMap2ResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "envMap3ResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "lowQualityNebulaResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "lowQualityNebulaMixResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "envMapResPath"], [[edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "fogColor"], [[edit, edit.readwrite, edit, edit.persist, type, type.vec3], 16, "sunDirection"], [[edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "ambientColor"], [[edit, edit.readwrite, edit, edit.persistOnly, void 0, type.model("Tr2ShLightingManager")], 16, "shLightingManager"], [[edit, edit.read, void 0, type.objectRef("Tr2PostProcessAttributes")], 16, "combinedPostProcessAttributes"], [[edit, edit.read, void 0, type.objectRef("Tr2DataTextureManager")], 16, "dataTextureMgr"], [[edit, edit.readwrite, type, type.boolean], 16, "dynamicObjectReflectionEnabled"], [[edit, edit.read, void 0, type.objectRef("EveComponentRegistry")], 16, "componentRegistry"], [type.model("EveEffectRoot2"), 0, "cameraAttachmentParent"], [type.rawStruct("BluePy"), 0, "postProcessDebug"], [[edit, edit.read, edit, edit.persist, void 0, type.list("TriCurveSet")], 16, "curveSets"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "defaultDiffuseRoughness"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "fogStart"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "fogEnd"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "reflectionIntensity"], [[edit, edit.read, void 0, type.list("EveDistanceField")], 16, "distanceFields"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("Tr2Effect")], 16, "backgroundEffect"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "backgroundReflectionIntensity"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "nebulaIntensity"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "display"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "backgroundRenderingEnabled"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "update"], [[edit, edit.readwrite, void 0, type.objectRef("Tr2ImpostorManager")], 16, "impostorManager"], [[edit, edit.read, edit, edit.persist, void 0, type.list("EveLensflare")], 16, "lensflares"], [[edit, edit.read, edit, edit.persist, void 0, type.list("Tr2ExternalParameter")], 16, "externalParameters"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "fogMax"], [[edit, edit.read, void 0, type.list("EveSceneStaticParticles")], 16, "staticParticles"], [[edit, edit.readwrite, void 0, type.objectRef("Tr2DebugRenderer")], 16, "debugRenderer"], [[edit, edit.read, edit, edit.persist, void 0, type.list("IEveSpaceObject2")], 16, "objects"], [[edit, edit.read, edit, edit.persist, void 0, type.list("IEveSpaceObject2")], 16, "uiObjects"], [[edit, edit.read, edit, edit.persist, void 0, type.list("IEveSpaceObject2")], 16, "backgroundObjects"], [[edit, edit.read, edit, edit.persist, void 0, type.list("EvePlanet")], 16, "planets"], [[edit, edit.readwrite, void 0, type.objectRef("Tr2RaytracingManager")], 16, "raytracingManager"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "reflectionBackLightingColor"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "reflectionBackLightingContrast"], [[edit, edit.notify, edit, edit.readwrite, void 0, type.objectRef("Tr2ReflectionProbe")], 16, "reflectionProbe"], [[edit, edit.read, void 0, type.objectRef("Tr2VolumetricsRenderer")], 16, "volumetricsRenderer"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("EveStarfield")], 16, "starfield"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "planetScale"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "planetCameraScale"], [[edit, edit.read, void 0, type.objectRef("Tr2SSSSS")], 16, "subSurfaceScattering"], [[edit, edit.notify, edit, edit.readwrite, type, type.int32, void 0, type.enum("trinity.ShadowQuality")], 16, "shadowQualitySetting"], [[edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "sunDiffuseColor"], [[edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "sunDiffuseColorWithDynamicLights"], [[edit, edit.readwrite, edit, edit.persist, type, type.quat], 16, "envMapRotation"], [[edit, edit.readwrite, void 0, type.objectRef("IEveBallpark")], 16, "ballpark"], [[edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "name"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("ITriVectorFunction")], 16, "sunBall"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("Tr2PostProcess2")], 16, "postprocess"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("EveVirtualCameraSystem")], 16, "virtualCameraSystem"], [[edit, edit.readwrite, void 0, type.objectRef("IEveSpaceObject2")], 16, "warpTunnel"], [[edit, edit.readwrite, type, type.float32], 16, "perFrameDebug"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("Tr2ShadowMap")], 16, "cascadedShadowMap"], [[edit, edit.read, type, type.float64], 16, "updateTime"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "useSunDiffuseColorWithDynamicLights"], [[edit, edit.read, void 0, type.objectRef("ITr2TextureProvider")], 16, "envMap1"], [[edit, edit.read, void 0, type.objectRef("ITr2TextureProvider")], 16, "envMap2"], [[edit, edit.read, void 0, type.objectRef("ITr2TextureProvider")], 16, "envMap3"], [[carbon, carbon.method, impl, impl.adapted], 18, "Update"], [[carbon, carbon.method, impl, impl.notImplemented], 18, "PickObject"], [[carbon, carbon.method, impl, impl.notImplemented], 18, "PickAsyncObject"], [[carbon, carbon.method, impl, impl.notImplemented], 18, "PickObjectAndAreaID"], [[carbon, carbon.method, impl, impl.implemented], 18, "PickInfinity"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Carbon's g_enablePostProcessDebugging global becomes the scene-scoped enablePostProcessDebugging field; the debug payload is a plain object, null when off.")], 18, "UpdatePostProcessAttributes"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetPostProcess"], [[impl, impl.custom, void 0, impl.reason("Carbon performs this inside BeginRender; CarbonEngineJS exposes the scene-owned CPU phase because the engine driver owns the surrounding frame order.")], 18, "UpdateFogSettings"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Carbon's Tr2ParallelFor becomes a sequential pass; the receivers touch only their own per-object records.")], 18, "UpdateShLighting"], [[carbon, carbon.method, impl, impl.implemented], 18, "RunLensflareOcclusionQueries"], [[carbon, carbon.method, impl, impl.adapted], 26, "registerWithVariableStore"], [[carbon, carbon.method, impl, impl.adapted], 18, "Initialize"], [[carbon, carbon.method, impl, impl.adapted], 18, "UpdateVariableStore"], [[carbon, carbon.method, impl, impl.adapted], 18, "Jitter"], [[carbon, carbon.method, impl, impl.adapted], 18, "EndRender"], [[carbon, carbon.method, impl, impl.implemented], 18, "RenderRenderables"], [[carbon, carbon.method, impl, impl.adapted], 18, "RenderBatch"], [[carbon, carbon.method, impl, impl.implemented], 18, "ApplyPerFrameData"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Tr2Renderer view statics and the ESM's render-target/viewport sizes are engine state; the driver supplies them in `frame`.")], 18, "PopulatePerFrameVSData"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Tr2Renderer statics, the ESM viewport, Tr2LightManager's atlas settings and the upscaler's mip bias are engine state; the driver supplies them in `frame`.")], 18, "PopulatePerFramePSData"], [[carbon, carbon.method, impl, impl.implemented], 18, "ReregisterEntities"], [[carbon, carbon.method, impl, impl.implemented], 18, "ClearComponentRegistry"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetPostProcessDebug"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateScene"]], 0, void 0, CjsModel));
156
+ })], [[[edit, edit.readwrite, type, type.int32, void 0, type.enum("trinity.EveSpaceScene.EveVisualizeMethod")], 16, "visualizeMethod"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "envMap1ResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "envMap2ResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "envMap3ResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "lowQualityNebulaResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "lowQualityNebulaMixResPath"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "envMapResPath"], [[edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "fogColor"], [[edit, edit.readwrite, edit, edit.persist, type, type.vec3], 16, "sunDirection"], [[edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "ambientColor"], [[edit, edit.readwrite, edit, edit.persistOnly, void 0, type.model("Tr2ShLightingManager")], 16, "shLightingManager"], [[edit, edit.read, void 0, type.objectRef("Tr2PostProcessAttributes")], 16, "combinedPostProcessAttributes"], [[edit, edit.read, void 0, type.objectRef("Tr2DataTextureManager")], 16, "dataTextureMgr"], [[edit, edit.readwrite, type, type.boolean], 16, "dynamicObjectReflectionEnabled"], [[edit, edit.read, void 0, type.objectRef("EveComponentRegistry")], 16, "componentRegistry"], [type.model("EveEffectRoot2"), 0, "cameraAttachmentParent"], [type.rawStruct("BluePy"), 0, "postProcessDebug"], [[edit, edit.read, edit, edit.persist, void 0, type.list("TriCurveSet")], 16, "curveSets"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "defaultDiffuseRoughness"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "fogStart"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "fogEnd"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "reflectionIntensity"], [[edit, edit.read, void 0, type.list("EveDistanceField")], 16, "distanceFields"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("Tr2Effect")], 16, "backgroundEffect"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "backgroundReflectionIntensity"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "nebulaIntensity"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "display"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "backgroundRenderingEnabled"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "update"], [[edit, edit.readwrite, void 0, type.objectRef("Tr2ImpostorManager")], 16, "impostorManager"], [[edit, edit.read, edit, edit.persist, void 0, type.list("EveLensflare")], 16, "lensflares"], [[edit, edit.read, edit, edit.persist, void 0, type.list("Tr2ExternalParameter")], 16, "externalParameters"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "fogMax"], [[edit, edit.read, void 0, type.list("EveSceneStaticParticles")], 16, "staticParticles"], [[edit, edit.readwrite, void 0, type.objectRef("Tr2DebugRenderer")], 16, "debugRenderer"], [[edit, edit.read, edit, edit.persist, void 0, type.list("IEveSpaceObject2")], 16, "objects"], [[edit, edit.read, edit, edit.persist, void 0, type.list("IEveSpaceObject2")], 16, "uiObjects"], [[edit, edit.read, edit, edit.persist, void 0, type.list("IEveSpaceObject2")], 16, "backgroundObjects"], [[edit, edit.read, edit, edit.persist, void 0, type.list("EvePlanet")], 16, "planets"], [[edit, edit.readwrite, void 0, type.objectRef("Tr2RaytracingManager")], 16, "raytracingManager"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "reflectionBackLightingColor"], [[edit, edit.notify, edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "reflectionBackLightingContrast"], [[edit, edit.notify, edit, edit.readwrite, void 0, type.objectRef("Tr2ReflectionProbe")], 16, "reflectionProbe"], [[edit, edit.read, void 0, type.objectRef("Tr2VolumetricsRenderer")], 16, "volumetricsRenderer"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("EveStarfield")], 16, "starfield"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "planetScale"], [[edit, edit.readwrite, edit, edit.persist, type, type.float32], 16, "planetCameraScale"], [[edit, edit.read, void 0, type.objectRef("Tr2SSSSS")], 16, "subSurfaceScattering"], [[edit, edit.notify, edit, edit.readwrite, type, type.int32, void 0, type.enum("trinity.ShadowQuality")], 16, "shadowQualitySetting"], [[edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "sunDiffuseColor"], [[edit, edit.readwrite, edit, edit.persist, type, type.color], 16, "sunDiffuseColorWithDynamicLights"], [[edit, edit.readwrite, edit, edit.persist, type, type.quat], 16, "envMapRotation"], [[edit, edit.readwrite, void 0, type.objectRef("IEveBallpark")], 16, "ballpark"], [[edit, edit.readwrite, edit, edit.persist, type, type.string], 16, "name"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("ITriVectorFunction")], 16, "sunBall"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("Tr2PostProcess2")], 16, "postprocess"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("EveVirtualCameraSystem")], 16, "virtualCameraSystem"], [[edit, edit.readwrite, void 0, type.objectRef("IEveSpaceObject2")], 16, "warpTunnel"], [[edit, edit.readwrite, type, type.float32], 16, "perFrameDebug"], [[edit, edit.readwrite, edit, edit.persist, void 0, type.model("Tr2ShadowMap")], 16, "cascadedShadowMap"], [[edit, edit.read, type, type.float64], 16, "updateTime"], [[edit, edit.readwrite, edit, edit.persist, type, type.boolean], 16, "useSunDiffuseColorWithDynamicLights"], [[edit, edit.read, void 0, type.objectRef("ITr2TextureProvider")], 16, "envMap1"], [[edit, edit.read, void 0, type.objectRef("ITr2TextureProvider")], 16, "envMap2"], [[edit, edit.read, void 0, type.objectRef("ITr2TextureProvider")], 16, "envMap3"], [[carbon, carbon.method, impl, impl.adapted], 18, "Update"], [[carbon, carbon.method, impl, impl.notImplemented], 18, "PickObject"], [[carbon, carbon.method, impl, impl.notImplemented], 18, "PickAsyncObject"], [[carbon, carbon.method, impl, impl.notImplemented], 18, "PickObjectAndAreaID"], [[carbon, carbon.method, impl, impl.implemented], 18, "PickInfinity"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Carbon's g_enablePostProcessDebugging global becomes the scene-scoped enablePostProcessDebugging field; the debug payload is a plain object, null when off.")], 18, "UpdatePostProcessAttributes"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetPostProcess"], [[impl, impl.custom, void 0, impl.reason("Carbon performs this inside BeginRender; CarbonEngineJS exposes the scene-owned CPU phase because the engine driver owns the surrounding frame order.")], 18, "UpdateFogSettings"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Carbon's Tr2ParallelFor becomes a sequential pass; the receivers touch only their own per-object records.")], 18, "UpdateShLighting"], [[carbon, carbon.method, impl, impl.implemented], 18, "RunLensflareOcclusionQueries"], [[carbon, carbon.method, impl, impl.adapted], 26, "registerWithVariableStore"], [[carbon, carbon.method, impl, impl.adapted], 18, "Initialize"], [[carbon, carbon.method, impl, impl.adapted], 18, "UpdateVariableStore"], [[carbon, carbon.method, impl, impl.adapted], 18, "Jitter"], [[carbon, carbon.method, impl, impl.adapted], 18, "EndRender"], [[carbon, carbon.method, impl, impl.implemented], 18, "RenderRenderables"], [[carbon, carbon.method, impl, impl.adapted], 18, "RenderBatch"], [[carbon, carbon.method, impl, impl.adapted], 18, "RenderDepthPass"], [[carbon, carbon.method, impl, impl.adapted], 18, "RenderShadows"], [[carbon, carbon.method, impl, impl.adapted], 18, "SetupCascadedShadows"], [[carbon, carbon.method, impl, impl.implemented], 18, "ApplyPerFrameData"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Tr2Renderer view statics and the ESM's render-target/viewport sizes are engine state; the driver supplies them in `frame`.")], 18, "PopulatePerFrameVSData"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Tr2Renderer statics, the ESM viewport, Tr2LightManager's atlas settings and the upscaler's mip bias are engine state; the driver supplies them in `frame`.")], 18, "PopulatePerFramePSData"], [[carbon, carbon.method, impl, impl.implemented], 18, "ReregisterEntities"], [[carbon, carbon.method, impl, impl.implemented], 18, "ClearComponentRegistry"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetPostProcessDebug"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateScene"]], 0, void 0, CjsModel));
144
157
  _initStatic(this);
145
158
  }
146
159
  /** m_visualizeMethod (EveVisualizeMethod - enum EveVisualizeMethod) [READWRITE, ENUM] */
@@ -788,7 +801,7 @@ new class extends _identity {
788
801
  if (!lightManager || !this.display) {
789
802
  return;
790
803
  }
791
- lightManager.SetShadowQuality(this.shadowQualitySetting);
804
+ lightManager.SetShadowQuality(this.shadowQualitySetting, this.updateContext.renderContext.GetRecordingFrameNumber());
792
805
  lightManager.Clear(this.updateContext.renderContext);
793
806
  lightManager.SetFrustum(this.updateContext.GetFrustum());
794
807
  lightManager.AdjustLightCutoff(this.updateContext.GetLodFactor());
@@ -957,6 +970,19 @@ new class extends _identity {
957
970
  } else {
958
971
  this.#envMapTextureRes = this.#staticEnvMapTextureRes;
959
972
  }
973
+
974
+ // cpp:3247-3257: every object entity joins the scene's component registry
975
+ // - its light owners, post-process owners, shadow casters - and so does
976
+ // the camera attachment parent. Without it GatherLights finds no owners
977
+ // and no attachment light reaches a shader. The quad-renderer
978
+ // registration beside it is not ported, nor is the list-insert
979
+ // registration (OnListChanged, cpp:3465-3470): objects pushed after
980
+ // Initialize join through ReregisterEntities.
981
+ // Carbon's BlueCastPtr<EveEntity> is CjsSchema.cast.
982
+ for (const object of this.objects) {
983
+ CjsSchema.cast(object, _EveEntity)?.Register(this.componentRegistry);
984
+ }
985
+ CjsSchema.cast(this.cameraAttachmentParent, _EveEntity)?.Register(this.componentRegistry);
960
986
  return true;
961
987
  }
962
988
 
@@ -1127,6 +1153,260 @@ new class extends _identity {
1127
1153
  batch.Clear();
1128
1154
  }
1129
1155
 
1156
+ /**
1157
+ * Carbon EveSpaceScene::RenderDepthPass (cpp:2201-2356): the opaque, decal
1158
+ * and depth batches drawn with the depth technique into the bound depth
1159
+ * buffer, and into the normal map and custom stencil when they are given.
1160
+ * Both targets and the depth are cleared to zero, reverse-Z's far.
1161
+ *
1162
+ * Carbon's Metal branch is the one taken (cpp:2255-2259, 2319-2321): with
1163
+ * no normal map, colour slot 0 is unbound for the pass rather than left on
1164
+ * the scene colour.
1165
+ *
1166
+ * Adapted. The batches come in as `batchMap`: Carbon draws its own
1167
+ * m_primaryBatches, and the gather that fills them is the driver's here.
1168
+ * Not ported, each a later insertion at its place in this order: the
1169
+ * mesh-morph update before the pass (cpp:2212-2228; nothing registers an
1170
+ * ITr2MeshMorph), the planets' z-only areas (cpp:2285-2308; EvePlanet has no
1171
+ * GetZOnlyRenderables), and the volumetrics sun angle and planet shadow
1172
+ * casters after it (cpp:2328-2355).
1173
+ *
1174
+ * @param {object} depthMap The scene depth; the caller has bound it.
1175
+ * @param {object|null} normalMap The normal map, or null.
1176
+ * @param {object|null} customStencil The custom stencil target, or null.
1177
+ * @param {Tr2RenderContext} renderContext The frame's context.
1178
+ * @param {string} techniqueName The depth technique ("Depth" from the driver).
1179
+ * @param {object} batchMap The frame's batch map.
1180
+ * @returns {void}
1181
+ */
1182
+ RenderDepthPass(depthMap, normalMap, customStencil, renderContext, techniqueName, batchMap) {
1183
+ if (!this.display) return;
1184
+ const esm = renderContext.GetEffectStateManager();
1185
+ const clearAndStore = () => new Tr2ColorAttachment(Tr2LoadAction.CLEAR, Tr2StoreAction.STORE);
1186
+ const clearDepth = new Tr2DepthAttachment(Tr2LoadAction.CLEAR, Tr2StoreAction.STORE, 0);
1187
+ let renderingMode;
1188
+ esm.BeginManagedRendering();
1189
+ esm.SetRenderTarget(1, customStencil);
1190
+ esm.PushRenderTarget();
1191
+ if (normalMap) {
1192
+ esm.SetRenderTarget(0, normalMap);
1193
+ if (customStencil) {
1194
+ renderContext.RenderPassHint(clearAndStore(), clearAndStore(), clearDepth);
1195
+ renderContext.Clear({
1196
+ clearColor: true,
1197
+ color: [0, 0, 0, 0],
1198
+ slot: 1
1199
+ });
1200
+ } else {
1201
+ renderContext.RenderPassHint(clearAndStore(), clearDepth);
1202
+ }
1203
+ renderContext.Clear({
1204
+ clearColor: true,
1205
+ clearDepth: true,
1206
+ color: [0, 0, 0, 0],
1207
+ depth: 0
1208
+ });
1209
+ renderingMode = RenderingMode.RM_OPAQUE;
1210
+ } else {
1211
+ esm.SetRenderTarget(0, null);
1212
+ if (customStencil) {
1213
+ renderContext.RenderPassHint(new Tr2ColorAttachment(), clearAndStore(), clearDepth);
1214
+ renderContext.Clear({
1215
+ clearColor: true,
1216
+ color: [0, 0, 0, 0],
1217
+ slot: 1
1218
+ });
1219
+ renderingMode = RenderingMode.RM_OPAQUE;
1220
+ } else {
1221
+ renderContext.RenderPassHint(new Tr2ColorAttachment(), clearDepth);
1222
+ renderingMode = RenderingMode.RM_DEPTH_ONLY;
1223
+ }
1224
+ renderContext.Clear({
1225
+ clearDepth: true,
1226
+ depth: 0
1227
+ });
1228
+ }
1229
+ this.ApplyPerFrameData(renderContext);
1230
+ for (const batchType of [TriBatchType.TRIBATCHTYPE_OPAQUE, TriBatchType.TRIBATCHTYPE_DECAL, TriBatchType.TRIBATCHTYPE_DEPTH]) {
1231
+ esm.ApplyStandardStates(renderingMode);
1232
+ const accumulator = batchMap.GetAccumulator(batchType);
1233
+ if (accumulator) renderContext.RenderBatches(accumulator, techniqueName);
1234
+ }
1235
+
1236
+ // Metal supports render-pass hints, so the hinted pass ends here
1237
+ // (cpp:2310-2314); without a normal map Carbon's Metal branch only pops.
1238
+ if (normalMap) renderContext.EndRenderPassHint();
1239
+ esm.PopRenderTarget();
1240
+ esm.SetRenderTarget(1, null);
1241
+ esm.EndManagedRendering();
1242
+ }
1243
+
1244
+ /** m_enableShadows: C++-only, set in the constructor and never cleared (EveSpaceScene.cpp:180). */
1245
+ _enableShadows = true;
1246
+
1247
+ /**
1248
+ * m_shadowBatches: one accumulator per cascade split (cpp:245-250). Carbon
1249
+ * gives each its own pool allocator; ours draw from the context's.
1250
+ */
1251
+ _shadowBatches = Array.from({
1252
+ length: CjsPerFrameLayouts.SHADOW_FRUSTUM_COUNT
1253
+ }, () => new TriRenderBatchAccumulator(EffectKeyGenerator));
1254
+
1255
+ /** The shadow pass's per-frame vertex block, of which only ViewProjectionMat is set (cpp:764-765). */
1256
+ _shadowPerFrameVS = RawData.create("EveSpaceScenePerFrameVSData");
1257
+
1258
+ /** m_shadowPerFrameVSBuffer */
1259
+ _shadowPerFrameVSBuffer = null;
1260
+
1261
+ /**
1262
+ * Carbon EveSpaceScene::RenderShadows (cpp:2618-2676): the cascaded shadow
1263
+ * map at LOW or HIGH shadow quality.
1264
+ *
1265
+ * Adapted: the renderer is passed in for the resolve's blitter, as
1266
+ * `Tr2ShadowMap.DrawToShadowMapResult` takes it. Not ported, each a later
1267
+ * insertion here: the raytraced branch (no Tr2RaytracingManager), and the
1268
+ * point and spot light shadow atlas (the light manager's shadow maps).
1269
+ *
1270
+ * @param {object} depthMap The scene depth.
1271
+ * @param {object|null} normalMap The depth pass's normal map (the raytraced branch reads it).
1272
+ * @param {object} gpuResourcePool The driver's pool.
1273
+ * @param {Tr2RenderContext} renderContext The frame's context.
1274
+ * @param {object} renderer The renderer owning the blitter.
1275
+ * @returns {object} ShadowResources: `shadowMap`, `cascadedShadowDepth`,
1276
+ * `pointLightShadowMap`, `pointLightShadowDepth`, each a GpuResourceHandle,
1277
+ * empty when absent.
1278
+ */
1279
+ RenderShadows(depthMap, normalMap, gpuResourcePool, renderContext, renderer) {
1280
+ if (!this.display || !this._enableShadows) return EmptyShadowResources();
1281
+ if (this.cascadedShadowMap && (this.shadowQualitySetting === ShadowQuality.SHADOW_LOW || this.shadowQualitySetting === ShadowQuality.SHADOW_HIGH)) {
1282
+ return this.SetupCascadedShadows(Tr2RenderReason.TR2RENDERREASON_NORMAL, this.cascadedShadowMap, this.updateContext.GetFrustum(), depthMap, gpuResourcePool, renderContext, renderer);
1283
+ }
1284
+ return EmptyShadowResources();
1285
+ }
1286
+
1287
+ /**
1288
+ * Carbon EveSpaceScene::SetupCascadedShadows (cpp:608-798): splits the view
1289
+ * into cascades, finds each one's shadow casters, draws them with their
1290
+ * "Shadow" technique into the cascade's cell of the depth atlas, then
1291
+ * resolves the atlas against the scene depth into a screen-space shadow
1292
+ * factor.
1293
+ *
1294
+ * Adapted: Carbon reads the camera off Tr2Renderer's statics, which the
1295
+ * render context holds here, and finds casters and gathers batches in
1296
+ * parallel, which runs in order here. Not ported, each a later insertion:
1297
+ * the instanced mesh manager's shadow batches, the planets as shadow
1298
+ * casters, and the volumetrics' shadows.
1299
+ *
1300
+ * @param {number} renderReason A `Tr2RenderReason`.
1301
+ * @param {Tr2ShadowMap} shadowMap The scene's cascaded shadow map.
1302
+ * @param {TriFrustum} viewFrustum The camera frustum.
1303
+ * @param {object} depthMap The scene depth.
1304
+ * @param {object} gpuResourcePool The driver's pool.
1305
+ * @param {Tr2RenderContext} renderContext The frame's context.
1306
+ * @param {object} renderer The renderer owning the blitter.
1307
+ * @returns {object} ShadowResources, as RenderShadows.
1308
+ */
1309
+ SetupCascadedShadows(renderReason, shadowMap, viewFrustum, depthMap, gpuResourcePool, renderContext, renderer) {
1310
+ if (!this.componentRegistry) return EmptyShadowResources();
1311
+ const shadowCasters = this.componentRegistry.GetComponents(EveComponentType.ShadowCaster);
1312
+ const volumetricCount = this.componentRegistry.ComponentCount(EveComponentType.VolumetricRenderable);
1313
+ const fogCount = this.componentRegistry.ComponentCount(EveComponentType.FroxelFogSettings);
1314
+ if (shadowCasters.length + volumetricCount + fogCount === 0) return EmptyShadowResources();
1315
+ shadowMap.UpdateSplitValues(renderContext.GetFrontClip(), renderContext.GetBackClip());
1316
+ const shadowMapSize = shadowMap.GetShadowMapSize();
1317
+ const splitCount = CjsPerFrameLayouts.SHADOW_FRUSTUM_COUNT;
1318
+
1319
+ // The frustum's left, right, top and bottom over the near plane, from the
1320
+ // projection (cpp:633-644); Carbon's _11, _22, _31 and _32 are 0, 5, 8, 9.
1321
+ const projection = renderContext.GetProjection();
1322
+ const rightMinusLeft = 2 / projection[0];
1323
+ const bottomMinusTop = 2 / -projection[5];
1324
+ const left = (projection[8] - 1) / 2 * rightMinusLeft;
1325
+ const top = (-projection[9] - 1) / 2 * bottomMinusTop;
1326
+ const right = rightMinusLeft + left;
1327
+ const bottom = bottomMinusTop + top;
1328
+ const sunDir = this.sunDirection;
1329
+ const cameraFrustums = [];
1330
+ const shadowFrustums = [];
1331
+ const splitSetups = [];
1332
+ for (let splitIndex = 0; splitIndex < splitCount; ++splitIndex) {
1333
+ const splitSetup = shadowMap.SetupShadowSplit(splitIndex, renderContext.GetInverseViewTransform(), sunDir, viewFrustum.zNear, left, right, top, bottom);
1334
+
1335
+ // The split's slice of the camera frustum, for half-space culling of
1336
+ // casters. Only the planes are read, so they are all that is made.
1337
+ const cameraFrustum = new TriFrustum();
1338
+ cameraFrustum.ExtractFrustum(mat4.invert(mat4.create(), splitSetup.invViewProj));
1339
+ cameraFrustums.push(cameraFrustum);
1340
+ shadowFrustums.push(new TriShadowOrthoFrustum(splitSetup.shadowFrustum, shadowMapSize, sunDir));
1341
+ splitSetups.push(splitSetup);
1342
+ }
1343
+
1344
+ // Without the atlas there is nothing to draw into (cpp:661-665).
1345
+ const cascadedShadowDepth = shadowMap.PrepareShadowRendering(gpuResourcePool, renderContext);
1346
+ if (!cascadedShadowDepth || !cascadedShadowDepth.IsValid()) return EmptyShadowResources();
1347
+ const allocator = renderContext.GetTriPoolAllocator();
1348
+ for (let frustumIndex = 0; frustumIndex < splitCount; ++frustumIndex) {
1349
+ const batches = this._shadowBatches[frustumIndex];
1350
+ const shadowCasterInfo = [];
1351
+ if (allocator) batches.SetTriPoolAllocator(allocator);
1352
+ for (const caster of shadowCasters) {
1353
+ const radius = [0];
1354
+ if (caster.IsCastingShadow(cameraFrustums[frustumIndex], shadowFrustums[frustumIndex], renderReason, radius)) {
1355
+ shadowCasterInfo.push({
1356
+ radius: radius[0],
1357
+ caster,
1358
+ perObjectData: null
1359
+ });
1360
+ }
1361
+ }
1362
+ for (const info of shadowCasterInfo) info.perObjectData = info.caster.GetShadowPerObjectData(batches);
1363
+ for (const info of shadowCasterInfo) info.caster.GetShadowBatches(batches, info.perObjectData, info.radius);
1364
+ batches.Finalize();
1365
+ }
1366
+ const esm = renderContext.GetEffectStateManager();
1367
+ const shaderTypeMask = renderContext.GetRenderContextAL().constructor.SHADER_TYPE_MASK;
1368
+ const perFrameVsMask = 1 << ShaderType.VERTEX_SHADER | shaderTypeMask & (1 << ShaderType.COMPUTE_SHADER | 1 << ShaderType.GEOMETRY_SHADER | 1 << ShaderType.HULL_SHADER | 1 << ShaderType.DOMAIN_SHADER);
1369
+ renderContext.SetRenderState(RenderState.RS_DEPTH_CLIP_ENABLE, 0);
1370
+ try {
1371
+ for (let splitIndex = 0; splitIndex < splitCount; ++splitIndex) {
1372
+ const batches = this._shadowBatches[splitIndex];
1373
+ if (batches.GetBatchCount() === 0) {
1374
+ batches.Clear();
1375
+ continue;
1376
+ }
1377
+ shadowMap.BeginShadowRendering(renderContext, splitIndex);
1378
+
1379
+ // column_major for shaders: Carbon stores Transpose(lightViewProjection).
1380
+ this._shadowPerFrameVS.SetAndTranspose("ViewProjectionMat", splitSetups[splitIndex].lightViewProjection);
1381
+ this._shadowPerFrameVSBuffer ??= renderContext.CreateConstantBuffer();
1382
+ const data = this._shadowPerFrameVS.GetData();
1383
+ FillAndSetConstants(this._shadowPerFrameVSBuffer, data, data.byteLength, perFrameVsMask, PER_FRAME_VS, renderContext);
1384
+
1385
+ // The atlas is a forward-depth surface cleared to 1 (PrepareShadowRendering).
1386
+ esm.SetInvertedDepthTest(false);
1387
+ try {
1388
+ esm.ApplyStandardStates(RenderingMode.RM_OPAQUE);
1389
+ renderContext.RenderBatches(batches, "Shadow");
1390
+ } finally {
1391
+ esm.SetInvertedDepthTest(true);
1392
+ }
1393
+ batches.Clear();
1394
+ }
1395
+ shadowMap.EndShadowRendering(renderContext);
1396
+ } finally {
1397
+ renderContext.SetRenderState(RenderState.RS_DEPTH_CLIP_ENABLE, 1);
1398
+ }
1399
+ this.PopulatePerFramePSData(renderContext, {}, shadowMap);
1400
+ this.ApplyPerFrameData(renderContext);
1401
+ const result = shadowMap.DrawToShadowMapResult(renderContext, gpuResourcePool, depthMap, cascadedShadowDepth.Get(), this.upscalingAmount, renderer);
1402
+ return {
1403
+ shadowMap: result ?? new GpuResourceHandle(),
1404
+ cascadedShadowDepth,
1405
+ pointLightShadowMap: new GpuResourceHandle(),
1406
+ pointLightShadowDepth: new GpuResourceHandle()
1407
+ };
1408
+ }
1409
+
1130
1410
  /**
1131
1411
  * Carbon EveSpaceScene::ApplyPerFrameData (cpp:818-828): uploads and binds
1132
1412
  * both per-frame blocks. The VERTEX block is bound for every non-pixel