@onerjs/core 8.28.0 → 8.28.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  2. package/Collisions/gpuPicker.d.ts +40 -16
  3. package/Collisions/gpuPicker.js +216 -95
  4. package/Collisions/gpuPicker.js.map +1 -1
  5. package/Decorators/nodeDecorator.d.ts +5 -1
  6. package/Decorators/nodeDecorator.js +4 -0
  7. package/Decorators/nodeDecorator.js.map +1 -1
  8. package/Engines/abstractEngine.js +2 -2
  9. package/Engines/abstractEngine.js.map +1 -1
  10. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.d.ts +30 -0
  11. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +56 -0
  12. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js.map +1 -0
  13. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.d.ts +32 -0
  14. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +62 -0
  15. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js.map +1 -0
  16. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +36 -0
  17. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js +88 -0
  18. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -0
  19. package/FrameGraph/Node/Blocks/index.d.ts +3 -0
  20. package/FrameGraph/Node/Blocks/index.js +3 -0
  21. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  22. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.d.ts +17 -0
  23. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js +18 -0
  24. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js.map +1 -0
  25. package/FrameGraph/Tasks/PostProcesses/filterTask.d.ts +16 -0
  26. package/FrameGraph/Tasks/PostProcesses/filterTask.js +17 -0
  27. package/FrameGraph/Tasks/PostProcesses/filterTask.js.map +1 -0
  28. package/FrameGraph/Tasks/PostProcesses/tonemapTask.d.ts +16 -0
  29. package/FrameGraph/Tasks/PostProcesses/tonemapTask.js +17 -0
  30. package/FrameGraph/Tasks/PostProcesses/tonemapTask.js.map +1 -0
  31. package/FrameGraph/index.d.ts +3 -0
  32. package/FrameGraph/index.js +3 -0
  33. package/FrameGraph/index.js.map +1 -1
  34. package/Materials/Textures/texture.js +9 -2
  35. package/Materials/Textures/texture.js.map +1 -1
  36. package/Materials/effect.d.ts +1 -0
  37. package/Materials/effect.js +7 -1
  38. package/Materials/effect.js.map +1 -1
  39. package/Particles/gpuParticleSystem.js +2 -1
  40. package/Particles/gpuParticleSystem.js.map +1 -1
  41. package/Particles/thinParticleSystem.js +4 -3
  42. package/Particles/thinParticleSystem.js.map +1 -1
  43. package/Physics/v2/physicsAggregate.js +4 -3
  44. package/Physics/v2/physicsAggregate.js.map +1 -1
  45. package/PostProcesses/colorCorrectionPostProcess.d.ts +3 -3
  46. package/PostProcesses/colorCorrectionPostProcess.js +21 -21
  47. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  48. package/PostProcesses/filterPostProcess.d.ts +4 -2
  49. package/PostProcesses/filterPostProcess.js +22 -15
  50. package/PostProcesses/filterPostProcess.js.map +1 -1
  51. package/PostProcesses/index.d.ts +3 -0
  52. package/PostProcesses/index.js +3 -0
  53. package/PostProcesses/index.js.map +1 -1
  54. package/PostProcesses/thinColorCorrectionPostProcess.d.ts +30 -0
  55. package/PostProcesses/thinColorCorrectionPostProcess.js +52 -0
  56. package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -0
  57. package/PostProcesses/thinFilterPostProcess.d.ts +29 -0
  58. package/PostProcesses/thinFilterPostProcess.js +51 -0
  59. package/PostProcesses/thinFilterPostProcess.js.map +1 -0
  60. package/PostProcesses/thinTonemapPostProcess.d.ts +52 -0
  61. package/PostProcesses/thinTonemapPostProcess.js +83 -0
  62. package/PostProcesses/thinTonemapPostProcess.js.map +1 -0
  63. package/PostProcesses/tonemapPostProcess.d.ts +23 -21
  64. package/PostProcesses/tonemapPostProcess.js +55 -46
  65. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  66. package/Rendering/geometryBufferRenderer.js +6 -1
  67. package/Rendering/geometryBufferRenderer.js.map +1 -1
  68. package/Shaders/geometry.fragment.js +3 -1
  69. package/Shaders/geometry.fragment.js.map +1 -1
  70. package/Shaders/geometry.vertex.js +10 -2
  71. package/Shaders/geometry.vertex.js.map +1 -1
  72. package/Shaders/picking.fragment.js +20 -6
  73. package/Shaders/picking.fragment.js.map +1 -1
  74. package/Shaders/picking.vertex.js +4 -3
  75. package/Shaders/picking.vertex.js.map +1 -1
  76. package/ShadersWGSL/geometry.fragment.js +3 -1
  77. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  78. package/ShadersWGSL/geometry.vertex.js +10 -2
  79. package/ShadersWGSL/geometry.vertex.js.map +1 -1
  80. package/ShadersWGSL/picking.fragment.js +11 -6
  81. package/ShadersWGSL/picking.fragment.js.map +1 -1
  82. package/ShadersWGSL/picking.vertex.js +4 -3
  83. package/ShadersWGSL/picking.vertex.js.map +1 -1
  84. package/XR/features/WebXRAnchorSystem.d.ts +1 -1
  85. package/XR/features/WebXRBackgroundRemover.d.ts +1 -1
  86. package/XR/features/WebXRControllerMovement.d.ts +1 -1
  87. package/XR/features/WebXRControllerPhysics.d.ts +1 -1
  88. package/XR/features/WebXRControllerPointerSelection.d.ts +1 -1
  89. package/XR/features/WebXRControllerTeleportation.d.ts +1 -1
  90. package/XR/features/WebXRDOMOverlay.d.ts +1 -1
  91. package/XR/features/WebXRDepthSensing.d.ts +1 -1
  92. package/XR/features/WebXREyeTracking.d.ts +1 -1
  93. package/XR/features/WebXRFeaturePointSystem.d.ts +1 -1
  94. package/XR/features/WebXRHandTracking.d.ts +1 -1
  95. package/XR/features/WebXRHitTest.d.ts +1 -1
  96. package/XR/features/WebXRHitTestLegacy.d.ts +1 -1
  97. package/XR/features/WebXRImageTracking.d.ts +1 -1
  98. package/XR/features/WebXRLayers.d.ts +1 -1
  99. package/XR/features/WebXRLightEstimation.d.ts +1 -1
  100. package/XR/features/WebXRMeshDetector.d.ts +1 -1
  101. package/XR/features/WebXRNearInteraction.d.ts +1 -1
  102. package/XR/features/WebXRPlaneDetector.d.ts +1 -1
  103. package/XR/features/WebXRRawCameraAccess.d.ts +1 -1
  104. package/XR/features/WebXRSpaceWarp.d.ts +1 -1
  105. package/XR/webXRDefaultExperience.js +1 -1
  106. package/XR/webXRDefaultExperience.js.map +1 -1
  107. package/XR/webXRFeaturesManager.d.ts +116 -27
  108. package/XR/webXRFeaturesManager.js.map +1 -1
  109. package/package.json +1 -1
@@ -0,0 +1,51 @@
1
+ import { EffectWrapper } from "../Materials/effectRenderer.js";
2
+ import { Engine } from "../Engines/engine.js";
3
+ import { Matrix } from "../Maths/math.vector.js";
4
+ /**
5
+ * Post process used to apply a kernel filter
6
+ */
7
+ export class ThinFilterPostProcess extends EffectWrapper {
8
+ _gatherImports(useWebGPU, list) {
9
+ if (useWebGPU) {
10
+ this._webGPUReady = true;
11
+ list.push(import("../ShadersWGSL/filter.fragment.js"));
12
+ }
13
+ else {
14
+ list.push(import("../Shaders/filter.fragment.js"));
15
+ }
16
+ }
17
+ /**
18
+ * Constructs a new filter post process
19
+ * @param name Name of the effect
20
+ * @param engine Engine to use to render the effect. If not provided, the last created engine will be used
21
+ * @param options Options to configure the effect
22
+ */
23
+ constructor(name, engine = null, options) {
24
+ super({
25
+ ...options,
26
+ name,
27
+ engine: engine || Engine.LastCreatedEngine,
28
+ useShaderStore: true,
29
+ useAsPostProcess: true,
30
+ fragmentShader: ThinFilterPostProcess.FragmentUrl,
31
+ uniforms: ThinFilterPostProcess.Uniforms,
32
+ });
33
+ /**
34
+ * The matrix to be applied to the image
35
+ */
36
+ this.kernelMatrix = Matrix.Identity();
37
+ }
38
+ bind(noDefaultBindings = false) {
39
+ super.bind(noDefaultBindings);
40
+ this._drawWrapper.effect.setMatrix("kernelMatrix", this.kernelMatrix);
41
+ }
42
+ }
43
+ /**
44
+ * The fragment shader url
45
+ */
46
+ ThinFilterPostProcess.FragmentUrl = "filter";
47
+ /**
48
+ * The list of uniforms used by the effect
49
+ */
50
+ ThinFilterPostProcess.Uniforms = ["kernelMatrix"];
51
+ //# sourceMappingURL=thinFilterPostProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinFilterPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinFilterPostProcess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IAWjC,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,YAAY,IAAY,EAAE,SAAmC,IAAI,EAAE,OAAsC;QACrG,KAAK,CAAC;YACF,GAAG,OAAO;YACV,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,iBAAkB;YAC3C,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,qBAAqB,CAAC,WAAW;YACjD,QAAQ,EAAE,qBAAqB,CAAC,QAAQ;SAC3C,CAAC,CAAC;QAGP;;WAEG;QACI,iBAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IALxC,CAAC;IAOe,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC1C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,MAAO,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3E,CAAC;;AA7CD;;GAEG;AACoB,iCAAW,GAAG,QAAQ,AAAX,CAAY;AAE9C;;GAEG;AACoB,8BAAQ,GAAG,CAAC,cAAc,CAAC,AAAnB,CAAoB","sourcesContent":["import type { Nullable, AbstractEngine, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { Matrix } from \"../Maths/math.vector\";\r\n\r\n/**\r\n * Post process used to apply a kernel filter\r\n */\r\nexport class ThinFilterPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"filter\";\r\n\r\n /**\r\n * The list of uniforms used by the effect\r\n */\r\n public static readonly Uniforms = [\"kernelMatrix\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/filter.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/filter.fragment\"));\r\n }\r\n }\r\n\r\n /**\r\n * Constructs a new filter post process\r\n * @param name Name of the effect\r\n * @param engine Engine to use to render the effect. If not provided, the last created engine will be used\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinFilterPostProcess.FragmentUrl,\r\n uniforms: ThinFilterPostProcess.Uniforms,\r\n });\r\n }\r\n\r\n /**\r\n * The matrix to be applied to the image\r\n */\r\n public kernelMatrix = Matrix.Identity();\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n this._drawWrapper.effect!.setMatrix(\"kernelMatrix\", this.kernelMatrix);\r\n }\r\n}\r\n"]}
@@ -0,0 +1,52 @@
1
+ import type { Nullable, AbstractEngine, EffectWrapperCreationOptions } from "../index.js";
2
+ import { EffectWrapper } from "../Materials/effectRenderer.js";
3
+ /** Defines operator used for tonemapping */
4
+ export declare enum TonemappingOperator {
5
+ /** Hable */
6
+ Hable = 0,
7
+ /** Reinhard */
8
+ Reinhard = 1,
9
+ /** HejiDawson */
10
+ HejiDawson = 2,
11
+ /** Photographic */
12
+ Photographic = 3
13
+ }
14
+ /**
15
+ * Options used to create a ThinTonemapPostProcess.
16
+ */
17
+ export interface ThinTonemapPostProcessOptions extends EffectWrapperCreationOptions {
18
+ /** Defines the operator to use (default: Reinhard) */
19
+ operator?: TonemappingOperator;
20
+ /** Defines the required exposure adjustment (default: 1.0) */
21
+ exposureAdjustment?: number;
22
+ }
23
+ /**
24
+ * Post process used to apply a tone mapping operator
25
+ */
26
+ export declare class ThinTonemapPostProcess extends EffectWrapper {
27
+ /**
28
+ * The fragment shader url
29
+ */
30
+ static readonly FragmentUrl = "tonemap";
31
+ /**
32
+ * The list of uniforms used by the effect
33
+ */
34
+ static readonly Uniforms: string[];
35
+ protected _gatherImports(useWebGPU: boolean, list: Promise<any>[]): void;
36
+ /**
37
+ * Constructs a new tone mapping post process
38
+ * @param name Name of the effect
39
+ * @param engine Engine to use to render the effect. If not provided, the last created engine will be used
40
+ * @param options Options to configure the effect
41
+ */
42
+ constructor(name: string, engine?: Nullable<AbstractEngine>, options?: ThinTonemapPostProcessOptions);
43
+ /**
44
+ * Gets the operator to use (default: Reinhard)
45
+ */
46
+ readonly operator: TonemappingOperator;
47
+ /**
48
+ * Defines the required exposure adjustment (default: 1.0)
49
+ */
50
+ exposureAdjustment: number;
51
+ bind(noDefaultBindings?: boolean): void;
52
+ }
@@ -0,0 +1,83 @@
1
+ import { EffectWrapper } from "../Materials/effectRenderer.js";
2
+ import { Engine } from "../Engines/engine.js";
3
+ /** Defines operator used for tonemapping */
4
+ export var TonemappingOperator;
5
+ (function (TonemappingOperator) {
6
+ /** Hable */
7
+ TonemappingOperator[TonemappingOperator["Hable"] = 0] = "Hable";
8
+ /** Reinhard */
9
+ TonemappingOperator[TonemappingOperator["Reinhard"] = 1] = "Reinhard";
10
+ /** HejiDawson */
11
+ TonemappingOperator[TonemappingOperator["HejiDawson"] = 2] = "HejiDawson";
12
+ /** Photographic */
13
+ TonemappingOperator[TonemappingOperator["Photographic"] = 3] = "Photographic";
14
+ })(TonemappingOperator || (TonemappingOperator = {}));
15
+ /**
16
+ * Post process used to apply a tone mapping operator
17
+ */
18
+ export class ThinTonemapPostProcess extends EffectWrapper {
19
+ _gatherImports(useWebGPU, list) {
20
+ if (useWebGPU) {
21
+ this._webGPUReady = true;
22
+ list.push(import("../ShadersWGSL/tonemap.fragment.js"));
23
+ }
24
+ else {
25
+ list.push(import("../Shaders/tonemap.fragment.js"));
26
+ }
27
+ }
28
+ /**
29
+ * Constructs a new tone mapping post process
30
+ * @param name Name of the effect
31
+ * @param engine Engine to use to render the effect. If not provided, the last created engine will be used
32
+ * @param options Options to configure the effect
33
+ */
34
+ constructor(name, engine = null, options) {
35
+ const operator = options?.operator ?? 1 /* TonemappingOperator.Reinhard */;
36
+ let defines = "#define ";
37
+ if (operator === 0 /* TonemappingOperator.Hable */) {
38
+ defines += "HABLE_TONEMAPPING";
39
+ }
40
+ else if (operator === 1 /* TonemappingOperator.Reinhard */) {
41
+ defines += "REINHARD_TONEMAPPING";
42
+ }
43
+ else if (operator === 2 /* TonemappingOperator.HejiDawson */) {
44
+ defines += "OPTIMIZED_HEJIDAWSON_TONEMAPPING";
45
+ }
46
+ else if (operator === 3 /* TonemappingOperator.Photographic */) {
47
+ defines += "PHOTOGRAPHIC_TONEMAPPING";
48
+ }
49
+ super({
50
+ ...options,
51
+ name,
52
+ engine: engine || Engine.LastCreatedEngine,
53
+ useShaderStore: true,
54
+ useAsPostProcess: true,
55
+ fragmentShader: ThinTonemapPostProcess.FragmentUrl,
56
+ uniforms: ThinTonemapPostProcess.Uniforms,
57
+ defines,
58
+ });
59
+ /**
60
+ * Gets the operator to use (default: Reinhard)
61
+ */
62
+ this.operator = 1 /* TonemappingOperator.Reinhard */;
63
+ /**
64
+ * Defines the required exposure adjustment (default: 1.0)
65
+ */
66
+ this.exposureAdjustment = 1;
67
+ this.operator = operator;
68
+ this.exposureAdjustment = options?.exposureAdjustment ?? 1;
69
+ }
70
+ bind(noDefaultBindings = false) {
71
+ super.bind(noDefaultBindings);
72
+ this._drawWrapper.effect.setFloat("_ExposureAdjustment", this.exposureAdjustment);
73
+ }
74
+ }
75
+ /**
76
+ * The fragment shader url
77
+ */
78
+ ThinTonemapPostProcess.FragmentUrl = "tonemap";
79
+ /**
80
+ * The list of uniforms used by the effect
81
+ */
82
+ ThinTonemapPostProcess.Uniforms = ["_ExposureAdjustment"];
83
+ //# sourceMappingURL=thinTonemapPostProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinTonemapPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinTonemapPostProcess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,4CAA4C;AAC5C,MAAM,CAAN,IAAkB,mBASjB;AATD,WAAkB,mBAAmB;IACjC,YAAY;IACZ,+DAAS,CAAA;IACT,eAAe;IACf,qEAAY,CAAA;IACZ,iBAAiB;IACjB,yEAAc,CAAA;IACd,mBAAmB;IACnB,6EAAgB,CAAA;AACpB,CAAC,EATiB,mBAAmB,KAAnB,mBAAmB,QASpC;AAcD;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IAWlC,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,YAAY,IAAY,EAAE,SAAmC,IAAI,EAAE,OAAuC;QACtG,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,wCAAgC,CAAC;QAEnE,IAAI,OAAO,GAAG,UAAU,CAAC;QAEzB,IAAI,QAAQ,sCAA8B,EAAE,CAAC;YACzC,OAAO,IAAI,mBAAmB,CAAC;QACnC,CAAC;aAAM,IAAI,QAAQ,yCAAiC,EAAE,CAAC;YACnD,OAAO,IAAI,sBAAsB,CAAC;QACtC,CAAC;aAAM,IAAI,QAAQ,2CAAmC,EAAE,CAAC;YACrD,OAAO,IAAI,kCAAkC,CAAC;QAClD,CAAC;aAAM,IAAI,QAAQ,6CAAqC,EAAE,CAAC;YACvD,OAAO,IAAI,0BAA0B,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC;YACF,GAAG,OAAO;YACV,IAAI;YACJ,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,iBAAkB;YAC3C,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,sBAAsB,CAAC,WAAW;YAClD,QAAQ,EAAE,sBAAsB,CAAC,QAAQ;YACzC,OAAO;SACV,CAAC,CAAC;QAMP;;WAEG;QACa,aAAQ,wCAAqD;QAE7E;;WAEG;QACI,uBAAkB,GAAG,CAAC,CAAC;QAZ1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,kBAAkB,GAAG,OAAO,EAAE,kBAAkB,IAAI,CAAC,CAAC;IAC/D,CAAC;IAYe,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAC1C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,MAAO,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACvF,CAAC;;AApED;;GAEG;AACoB,kCAAW,GAAG,SAAS,AAAZ,CAAa;AAE/C;;GAEG;AACoB,+BAAQ,GAAG,CAAC,qBAAqB,CAAC,AAA1B,CAA2B","sourcesContent":["import type { Nullable, AbstractEngine, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { EffectWrapper } from \"../Materials/effectRenderer\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n/** Defines operator used for tonemapping */\r\nexport const enum TonemappingOperator {\r\n /** Hable */\r\n Hable = 0,\r\n /** Reinhard */\r\n Reinhard = 1,\r\n /** HejiDawson */\r\n HejiDawson = 2,\r\n /** Photographic */\r\n Photographic = 3,\r\n}\r\n\r\n/**\r\n * Options used to create a ThinTonemapPostProcess.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface ThinTonemapPostProcessOptions extends EffectWrapperCreationOptions {\r\n /** Defines the operator to use (default: Reinhard) */\r\n operator?: TonemappingOperator;\r\n\r\n /** Defines the required exposure adjustment (default: 1.0) */\r\n exposureAdjustment?: number;\r\n}\r\n\r\n/**\r\n * Post process used to apply a tone mapping operator\r\n */\r\nexport class ThinTonemapPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"tonemap\";\r\n\r\n /**\r\n * The list of uniforms used by the effect\r\n */\r\n public static readonly Uniforms = [\"_ExposureAdjustment\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/tonemap.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/tonemap.fragment\"));\r\n }\r\n }\r\n\r\n /**\r\n * Constructs a new tone mapping post process\r\n * @param name Name of the effect\r\n * @param engine Engine to use to render the effect. If not provided, the last created engine will be used\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, options?: ThinTonemapPostProcessOptions) {\r\n const operator = options?.operator ?? TonemappingOperator.Reinhard;\r\n\r\n let defines = \"#define \";\r\n\r\n if (operator === TonemappingOperator.Hable) {\r\n defines += \"HABLE_TONEMAPPING\";\r\n } else if (operator === TonemappingOperator.Reinhard) {\r\n defines += \"REINHARD_TONEMAPPING\";\r\n } else if (operator === TonemappingOperator.HejiDawson) {\r\n defines += \"OPTIMIZED_HEJIDAWSON_TONEMAPPING\";\r\n } else if (operator === TonemappingOperator.Photographic) {\r\n defines += \"PHOTOGRAPHIC_TONEMAPPING\";\r\n }\r\n\r\n super({\r\n ...options,\r\n name,\r\n engine: engine || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinTonemapPostProcess.FragmentUrl,\r\n uniforms: ThinTonemapPostProcess.Uniforms,\r\n defines,\r\n });\r\n\r\n this.operator = operator;\r\n this.exposureAdjustment = options?.exposureAdjustment ?? 1;\r\n }\r\n\r\n /**\r\n * Gets the operator to use (default: Reinhard)\r\n */\r\n public readonly operator: TonemappingOperator = TonemappingOperator.Reinhard;\r\n\r\n /**\r\n * Defines the required exposure adjustment (default: 1.0)\r\n */\r\n public exposureAdjustment = 1;\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n this._drawWrapper.effect!.setFloat(\"_ExposureAdjustment\", this.exposureAdjustment);\r\n }\r\n}\r\n"]}
@@ -1,43 +1,45 @@
1
- import type { Camera } from "../Cameras/camera.js";
1
+ import { Camera } from "../Cameras/camera.js";
2
+ import type { PostProcessOptions } from "./postProcess.js";
2
3
  import { PostProcess } from "./postProcess.js";
3
4
  import type { Nullable } from "../types.js";
4
5
  import type { AbstractEngine } from "../Engines/abstractEngine.js";
5
- /** Defines operator used for tonemapping */
6
- export declare enum TonemappingOperator {
7
- /** Hable */
8
- Hable = 0,
9
- /** Reinhard */
10
- Reinhard = 1,
11
- /** HejiDawson */
12
- HejiDawson = 2,
13
- /** Photographic */
14
- Photographic = 3
15
- }
6
+ import type { ThinTonemapPostProcessOptions, TonemappingOperator } from "./thinTonemapPostProcess.js";
7
+ import { ThinTonemapPostProcess } from "./thinTonemapPostProcess.js";
8
+ import type { Scene } from "../scene.js";
9
+ export type ToneMapPostProcessOptions = ThinTonemapPostProcessOptions & PostProcessOptions;
16
10
  /**
17
11
  * Defines a post process to apply tone mapping
18
12
  */
19
13
  export declare class TonemapPostProcess extends PostProcess {
20
- private _operator;
21
- /** Defines the required exposure adjustment */
22
- exposureAdjustment: number;
14
+ /**
15
+ * Defines the required exposure adjustment
16
+ */
17
+ get exposureAdjustment(): number;
18
+ set exposureAdjustment(value: number);
19
+ /**
20
+ * Gets the operator used for tonemapping
21
+ */
22
+ get operator(): TonemappingOperator;
23
23
  /**
24
24
  * Gets a string identifying the name of the class
25
25
  * @returns "TonemapPostProcess" string
26
26
  */
27
27
  getClassName(): string;
28
+ protected _effectWrapper: ThinTonemapPostProcess;
28
29
  /**
29
30
  * Creates a new TonemapPostProcess
30
31
  * @param name defines the name of the postprocess
31
- * @param _operator defines the operator to use
32
+ * @param operator defines the operator to use
32
33
  * @param exposureAdjustment defines the required exposure adjustment
33
34
  * @param camera defines the camera to use (can be null)
34
35
  * @param samplingMode defines the required sampling mode (BABYLON.Texture.BILINEAR_SAMPLINGMODE by default)
35
36
  * @param engine defines the hosting engine (can be ignore if camera is set)
36
- * @param textureFormat defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)
37
+ * @param textureType defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)
37
38
  * @param reusable If the post process can be reused on the same frame. (default: false)
38
39
  */
39
- constructor(name: string, _operator: TonemappingOperator,
40
- /** Defines the required exposure adjustment */
41
- exposureAdjustment: number, camera: Nullable<Camera>, samplingMode?: number, engine?: AbstractEngine, textureFormat?: number, reusable?: boolean);
42
- protected _gatherImports(useWebGPU: boolean, list: Promise<any>[]): void;
40
+ constructor(name: string, operator: TonemappingOperator, exposureAdjustment: number, camera: Nullable<Camera> | ToneMapPostProcessOptions, samplingMode?: number, engine?: AbstractEngine, textureType?: number, reusable?: boolean);
41
+ /**
42
+ * @internal
43
+ */
44
+ static _Parse(parsedPostProcess: any, targetCamera: Camera, scene: Scene, rootUrl: string): Nullable<TonemapPostProcess>;
43
45
  }
@@ -1,21 +1,30 @@
1
+ import { __decorate } from "../tslib.es6.js";
2
+ import { Camera } from "../Cameras/camera.js";
1
3
  import { PostProcess } from "./postProcess.js";
2
4
 
3
- /** Defines operator used for tonemapping */
4
- export var TonemappingOperator;
5
- (function (TonemappingOperator) {
6
- /** Hable */
7
- TonemappingOperator[TonemappingOperator["Hable"] = 0] = "Hable";
8
- /** Reinhard */
9
- TonemappingOperator[TonemappingOperator["Reinhard"] = 1] = "Reinhard";
10
- /** HejiDawson */
11
- TonemappingOperator[TonemappingOperator["HejiDawson"] = 2] = "HejiDawson";
12
- /** Photographic */
13
- TonemappingOperator[TonemappingOperator["Photographic"] = 3] = "Photographic";
14
- })(TonemappingOperator || (TonemappingOperator = {}));
5
+ import { RegisterClass } from "../Misc/typeStore.js";
6
+ import { serialize } from "../Misc/decorators.js";
7
+ import { SerializationHelper } from "../Misc/decorators.serialization.js";
8
+ import { ThinTonemapPostProcess } from "./thinTonemapPostProcess.js";
15
9
  /**
16
10
  * Defines a post process to apply tone mapping
17
11
  */
18
12
  export class TonemapPostProcess extends PostProcess {
13
+ /**
14
+ * Defines the required exposure adjustment
15
+ */
16
+ get exposureAdjustment() {
17
+ return this._effectWrapper.exposureAdjustment;
18
+ }
19
+ set exposureAdjustment(value) {
20
+ this._effectWrapper.exposureAdjustment = value;
21
+ }
22
+ /**
23
+ * Gets the operator used for tonemapping
24
+ */
25
+ get operator() {
26
+ return this._effectWrapper.operator;
27
+ }
19
28
  /**
20
29
  * Gets a string identifying the name of the class
21
30
  * @returns "TonemapPostProcess" string
@@ -26,48 +35,48 @@ export class TonemapPostProcess extends PostProcess {
26
35
  /**
27
36
  * Creates a new TonemapPostProcess
28
37
  * @param name defines the name of the postprocess
29
- * @param _operator defines the operator to use
38
+ * @param operator defines the operator to use
30
39
  * @param exposureAdjustment defines the required exposure adjustment
31
40
  * @param camera defines the camera to use (can be null)
32
41
  * @param samplingMode defines the required sampling mode (BABYLON.Texture.BILINEAR_SAMPLINGMODE by default)
33
42
  * @param engine defines the hosting engine (can be ignore if camera is set)
34
- * @param textureFormat defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)
43
+ * @param textureType defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)
35
44
  * @param reusable If the post process can be reused on the same frame. (default: false)
36
45
  */
37
- constructor(name, _operator,
38
- /** Defines the required exposure adjustment */
39
- exposureAdjustment, camera, samplingMode = 2, engine, textureFormat = 0, reusable) {
40
- super(name, "tonemap", ["_ExposureAdjustment"], null, 1.0, camera, samplingMode, engine, reusable, null, textureFormat);
41
- this._operator = _operator;
42
- this.exposureAdjustment = exposureAdjustment;
43
- let defines = "#define ";
44
- if (this._operator === 0 /* TonemappingOperator.Hable */) {
45
- defines += "HABLE_TONEMAPPING";
46
- }
47
- else if (this._operator === 1 /* TonemappingOperator.Reinhard */) {
48
- defines += "REINHARD_TONEMAPPING";
49
- }
50
- else if (this._operator === 2 /* TonemappingOperator.HejiDawson */) {
51
- defines += "OPTIMIZED_HEJIDAWSON_TONEMAPPING";
52
- }
53
- else if (this._operator === 3 /* TonemappingOperator.Photographic */) {
54
- defines += "PHOTOGRAPHIC_TONEMAPPING";
55
- }
56
- //sadly a second call to create the effect.
57
- this.updateEffect(defines);
58
- this.onApply = (effect) => {
59
- effect.setFloat("_ExposureAdjustment", this.exposureAdjustment);
46
+ constructor(name, operator, exposureAdjustment, camera, samplingMode = 2, engine, textureType = 0, reusable) {
47
+ const cameraIsCamera = camera === null || camera instanceof Camera;
48
+ const localOptions = {
49
+ operator,
50
+ exposureAdjustment,
51
+ uniforms: ThinTonemapPostProcess.Uniforms,
52
+ camera: cameraIsCamera ? camera : undefined,
53
+ samplingMode,
54
+ engine,
55
+ reusable,
56
+ textureType,
60
57
  };
61
- }
62
- _gatherImports(useWebGPU, list) {
63
- if (useWebGPU) {
64
- this._webGPUReady = true;
65
- list.push(Promise.all([import("../ShadersWGSL/tonemap.fragment.js")]));
58
+ if (!cameraIsCamera) {
59
+ Object.assign(localOptions, camera);
66
60
  }
67
- else {
68
- list.push(Promise.all([import("../Shaders/tonemap.fragment.js")]));
69
- }
70
- super._gatherImports(useWebGPU, list);
61
+ super(name, ThinTonemapPostProcess.FragmentUrl, {
62
+ effectWrapper: cameraIsCamera || !camera.effectWrapper ? new ThinTonemapPostProcess(name, engine, localOptions) : undefined,
63
+ ...localOptions,
64
+ });
65
+ }
66
+ /**
67
+ * @internal
68
+ */
69
+ static _Parse(parsedPostProcess, targetCamera, scene, rootUrl) {
70
+ return SerializationHelper.Parse(() => {
71
+ return new TonemapPostProcess(parsedPostProcess.name, parsedPostProcess.operator, parsedPostProcess.exposureAdjustment, targetCamera, parsedPostProcess.renderTargetSamplingMode, scene.getEngine(), parsedPostProcess.textureType, parsedPostProcess.reusable);
72
+ }, parsedPostProcess, scene, rootUrl);
71
73
  }
72
74
  }
75
+ __decorate([
76
+ serialize()
77
+ ], TonemapPostProcess.prototype, "exposureAdjustment", null);
78
+ __decorate([
79
+ serialize()
80
+ ], TonemapPostProcess.prototype, "operator", null);
81
+ RegisterClass("BABYLON.TonemapPostProcess", TonemapPostProcess);
73
82
  //# sourceMappingURL=tonemapPostProcess.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tonemapPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/tonemapPostProcess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMjD,4CAA4C;AAC5C,MAAM,CAAN,IAAkB,mBASjB;AATD,WAAkB,mBAAmB;IACjC,YAAY;IACZ,+DAAS,CAAA;IACT,eAAe;IACf,qEAAY,CAAA;IACZ,iBAAiB;IACjB,yEAAc,CAAA;IACd,mBAAmB;IACnB,6EAAgB,CAAA;AACpB,CAAC,EATiB,mBAAmB,KAAnB,mBAAmB,QASpC;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C;;;OAGG;IACa,YAAY;QACxB,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAED;;;;;;;;;;OAUG;IACH,YACI,IAAY,EACJ,SAA8B;IACtC,+CAA+C;IACxC,kBAA0B,EACjC,MAAwB,EACxB,eAAuB,SAAS,CAAC,6BAA6B,EAC9D,MAAuB,EACvB,aAAa,GAAG,SAAS,CAAC,yBAAyB,EACnD,QAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAThH,cAAS,GAAT,SAAS,CAAqB;QAE/B,uBAAkB,GAAlB,kBAAkB,CAAQ;QASjC,IAAI,OAAO,GAAG,UAAU,CAAC;QAEzB,IAAI,IAAI,CAAC,SAAS,sCAA8B,EAAE,CAAC;YAC/C,OAAO,IAAI,mBAAmB,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,yCAAiC,EAAE,CAAC;YACzD,OAAO,IAAI,sBAAsB,CAAC;QACtC,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,2CAAmC,EAAE,CAAC;YAC3D,OAAO,IAAI,kCAAkC,CAAC;QAClD,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,6CAAqC,EAAE,CAAC;YAC7D,OAAO,IAAI,0BAA0B,CAAC;QAC1C,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE3B,IAAI,CAAC,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;YAC9B,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpE,CAAC,CAAC;IACN,CAAC;IAEkB,cAAc,CAAC,SAAkB,EAAE,IAAoB;QACtE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CACJ","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { PostProcess } from \"./postProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport type { Nullable } from \"../types\";\r\n\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\n\r\n/** Defines operator used for tonemapping */\r\nexport const enum TonemappingOperator {\r\n /** Hable */\r\n Hable = 0,\r\n /** Reinhard */\r\n Reinhard = 1,\r\n /** HejiDawson */\r\n HejiDawson = 2,\r\n /** Photographic */\r\n Photographic = 3,\r\n}\r\n\r\n/**\r\n * Defines a post process to apply tone mapping\r\n */\r\nexport class TonemapPostProcess extends PostProcess {\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"TonemapPostProcess\" string\r\n */\r\n public override getClassName(): string {\r\n return \"TonemapPostProcess\";\r\n }\r\n\r\n /**\r\n * Creates a new TonemapPostProcess\r\n * @param name defines the name of the postprocess\r\n * @param _operator defines the operator to use\r\n * @param exposureAdjustment defines the required exposure adjustment\r\n * @param camera defines the camera to use (can be null)\r\n * @param samplingMode defines the required sampling mode (BABYLON.Texture.BILINEAR_SAMPLINGMODE by default)\r\n * @param engine defines the hosting engine (can be ignore if camera is set)\r\n * @param textureFormat defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n */\r\n constructor(\r\n name: string,\r\n private _operator: TonemappingOperator,\r\n /** Defines the required exposure adjustment */\r\n public exposureAdjustment: number,\r\n camera: Nullable<Camera>,\r\n samplingMode: number = Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine?: AbstractEngine,\r\n textureFormat = Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n reusable?: boolean\r\n ) {\r\n super(name, \"tonemap\", [\"_ExposureAdjustment\"], null, 1.0, camera, samplingMode, engine, reusable, null, textureFormat);\r\n\r\n let defines = \"#define \";\r\n\r\n if (this._operator === TonemappingOperator.Hable) {\r\n defines += \"HABLE_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.Reinhard) {\r\n defines += \"REINHARD_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.HejiDawson) {\r\n defines += \"OPTIMIZED_HEJIDAWSON_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.Photographic) {\r\n defines += \"PHOTOGRAPHIC_TONEMAPPING\";\r\n }\r\n\r\n //sadly a second call to create the effect.\r\n this.updateEffect(defines);\r\n\r\n this.onApply = (effect: Effect) => {\r\n effect.setFloat(\"_ExposureAdjustment\", this.exposureAdjustment);\r\n };\r\n }\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(Promise.all([import(\"../ShadersWGSL/tonemap.fragment\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../Shaders/tonemap.fragment\")]));\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"tonemapPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/tonemapPostProcess.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAKvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAKlE;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAC/C;;OAEG;IAEH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;IAClD,CAAC;IAED,IAAW,kBAAkB,CAAC,KAAa;QACvC,IAAI,CAAC,cAAc,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACnD,CAAC;IAED;;OAEG;IAEH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAID;;;;;;;;;;OAUG;IACH,YACI,IAAY,EACZ,QAA6B,EAC7B,kBAA0B,EAC1B,MAAoD,EACpD,eAAuB,SAAS,CAAC,6BAA6B,EAC9D,MAAuB,EACvB,WAAW,GAAG,SAAS,CAAC,yBAAyB,EACjD,QAAkB;QAElB,MAAM,cAAc,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,YAAY,MAAM,CAAC;QAEnE,MAAM,YAAY,GAAG;YACjB,QAAQ;YACR,kBAAkB;YAClB,QAAQ,EAAE,sBAAsB,CAAC,QAAQ;YACzC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC3C,YAAY;YACZ,MAAM;YACN,QAAQ;YACR,WAAW;SACd,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,IAAI,EAAE,sBAAsB,CAAC,WAAW,EAAE;YAC5C,aAAa,EAAE,cAAc,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3H,GAAG,YAAY;SAClB,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,MAAM,CAAU,MAAM,CAAC,iBAAsB,EAAE,YAAoB,EAAE,KAAY,EAAE,OAAe;QACrG,OAAO,mBAAmB,CAAC,KAAK,CAC5B,GAAG,EAAE;YACD,OAAO,IAAI,kBAAkB,CACzB,iBAAiB,CAAC,IAAI,EACtB,iBAAiB,CAAC,QAAQ,EAC1B,iBAAiB,CAAC,kBAAkB,EACpC,YAAY,EACZ,iBAAiB,CAAC,wBAAwB,EAC1C,KAAK,CAAC,SAAS,EAAE,EACjB,iBAAiB,CAAC,WAAW,EAC7B,iBAAiB,CAAC,QAAQ,CAC7B,CAAC;QACN,CAAC,EACD,iBAAiB,EACjB,KAAK,EACL,OAAO,CACV,CAAC;IACN,CAAC;CACJ;AA5FG;IADC,SAAS,EAAE;4DAGX;AAUD;IADC,SAAS,EAAE;kDAGX;AAgFL,aAAa,CAAC,4BAA4B,EAAE,kBAAkB,CAAC,CAAC","sourcesContent":["import { Camera } from \"../Cameras/camera\";\r\nimport type { PostProcessOptions } from \"./postProcess\";\r\nimport { PostProcess } from \"./postProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { serialize } from \"../Misc/decorators\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport type { Nullable } from \"../types\";\r\n\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { ThinTonemapPostProcessOptions, TonemappingOperator } from \"./thinTonemapPostProcess\";\r\nimport { ThinTonemapPostProcess } from \"./thinTonemapPostProcess\";\r\nimport type { Scene } from \"../scene\";\r\n\r\nexport type ToneMapPostProcessOptions = ThinTonemapPostProcessOptions & PostProcessOptions;\r\n\r\n/**\r\n * Defines a post process to apply tone mapping\r\n */\r\nexport class TonemapPostProcess extends PostProcess {\r\n /**\r\n * Defines the required exposure adjustment\r\n */\r\n @serialize()\r\n public get exposureAdjustment() {\r\n return this._effectWrapper.exposureAdjustment;\r\n }\r\n\r\n public set exposureAdjustment(value: number) {\r\n this._effectWrapper.exposureAdjustment = value;\r\n }\r\n\r\n /**\r\n * Gets the operator used for tonemapping\r\n */\r\n @serialize()\r\n public get operator() {\r\n return this._effectWrapper.operator;\r\n }\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"TonemapPostProcess\" string\r\n */\r\n public override getClassName(): string {\r\n return \"TonemapPostProcess\";\r\n }\r\n\r\n protected override _effectWrapper: ThinTonemapPostProcess;\r\n\r\n /**\r\n * Creates a new TonemapPostProcess\r\n * @param name defines the name of the postprocess\r\n * @param operator defines the operator to use\r\n * @param exposureAdjustment defines the required exposure adjustment\r\n * @param camera defines the camera to use (can be null)\r\n * @param samplingMode defines the required sampling mode (BABYLON.Texture.BILINEAR_SAMPLINGMODE by default)\r\n * @param engine defines the hosting engine (can be ignore if camera is set)\r\n * @param textureType defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_BYTE by default)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n */\r\n constructor(\r\n name: string,\r\n operator: TonemappingOperator,\r\n exposureAdjustment: number,\r\n camera: Nullable<Camera> | ToneMapPostProcessOptions,\r\n samplingMode: number = Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine?: AbstractEngine,\r\n textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n reusable?: boolean\r\n ) {\r\n const cameraIsCamera = camera === null || camera instanceof Camera;\r\n\r\n const localOptions = {\r\n operator,\r\n exposureAdjustment,\r\n uniforms: ThinTonemapPostProcess.Uniforms,\r\n camera: cameraIsCamera ? camera : undefined,\r\n samplingMode,\r\n engine,\r\n reusable,\r\n textureType,\r\n };\r\n\r\n if (!cameraIsCamera) {\r\n Object.assign(localOptions, camera);\r\n }\r\n\r\n super(name, ThinTonemapPostProcess.FragmentUrl, {\r\n effectWrapper: cameraIsCamera || !camera.effectWrapper ? new ThinTonemapPostProcess(name, engine, localOptions) : undefined,\r\n ...localOptions,\r\n });\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static override _Parse(parsedPostProcess: any, targetCamera: Camera, scene: Scene, rootUrl: string): Nullable<TonemapPostProcess> {\r\n return SerializationHelper.Parse(\r\n () => {\r\n return new TonemapPostProcess(\r\n parsedPostProcess.name,\r\n parsedPostProcess.operator,\r\n parsedPostProcess.exposureAdjustment,\r\n targetCamera,\r\n parsedPostProcess.renderTargetSamplingMode,\r\n scene.getEngine(),\r\n parsedPostProcess.textureType,\r\n parsedPostProcess.reusable\r\n );\r\n },\r\n parsedPostProcess,\r\n scene,\r\n rootUrl\r\n );\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TonemapPostProcess\", TonemapPostProcess);\r\n"]}
@@ -414,8 +414,13 @@ export class GeometryBufferRenderer {
414
414
  return false;
415
415
  }
416
416
  const defines = [];
417
- const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];
417
+ const attribs = [VertexBuffer.PositionKind];
418
418
  const mesh = subMesh.getMesh();
419
+ const hasNormals = mesh.isVerticesDataPresent(VertexBuffer.NormalKind);
420
+ if (hasNormals) {
421
+ defines.push("#define HAS_NORMAL_ATTRIBUTE");
422
+ attribs.push(VertexBuffer.NormalKind);
423
+ }
419
424
  let uv1 = false;
420
425
  let uv2 = false;
421
426
  const color = false;