@galacean/engine-core 1.3.0-alpha.1 → 1.3.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -2994,6 +2994,51 @@ exports.RenderStateDataKey = void 0;
2994
2994
  StencilOperation[StencilOperation[/** Decrements the current stencil buffer value. Wraps stencil buffer value to the maximum representable unsigned value when decrementing a stencil buffer value of 0. */ "DecrementWrap"] = 7] = "DecrementWrap";
2995
2995
  })(exports.StencilOperation || (exports.StencilOperation = {}));
2996
2996
 
2997
+ exports.ShaderPlatformTarget = void 0;
2998
+ (function(ShaderPlatformTarget) {
2999
+ ShaderPlatformTarget[ShaderPlatformTarget["GLES100"] = 0] = "GLES100";
3000
+ ShaderPlatformTarget[ShaderPlatformTarget["GLES300"] = 1] = "GLES300";
3001
+ })(exports.ShaderPlatformTarget || (exports.ShaderPlatformTarget = {}));
3002
+
3003
+ function _array_like_to_array(arr, len) {
3004
+ if (len == null || len > arr.length) len = arr.length;
3005
+
3006
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
3007
+
3008
+ return arr2;
3009
+ }
3010
+
3011
+ function _unsupported_iterable_to_array(o, minLen) {
3012
+ if (!o) return;
3013
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
3014
+
3015
+ var n = Object.prototype.toString.call(o).slice(8, -1);
3016
+
3017
+ if (n === "Object" && o.constructor) n = o.constructor.name;
3018
+ if (n === "Map" || n === "Set") return Array.from(n);
3019
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
3020
+ }
3021
+
3022
+ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
3023
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
3024
+
3025
+ if (it) return (it = it.call(o)).next.bind(it);
3026
+ // Fallback for engines without symbol support
3027
+ if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") {
3028
+ if (it) o = it;
3029
+
3030
+ var i = 0;
3031
+
3032
+ return function() {
3033
+ if (i >= o.length) return { done: true };
3034
+
3035
+ return { done: false, value: o[i++] };
3036
+ };
3037
+ }
3038
+
3039
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
3040
+ }
3041
+
2997
3042
  /**
2998
3043
  * Shader macro。
2999
3044
  */ var ShaderMacro = /*#__PURE__*/ function() {
@@ -3023,14 +3068,14 @@ exports.RenderStateDataKey = void 0;
3023
3068
  maskMap.length++;
3024
3069
  maskMap[index] = new Array(32);
3025
3070
  }
3026
- maskMap[index][bit] = key;
3071
+ maskMap[index][bit] = macro;
3027
3072
  ShaderMacro._macroCounter++;
3028
3073
  }
3029
3074
  return macro;
3030
3075
  };
3031
3076
  /**
3032
3077
  * @internal
3033
- */ ShaderMacro._getNamesByMacros = function _getNamesByMacros(macros, out) {
3078
+ */ ShaderMacro._getMacrosElements = function _getMacrosElements(macros, out) {
3034
3079
  var maskMap = ShaderMacro._macroMaskMap;
3035
3080
  var mask = macros._mask;
3036
3081
  out.length = 0;
@@ -3213,15 +3258,6 @@ exports.RenderStateDataKey = void 0;
3213
3258
  return ShaderMacroCollection;
3214
3259
  }();
3215
3260
 
3216
- /**
3217
- * Pipeline stage.
3218
- */ exports.PipelineStage = void 0;
3219
- (function(PipelineStage) {
3220
- PipelineStage[/** DepthOnly stage. */ "DepthOnly"] = "DepthOnly";
3221
- PipelineStage[/** Shadow caster stage. */ "ShadowCaster"] = "ShadowCaster";
3222
- PipelineStage[/** Forward shading stage. */ "Forward"] = "Forward";
3223
- })(exports.PipelineStage || (exports.PipelineStage = {}));
3224
-
3225
3261
  function _extends() {
3226
3262
  _extends = Object.assign || function assign(target) {
3227
3263
  for (var i = 1; i < arguments.length; i++) {
@@ -3235,9 +3271,18 @@ function _extends() {
3235
3271
  return _extends.apply(this, arguments);
3236
3272
  }
3237
3273
 
3274
+ /**
3275
+ * Pipeline stage.
3276
+ */ exports.PipelineStage = void 0;
3277
+ (function(PipelineStage) {
3278
+ PipelineStage[/** DepthOnly stage. */ "DepthOnly"] = "DepthOnly";
3279
+ PipelineStage[/** Shadow caster stage. */ "ShadowCaster"] = "ShadowCaster";
3280
+ PipelineStage[/** Forward shading stage. */ "Forward"] = "Forward";
3281
+ })(exports.PipelineStage || (exports.PipelineStage = {}));
3282
+
3238
3283
  var camera_declare = "#define GLSLIFY 1\nuniform vec3 camera_Position;uniform vec3 camera_Forward;uniform vec4 camera_ProjectionParams;"; // eslint-disable-line
3239
3284
 
3240
- var common = "#define GLSLIFY 1\n#define PI 3.14159265359\n#define RECIPROCAL_PI 0.31830988618\n#define EPSILON 1e-6\n#define LOG2 1.442695\n#define saturate( a ) clamp( a, 0.0, 1.0 )\nfloat pow2(float x){return x*x;}vec4 RGBMToLinear(vec4 value,float maxRange){return vec4(value.rgb*value.a*maxRange,1.0);}vec4 gammaToLinear(vec4 srgbIn){return vec4(pow(srgbIn.rgb,vec3(2.2)),srgbIn.a);}vec4 linearToGamma(vec4 linearIn){return vec4(pow(linearIn.rgb,vec3(1.0/2.2)),linearIn.a);}uniform vec4 camera_DepthBufferParams;float remapDepthBufferLinear01(float z){return 1.0/(camera_DepthBufferParams.x*z+camera_DepthBufferParams.y);}\n#ifdef GRAPHICS_API_WEBGL2\n#define INVERSE_MAT(mat) inverse(mat)\n#else\nmat2 inverseMat(mat2 m){return mat2(m[1][1],-m[0][1],-m[1][0],m[0][0])/(m[0][0]*m[1][1]-m[0][1]*m[1][0]);}mat3 inverseMat(mat3 m){float a00=m[0][0],a01=m[0][1],a02=m[0][2];float a10=m[1][0],a11=m[1][1],a12=m[1][2];float a20=m[2][0],a21=m[2][1],a22=m[2][2];float b01=a22*a11-a12*a21;float b11=-a22*a10+a12*a20;float b21=a21*a10-a11*a20;float det=a00*b01+a01*b11+a02*b21;return mat3(b01,(-a22*a01+a02*a21),(a12*a01-a02*a11),b11,(a22*a00-a02*a20),(-a12*a00+a02*a10),b21,(-a21*a00+a01*a20),(a11*a00-a01*a10))/det;}mat4 inverseMat(mat4 m){float a00=m[0][0],a01=m[0][1],a02=m[0][2],a03=m[0][3],a10=m[1][0],a11=m[1][1],a12=m[1][2],a13=m[1][3],a20=m[2][0],a21=m[2][1],a22=m[2][2],a23=m[2][3],a30=m[3][0],a31=m[3][1],a32=m[3][2],a33=m[3][3],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;return mat4(a11*b11-a12*b10+a13*b09,a02*b10-a01*b11-a03*b09,a31*b05-a32*b04+a33*b03,a22*b04-a21*b05-a23*b03,a12*b08-a10*b11-a13*b07,a00*b11-a02*b08+a03*b07,a32*b02-a30*b05-a33*b01,a20*b05-a22*b02+a23*b01,a10*b10-a11*b08+a13*b06,a01*b08-a00*b10-a03*b06,a30*b04-a31*b02+a33*b00,a21*b02-a20*b04-a23*b00,a11*b07-a10*b09-a12*b06,a00*b09-a01*b07+a02*b06,a31*b01-a30*b03-a32*b00,a20*b03-a21*b01+a22*b00)/det;}\n#define INVERSE_MAT(mat) inverseMat(mat)\n#endif\n"; // eslint-disable-line
3285
+ var common = "#define GLSLIFY 1\n#define PI 3.14159265359\n#define RECIPROCAL_PI 0.31830988618\n#define EPSILON 1e-6\n#define LOG2 1.442695\n#define saturate( a ) clamp( a, 0.0, 1.0 )\nfloat pow2(float x){return x*x;}vec4 RGBMToLinear(vec4 value,float maxRange){return vec4(value.rgb*value.a*maxRange,1.0);}vec4 gammaToLinear(vec4 srgbIn){return vec4(pow(srgbIn.rgb,vec3(2.2)),srgbIn.a);}vec4 linearToGamma(vec4 linearIn){linearIn=max(linearIn,0.0);return vec4(pow(linearIn.rgb,vec3(1.0/2.2)),linearIn.a);}uniform vec4 camera_DepthBufferParams;float remapDepthBufferLinear01(float z){return 1.0/(camera_DepthBufferParams.x*z+camera_DepthBufferParams.y);}\n#ifdef GRAPHICS_API_WEBGL2\n#define INVERSE_MAT(mat) inverse(mat)\n#else\nmat2 inverseMat(mat2 m){return mat2(m[1][1],-m[0][1],-m[1][0],m[0][0])/(m[0][0]*m[1][1]-m[0][1]*m[1][0]);}mat3 inverseMat(mat3 m){float a00=m[0][0],a01=m[0][1],a02=m[0][2];float a10=m[1][0],a11=m[1][1],a12=m[1][2];float a20=m[2][0],a21=m[2][1],a22=m[2][2];float b01=a22*a11-a12*a21;float b11=-a22*a10+a12*a20;float b21=a21*a10-a11*a20;float det=a00*b01+a01*b11+a02*b21;return mat3(b01,(-a22*a01+a02*a21),(a12*a01-a02*a11),b11,(a22*a00-a02*a20),(-a12*a00+a02*a10),b21,(-a21*a00+a01*a20),(a11*a00-a01*a10))/det;}mat4 inverseMat(mat4 m){float a00=m[0][0],a01=m[0][1],a02=m[0][2],a03=m[0][3],a10=m[1][0],a11=m[1][1],a12=m[1][2],a13=m[1][3],a20=m[2][0],a21=m[2][1],a22=m[2][2],a23=m[2][3],a30=m[3][0],a31=m[3][1],a32=m[3][2],a33=m[3][3],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;return mat4(a11*b11-a12*b10+a13*b09,a02*b10-a01*b11-a03*b09,a31*b05-a32*b04+a33*b03,a22*b04-a21*b05-a23*b03,a12*b08-a10*b11-a13*b07,a00*b11-a02*b08+a03*b07,a32*b02-a30*b05-a33*b01,a20*b05-a22*b02+a23*b01,a10*b10-a11*b08+a13*b06,a01*b08-a00*b10-a03*b06,a30*b04-a31*b02+a33*b00,a21*b02-a20*b04-a23*b00,a11*b07-a10*b09-a12*b06,a00*b09-a01*b07+a02*b06,a31*b01-a30*b03-a32*b00,a20*b03-a21*b01+a22*b00)/det;}\n#define INVERSE_MAT(mat) inverseMat(mat)\n#endif\n"; // eslint-disable-line
3241
3286
 
3242
3287
  var common_vert = "#define GLSLIFY 1\nattribute vec3 POSITION;\n#ifdef RENDERER_HAS_UV\nattribute vec2 TEXCOORD_0;\n#endif\n#ifdef RENDERER_HAS_UV1\nattribute vec2 TEXCOORD_1;\n#endif\n#ifdef RENDERER_HAS_SKIN\nattribute vec4 JOINTS_0;attribute vec4 WEIGHTS_0;\n#ifdef RENDERER_USE_JOINT_TEXTURE\nuniform sampler2D renderer_JointSampler;uniform float renderer_JointCount;mat4 getJointMatrix(sampler2D smp,float index){float base=index/renderer_JointCount;float hf=0.5/renderer_JointCount;float v=base+hf;vec4 m0=texture2D(smp,vec2(0.125,v));vec4 m1=texture2D(smp,vec2(0.375,v));vec4 m2=texture2D(smp,vec2(0.625,v));vec4 m3=texture2D(smp,vec2(0.875,v));return mat4(m0,m1,m2,m3);}\n#else\nuniform mat4 renderer_JointMatrix[RENDERER_JOINTS_NUM];\n#endif\n#endif\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nattribute vec4 COLOR_0;\n#endif\n#include <transform_declare>\n#include <camera_declare>\nuniform vec4 material_TilingOffset;\n#ifndef MATERIAL_OMIT_NORMAL\n#ifdef RENDERER_HAS_NORMAL\nattribute vec3 NORMAL;\n#endif\n#ifdef RENDERER_HAS_TANGENT\nattribute vec4 TANGENT;\n#endif\n#endif\n"; // eslint-disable-line
3243
3288
 
@@ -3450,7 +3495,7 @@ var ShaderFactory = /*#__PURE__*/ function() {
3450
3495
  function ShaderFactory() {}
3451
3496
  ShaderFactory.parseCustomMacros = function parseCustomMacros(macros) {
3452
3497
  return macros.map(function(m) {
3453
- return "#define " + m + "\n";
3498
+ return "#define " + (m.value ? m.name + " " + m.value : m.name) + "\n";
3454
3499
  }).join("");
3455
3500
  };
3456
3501
  ShaderFactory.registerInclude = function registerInclude(includeName, includeSource) {
@@ -4235,29 +4280,50 @@ var ShaderFactory = /*#__PURE__*/ function() {
4235
4280
  ShaderProgram._counter = 0;
4236
4281
  })();
4237
4282
 
4283
+ /**
4284
+ * @internal
4285
+ * Shader pass type
4286
+ */ var ShaderType;
4287
+ (function(ShaderType) {
4288
+ ShaderType[ShaderType[/** init by glsl */ "Canonical"] = 0] = "Canonical";
4289
+ ShaderType[ShaderType[/** init by shader-lab */ "ShaderLab"] = 1] = "ShaderLab";
4290
+ })(ShaderType || (ShaderType = {}));
4291
+
4238
4292
  /**
4239
4293
  * Shader pass containing vertex and fragment source.
4240
4294
  */ var ShaderPass = /*#__PURE__*/ function(ShaderPart1) {
4241
4295
  _inherits(ShaderPass, ShaderPart1);
4242
- function ShaderPass(nameOrVertexSource, vertexSourceOrFragmentSource, fragmentSourceOrTags, tags) {
4296
+ function ShaderPass(nameOrVertexSource, vertexSourceOrFragmentSourceOrCode, fragmentSourceOrTagsOrVertexEntry, fragmentEntryOrTags, tags) {
4243
4297
  var _this;
4244
4298
  _this = ShaderPart1.call(this) || this;
4245
4299
  /** @internal */ _this._shaderPassId = 0;
4246
4300
  /** @internal */ _this._renderStateDataMap = {};
4247
4301
  /** @internal */ _this._shaderProgramPools = [];
4302
+ /** @internal */ _this._path = "";
4303
+ _this._platformMacros = [];
4248
4304
  _this._shaderPassId = ShaderPass._shaderPassCounter++;
4249
- if (typeof fragmentSourceOrTags === "string") {
4305
+ _this._type = ShaderType.Canonical;
4306
+ if (typeof fragmentEntryOrTags === "string") {
4250
4307
  _this._name = nameOrVertexSource;
4251
- _this._vertexSource = vertexSourceOrFragmentSource;
4252
- _this._fragmentSource = fragmentSourceOrTags;
4253
- tags = tags != null ? tags : {
4308
+ _this._shaderLabSource = vertexSourceOrFragmentSourceOrCode;
4309
+ _this._vertexEntry = fragmentSourceOrTagsOrVertexEntry;
4310
+ _this._fragmentEntry = fragmentEntryOrTags;
4311
+ tags = _extends({
4312
+ pipelineStage: exports.PipelineStage.Forward
4313
+ }, tags);
4314
+ _this._type = ShaderType.ShaderLab;
4315
+ } else if (typeof fragmentSourceOrTagsOrVertexEntry === "string") {
4316
+ _this._name = nameOrVertexSource;
4317
+ _this._vertexSource = vertexSourceOrFragmentSourceOrCode;
4318
+ _this._fragmentSource = fragmentSourceOrTagsOrVertexEntry;
4319
+ tags = fragmentEntryOrTags != null ? fragmentEntryOrTags : {
4254
4320
  pipelineStage: exports.PipelineStage.Forward
4255
4321
  };
4256
4322
  } else {
4257
4323
  _this._name = "Default";
4258
4324
  _this._vertexSource = nameOrVertexSource;
4259
- _this._fragmentSource = vertexSourceOrFragmentSource;
4260
- tags = fragmentSourceOrTags != null ? fragmentSourceOrTags : {
4325
+ _this._fragmentSource = vertexSourceOrFragmentSourceOrCode;
4326
+ tags = fragmentSourceOrTagsOrVertexEntry != null ? fragmentSourceOrTagsOrVertexEntry : {
4261
4327
  pipelineStage: exports.PipelineStage.Forward
4262
4328
  };
4263
4329
  }
@@ -4275,9 +4341,52 @@ var ShaderFactory = /*#__PURE__*/ function() {
4275
4341
  if (shaderProgram) {
4276
4342
  return shaderProgram;
4277
4343
  }
4344
+ if (this._type === ShaderType.Canonical) {
4345
+ shaderProgram = this._getCanonicalShaderProgram(engine, macroCollection);
4346
+ } else {
4347
+ shaderProgram = this._compileShaderProgram(engine, macroCollection, this._vertexEntry, this._fragmentEntry);
4348
+ }
4349
+ shaderProgramPool.cache(shaderProgram);
4350
+ return shaderProgram;
4351
+ };
4352
+ /**
4353
+ * @internal
4354
+ */ _proto._destroy = function _destroy() {
4355
+ var shaderProgramPools = this._shaderProgramPools;
4356
+ for(var i = 0, n = shaderProgramPools.length; i < n; i++){
4357
+ shaderProgramPools[i]._destroy();
4358
+ }
4359
+ shaderProgramPools.length = 0;
4360
+ };
4361
+ /**
4362
+ * Shader Lab compilation
4363
+ */ _proto._compileShaderProgram = function _compileShaderProgram(engine, macroCollection, vertexEntry, fragmentEntry) {
4364
+ var _this = this, path = _this._path, platformMacros = _this._platformMacros;
4278
4365
  var isWebGL2 = engine._hardwareRenderer.isWebGL2;
4279
- var macroNameList = [];
4280
- ShaderMacro._getNamesByMacros(macroCollection, macroNameList);
4366
+ var macros = new Array();
4367
+ ShaderMacro._getMacrosElements(macroCollection, macros);
4368
+ platformMacros.length = 0;
4369
+ if (engine._hardwareRenderer.canIUse(exports.GLCapabilityType.shaderTextureLod)) {
4370
+ platformMacros.push("HAS_TEX_LOD");
4371
+ }
4372
+ if (engine._hardwareRenderer.canIUse(exports.GLCapabilityType.standardDerivatives)) {
4373
+ platformMacros.push("HAS_DERIVATIVES");
4374
+ }
4375
+ if (isWebGL2) {
4376
+ platformMacros.push("GRAPHICS_API_WEBGL2");
4377
+ } else {
4378
+ platformMacros.push("GRAPHICS_API_WEBGL1");
4379
+ }
4380
+ var start = performance.now();
4381
+ var _Shader__shaderLab__parseShaderPass = Shader._shaderLab._parseShaderPass(this._shaderLabSource, vertexEntry, fragmentEntry, macros, isWebGL2 ? exports.ShaderPlatformTarget.GLES300 : exports.ShaderPlatformTarget.GLES100, platformMacros, new URL(path, ShaderPass._shaderRootPath).href), vertex = _Shader__shaderLab__parseShaderPass.vertex, fragment = _Shader__shaderLab__parseShaderPass.fragment;
4382
+ Logger.info("[ShaderLab compilation] cost time: " + (performance.now() - start) + "ms");
4383
+ return new ShaderProgram(engine, vertex, fragment);
4384
+ };
4385
+ // TODO: remove it after migrate all shader to `ShaderLab`.
4386
+ _proto._getCanonicalShaderProgram = function _getCanonicalShaderProgram(engine, macroCollection) {
4387
+ var isWebGL2 = engine._hardwareRenderer.isWebGL2;
4388
+ var macroNameList = new Array();
4389
+ ShaderMacro._getMacrosElements(macroCollection, macroNameList);
4281
4390
  var macroNameStr = ShaderFactory.parseCustomMacros(macroNameList);
4282
4391
  var versionStr = isWebGL2 ? "#version 300 es" : "#version 100";
4283
4392
  var graphicAPI = isWebGL2 ? "#define GRAPHICS_API_WEBGL2" : "#define GRAPHICS_API_WEBGL1";
@@ -4294,24 +4403,17 @@ var ShaderFactory = /*#__PURE__*/ function() {
4294
4403
  vertexSource = ShaderFactory.convertTo300(vertexSource);
4295
4404
  fragmentSource = ShaderFactory.convertTo300(fragmentSource, true);
4296
4405
  }
4297
- shaderProgram = new ShaderProgram(engine, vertexSource, fragmentSource);
4298
- shaderProgramPool.cache(shaderProgram);
4406
+ var shaderProgram = new ShaderProgram(engine, vertexSource, fragmentSource);
4299
4407
  return shaderProgram;
4300
4408
  };
4301
- /**
4302
- * @internal
4303
- */ _proto._destroy = function _destroy() {
4304
- var shaderProgramPools = this._shaderProgramPools;
4305
- for(var i = 0, n = shaderProgramPools.length; i < n; i++){
4306
- shaderProgramPools[i]._destroy();
4307
- }
4308
- shaderProgramPools.length = 0;
4309
- };
4310
4409
  return ShaderPass;
4311
4410
  }(ShaderPart);
4312
4411
  (function() {
4313
4412
  ShaderPass._shaderPassCounter = 0;
4314
4413
  })();
4414
+ (function() {
4415
+ /** @internal */ ShaderPass._shaderRootPath = "shaders://root/";
4416
+ })();
4315
4417
 
4316
4418
  /**
4317
4419
  * Sub shader.
@@ -4948,6 +5050,18 @@ __decorate([
4948
5050
  }
4949
5051
  var _proto = Shader.prototype;
4950
5052
  /**
5053
+ * @internal
5054
+ * path should follow the specifications of [URL.origin](https://developer.mozilla.org/en-US/docs/Web/API/URL/origin), like: `shaders://root/`
5055
+ */ _proto._registerPath = function _registerPath(path) {
5056
+ for(var _iterator = _create_for_of_iterator_helper_loose(this._subShaders), _step; !(_step = _iterator()).done;){
5057
+ var subShader = _step.value;
5058
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(subShader.passes), _step1; !(_step1 = _iterator1()).done;){
5059
+ var shaderPass = _step1.value;
5060
+ shaderPass._path = path;
5061
+ }
5062
+ }
5063
+ };
5064
+ /**
4951
5065
  * Compile shader variant by macro name list.
4952
5066
  *
4953
5067
  * @remarks
@@ -5010,45 +5124,44 @@ __decorate([
5010
5124
  if (!Shader._shaderLab) {
5011
5125
  throw "ShaderLab has not been set up yet.";
5012
5126
  }
5013
- var shaderInfo = Shader._shaderLab.parseShader(nameOrShaderSource);
5014
- if (shaderMap[shaderInfo.name]) {
5015
- console.error('Shader named "' + shaderInfo.name + '" already exists.');
5127
+ var shaderContent = Shader._shaderLab._parseShaderContent(nameOrShaderSource);
5128
+ if (shaderMap[shaderContent.name]) {
5129
+ console.error('Shader named "' + shaderContent.name + '" already exists.');
5016
5130
  return;
5017
5131
  }
5018
- var subShaderList = shaderInfo.subShaders.map(function(subShaderInfo) {
5019
- var passList = subShaderInfo.passes.map(function(passInfo) {
5020
- if (typeof passInfo === "string") {
5132
+ var subShaderList = shaderContent.subShaders.map(function(subShaderContent) {
5133
+ var passList = subShaderContent.passes.map(function(passInfo) {
5134
+ if (passInfo.isUsePass) {
5021
5135
  var _Shader_find_subShaders_find, _Shader_find;
5022
5136
  // Use pass reference
5023
- var paths = passInfo.split("/");
5137
+ var paths = passInfo.name.split("/");
5024
5138
  return (_Shader_find = Shader.find(paths[0])) == null ? void 0 : (_Shader_find_subShaders_find = _Shader_find.subShaders.find(function(subShader) {
5025
5139
  return subShader.name === paths[1];
5026
5140
  })) == null ? void 0 : _Shader_find_subShaders_find.passes.find(function(pass) {
5027
5141
  return pass.name === paths[2];
5028
5142
  });
5029
5143
  }
5030
- var shaderPass = new ShaderPass(passInfo.name, passInfo.vertexSource, passInfo.fragmentSource, passInfo.tags);
5144
+ var shaderPassContent = new ShaderPass(passInfo.name, passInfo.contents, passInfo.vertexEntry, passInfo.fragmentEntry, passInfo.tags);
5031
5145
  var renderStates = passInfo.renderStates;
5032
5146
  var renderState = new RenderState();
5033
- shaderPass._renderState = renderState;
5147
+ shaderPassContent._renderState = renderState;
5034
5148
  // Parse const render state
5035
- var constRenderStateInfo = renderStates[0];
5036
- for(var k in constRenderStateInfo){
5037
- Shader._applyConstRenderStates(renderState, parseInt(k), constRenderStateInfo[k]);
5149
+ var constantMap = renderStates.constantMap, variableMap = renderStates.variableMap;
5150
+ for(var k in constantMap){
5151
+ Shader._applyConstRenderStates(renderState, parseInt(k), constantMap[k]);
5038
5152
  }
5039
5153
  // Parse variable render state
5040
- var variableRenderStateInfo = renderStates[1];
5041
5154
  var renderStateDataMap = {};
5042
- for(var k1 in variableRenderStateInfo){
5043
- renderStateDataMap[k1] = ShaderProperty.getByName(variableRenderStateInfo[k1]);
5155
+ for(var k1 in variableMap){
5156
+ renderStateDataMap[k1] = ShaderProperty.getByName(variableMap[k1]);
5044
5157
  }
5045
- shaderPass._renderStateDataMap = renderStateDataMap;
5046
- return shaderPass;
5158
+ shaderPassContent._renderStateDataMap = renderStateDataMap;
5159
+ return shaderPassContent;
5047
5160
  });
5048
- return new SubShader(shaderInfo.name, passList, subShaderInfo.tags);
5161
+ return new SubShader(subShaderContent.name, passList, subShaderContent.tags);
5049
5162
  });
5050
- shader = new Shader(shaderInfo.name, subShaderList);
5051
- shaderMap[shaderInfo.name] = shader;
5163
+ shader = new Shader(shaderContent.name, subShaderList);
5164
+ shaderMap[shaderContent.name] = shader;
5052
5165
  return shader;
5053
5166
  } else {
5054
5167
  if (shaderMap[nameOrShaderSource]) {
@@ -8138,6 +8251,14 @@ var /**
8138
8251
  MSAASamples[MSAASamples[/** Multi-sample anti-aliasing with 8 samples. */ "EightX"] = 8] = "EightX";
8139
8252
  })(exports.MSAASamples || (exports.MSAASamples = {}));
8140
8253
 
8254
+ /**
8255
+ * The strategy to use when a shader replacement fails.
8256
+ */ exports.ReplacementFailureStrategy = void 0;
8257
+ (function(ReplacementFailureStrategy) {
8258
+ ReplacementFailureStrategy[ReplacementFailureStrategy[/** Keep the original shader. */ "KeepOriginalShader"] = 0] = "KeepOriginalShader";
8259
+ ReplacementFailureStrategy[ReplacementFailureStrategy[/** Do not render. */ "DoNotRender"] = 1] = "DoNotRender";
8260
+ })(exports.ReplacementFailureStrategy || (exports.ReplacementFailureStrategy = {}));
8261
+
8141
8262
  var _Camera;
8142
8263
  var MathTemp = function MathTemp() {
8143
8264
  };
@@ -8187,6 +8308,7 @@ exports.Camera = (_Camera = /*#__PURE__*/ function(Component1) {
8187
8308
  /** @internal */ _this._virtualCamera = new VirtualCamera();
8188
8309
  /** @internal */ _this._replacementShader = null;
8189
8310
  /** @internal */ _this._replacementSubShaderTag = null;
8311
+ /** @internal */ _this._replacementFailureStrategy = null;
8190
8312
  /** @internal */ _this._cameraIndex = -1;
8191
8313
  _this._priority = 0;
8192
8314
  _this._shaderData = new ShaderData(ShaderDataGroup.Camera);
@@ -8366,6 +8488,7 @@ exports.Camera = (_Camera = /*#__PURE__*/ function(Component1) {
8366
8488
  context.virtualCamera = virtualCamera;
8367
8489
  context.replacementShader = this._replacementShader;
8368
8490
  context.replacementTag = this._replacementSubShaderTag;
8491
+ context.replacementFailureStrategy = this._replacementFailureStrategy;
8369
8492
  // compute cull frustum.
8370
8493
  if (this.enableFrustumCulling && this._frustumChangeFlag.flag) {
8371
8494
  this._frustum.calculateFromMatrix(virtualCamera.viewProjectionMatrix);
@@ -8385,15 +8508,18 @@ exports.Camera = (_Camera = /*#__PURE__*/ function(Component1) {
8385
8508
  this._renderPipeline.render(context, cubeFace, mipLevel, clearMask);
8386
8509
  this._engine._renderCount++;
8387
8510
  };
8388
- _proto.setReplacementShader = function setReplacementShader(shader, replacementTag) {
8511
+ _proto.setReplacementShader = function setReplacementShader(shader, replacementTag, failureStrategy) {
8512
+ if (failureStrategy === void 0) failureStrategy = exports.ReplacementFailureStrategy.KeepOriginalShader;
8389
8513
  this._replacementShader = shader;
8390
8514
  this._replacementSubShaderTag = typeof replacementTag === "string" ? ShaderTagKey.getByName(replacementTag) : replacementTag;
8515
+ this._replacementFailureStrategy = failureStrategy;
8391
8516
  };
8392
8517
  /**
8393
8518
  * Reset and clear the replacement shader.
8394
8519
  */ _proto.resetReplacementShader = function resetReplacementShader() {
8395
8520
  this._replacementShader = null;
8396
8521
  this._replacementSubShaderTag = null;
8522
+ this._replacementFailureStrategy = null;
8397
8523
  };
8398
8524
  /**
8399
8525
  * @inheritdoc
@@ -8507,7 +8633,7 @@ exports.Camera = (_Camera = /*#__PURE__*/ function(Component1) {
8507
8633
  this._checkMainCanvasAntialiasWaste();
8508
8634
  };
8509
8635
  _proto._checkMainCanvasAntialiasWaste = function _checkMainCanvasAntialiasWaste() {
8510
- if (this.independentCanvasEnabled && engineMath.Vector4.equals(this._viewport, PipelineUtils.defaultViewport)) {
8636
+ if (this._phasedActiveInScene && this.independentCanvasEnabled && engineMath.Vector4.equals(this._viewport, PipelineUtils.defaultViewport)) {
8511
8637
  Logger.warn("Camera use independent canvas and viewport cover the whole screen, it is recommended to disable antialias, depth and stencil to save memory when create engine.");
8512
8638
  }
8513
8639
  };
@@ -10201,6 +10327,7 @@ var /**
10201
10327
  break;
10202
10328
  }
10203
10329
  }
10330
+ context.replacementFailureStrategy === exports.ReplacementFailureStrategy.KeepOriginalShader && this.pushRenderElementByType(renderElement, subRenderElement, materialSubShader.passes, renderStates);
10204
10331
  } else {
10205
10332
  this.pushRenderElementByType(renderElement, subRenderElement, replacementSubShaders[0].passes, renderStates);
10206
10333
  }
@@ -23345,7 +23472,7 @@ ShaderPool.init();
23345
23472
  */ _proto._initialize = function _initialize(configuration) {
23346
23473
  var _this = this;
23347
23474
  var shaderLab = configuration.shaderLab, physics = configuration.physics;
23348
- if (shaderLab) {
23475
+ if (shaderLab && !Shader._shaderLab) {
23349
23476
  Shader._shaderLab = shaderLab;
23350
23477
  }
23351
23478
  var initializePromises = new Array();
@@ -24352,9 +24479,9 @@ ShaderPool.init();
24352
24479
  /** Shadow bias.*/ _this.shadowBias = 1;
24353
24480
  /** Shadow mapping normal-based bias. */ _this.shadowNormalBias = 1;
24354
24481
  /** Near plane value to use for shadow frustums. */ _this.shadowNearPlane = 0.1;
24355
- /** Shadow intensity, the larger the value, the clearer and darker the shadow. */ _this.shadowStrength = 1.0;
24356
24482
  /** @internal */ _this._lightIndex = -1;
24357
24483
  /** @internal */ _this._lightColor = new engineMath.Color();
24484
+ _this._shadowStrength = 1.0;
24358
24485
  _this._color = new engineMath.Color(1, 1, 1, 1);
24359
24486
  return _this;
24360
24487
  }
@@ -24370,6 +24497,15 @@ ShaderPool.init();
24370
24497
  return this._lightColor;
24371
24498
  };
24372
24499
  _create_class(Light, [
24500
+ {
24501
+ key: "shadowStrength",
24502
+ get: /** Shadow intensity, the larger the value, the clearer and darker the shadow, range [0,1]. */ function get() {
24503
+ return this._shadowStrength;
24504
+ },
24505
+ set: function set(value) {
24506
+ this._shadowStrength = engineMath.MathUtil.clamp(value, 0, 1);
24507
+ }
24508
+ },
24373
24509
  {
24374
24510
  key: "color",
24375
24511
  get: /**
@@ -25085,7 +25221,7 @@ var BloomEffect = /*#__PURE__*/ function() {
25085
25221
  return this._scatter;
25086
25222
  },
25087
25223
  set: function set(value) {
25088
- value = Math.min(Math.max(0, value), 1);
25224
+ value = engineMath.MathUtil.clamp(value, 0, 1);
25089
25225
  if (value !== this._scatter) {
25090
25226
  this._scatter = value;
25091
25227
  var params = this._bloomMaterial.shaderData.getVector4(BloomEffect._bloomParams);
@@ -25284,6 +25420,9 @@ var TonemappingEffect = /*#__PURE__*/ function() {
25284
25420
  */ var _PostProcessManager = /*#__PURE__*/ function() {
25285
25421
  function _PostProcessManager(scene) {
25286
25422
  this.scene = scene;
25423
+ this./**
25424
+ * Whether the post process manager is active.
25425
+ */ isActive = true;
25287
25426
  var uberShader = Shader.find(_PostProcessManager.UBER_SHADER_NAME);
25288
25427
  var uberMaterial = new Material(scene.engine, uberShader);
25289
25428
  var depthState = uberMaterial.renderState.depthState;
@@ -25317,7 +25456,7 @@ var TonemappingEffect = /*#__PURE__*/ function() {
25317
25456
  get: /**
25318
25457
  * Whether has active post process effect.
25319
25458
  */ function get() {
25320
- return this._bloomEffect.enabled || this._tonemappingEffect.enabled;
25459
+ return this.isActive && (this._bloomEffect.enabled || this._tonemappingEffect.enabled);
25321
25460
  }
25322
25461
  }
25323
25462
  ]);