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