@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/module.js CHANGED
@@ -2990,6 +2990,51 @@ var RenderStateElementKey;
2990
2990
  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";
2991
2991
  })(StencilOperation || (StencilOperation = {}));
2992
2992
 
2993
+ var ShaderPlatformTarget;
2994
+ (function(ShaderPlatformTarget) {
2995
+ ShaderPlatformTarget[ShaderPlatformTarget["GLES100"] = 0] = "GLES100";
2996
+ ShaderPlatformTarget[ShaderPlatformTarget["GLES300"] = 1] = "GLES300";
2997
+ })(ShaderPlatformTarget || (ShaderPlatformTarget = {}));
2998
+
2999
+ function _array_like_to_array(arr, len) {
3000
+ if (len == null || len > arr.length) len = arr.length;
3001
+
3002
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
3003
+
3004
+ return arr2;
3005
+ }
3006
+
3007
+ function _unsupported_iterable_to_array(o, minLen) {
3008
+ if (!o) return;
3009
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
3010
+
3011
+ var n = Object.prototype.toString.call(o).slice(8, -1);
3012
+
3013
+ if (n === "Object" && o.constructor) n = o.constructor.name;
3014
+ if (n === "Map" || n === "Set") return Array.from(n);
3015
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
3016
+ }
3017
+
3018
+ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
3019
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
3020
+
3021
+ if (it) return (it = it.call(o)).next.bind(it);
3022
+ // Fallback for engines without symbol support
3023
+ if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") {
3024
+ if (it) o = it;
3025
+
3026
+ var i = 0;
3027
+
3028
+ return function() {
3029
+ if (i >= o.length) return { done: true };
3030
+
3031
+ return { done: false, value: o[i++] };
3032
+ };
3033
+ }
3034
+
3035
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
3036
+ }
3037
+
2993
3038
  /**
2994
3039
  * Shader macro。
2995
3040
  */ var ShaderMacro = /*#__PURE__*/ function() {
@@ -3019,14 +3064,14 @@ var RenderStateElementKey;
3019
3064
  maskMap.length++;
3020
3065
  maskMap[index] = new Array(32);
3021
3066
  }
3022
- maskMap[index][bit] = key;
3067
+ maskMap[index][bit] = macro;
3023
3068
  ShaderMacro._macroCounter++;
3024
3069
  }
3025
3070
  return macro;
3026
3071
  };
3027
3072
  /**
3028
3073
  * @internal
3029
- */ ShaderMacro._getNamesByMacros = function _getNamesByMacros(macros, out) {
3074
+ */ ShaderMacro._getMacrosElements = function _getMacrosElements(macros, out) {
3030
3075
  var maskMap = ShaderMacro._macroMaskMap;
3031
3076
  var mask = macros._mask;
3032
3077
  out.length = 0;
@@ -3209,15 +3254,6 @@ var RenderStateElementKey;
3209
3254
  return ShaderMacroCollection;
3210
3255
  }();
3211
3256
 
3212
- /**
3213
- * Pipeline stage.
3214
- */ var PipelineStage;
3215
- (function(PipelineStage) {
3216
- PipelineStage[/** DepthOnly stage. */ "DepthOnly"] = "DepthOnly";
3217
- PipelineStage[/** Shadow caster stage. */ "ShadowCaster"] = "ShadowCaster";
3218
- PipelineStage[/** Forward shading stage. */ "Forward"] = "Forward";
3219
- })(PipelineStage || (PipelineStage = {}));
3220
-
3221
3257
  function _extends() {
3222
3258
  _extends = Object.assign || function assign(target) {
3223
3259
  for (var i = 1; i < arguments.length; i++) {
@@ -3231,9 +3267,18 @@ function _extends() {
3231
3267
  return _extends.apply(this, arguments);
3232
3268
  }
3233
3269
 
3270
+ /**
3271
+ * Pipeline stage.
3272
+ */ var PipelineStage;
3273
+ (function(PipelineStage) {
3274
+ PipelineStage[/** DepthOnly stage. */ "DepthOnly"] = "DepthOnly";
3275
+ PipelineStage[/** Shadow caster stage. */ "ShadowCaster"] = "ShadowCaster";
3276
+ PipelineStage[/** Forward shading stage. */ "Forward"] = "Forward";
3277
+ })(PipelineStage || (PipelineStage = {}));
3278
+
3234
3279
  var camera_declare = "#define GLSLIFY 1\nuniform vec3 camera_Position;uniform vec3 camera_Forward;uniform vec4 camera_ProjectionParams;"; // eslint-disable-line
3235
3280
 
3236
- 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
3281
+ 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
3237
3282
 
3238
3283
  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
3239
3284
 
@@ -3446,7 +3491,7 @@ var ShaderFactory = /*#__PURE__*/ function() {
3446
3491
  function ShaderFactory() {}
3447
3492
  ShaderFactory.parseCustomMacros = function parseCustomMacros(macros) {
3448
3493
  return macros.map(function(m) {
3449
- return "#define " + m + "\n";
3494
+ return "#define " + (m.value ? m.name + " " + m.value : m.name) + "\n";
3450
3495
  }).join("");
3451
3496
  };
3452
3497
  ShaderFactory.registerInclude = function registerInclude(includeName, includeSource) {
@@ -4231,29 +4276,50 @@ var ShaderFactory = /*#__PURE__*/ function() {
4231
4276
  ShaderProgram._counter = 0;
4232
4277
  })();
4233
4278
 
4279
+ /**
4280
+ * @internal
4281
+ * Shader pass type
4282
+ */ var ShaderType;
4283
+ (function(ShaderType) {
4284
+ ShaderType[ShaderType[/** init by glsl */ "Canonical"] = 0] = "Canonical";
4285
+ ShaderType[ShaderType[/** init by shader-lab */ "ShaderLab"] = 1] = "ShaderLab";
4286
+ })(ShaderType || (ShaderType = {}));
4287
+
4234
4288
  /**
4235
4289
  * Shader pass containing vertex and fragment source.
4236
4290
  */ var ShaderPass = /*#__PURE__*/ function(ShaderPart1) {
4237
4291
  _inherits(ShaderPass, ShaderPart1);
4238
- function ShaderPass(nameOrVertexSource, vertexSourceOrFragmentSource, fragmentSourceOrTags, tags) {
4292
+ function ShaderPass(nameOrVertexSource, vertexSourceOrFragmentSourceOrCode, fragmentSourceOrTagsOrVertexEntry, fragmentEntryOrTags, tags) {
4239
4293
  var _this;
4240
4294
  _this = ShaderPart1.call(this) || this;
4241
4295
  /** @internal */ _this._shaderPassId = 0;
4242
4296
  /** @internal */ _this._renderStateDataMap = {};
4243
4297
  /** @internal */ _this._shaderProgramPools = [];
4298
+ /** @internal */ _this._path = "";
4299
+ _this._platformMacros = [];
4244
4300
  _this._shaderPassId = ShaderPass._shaderPassCounter++;
4245
- if (typeof fragmentSourceOrTags === "string") {
4301
+ _this._type = ShaderType.Canonical;
4302
+ if (typeof fragmentEntryOrTags === "string") {
4246
4303
  _this._name = nameOrVertexSource;
4247
- _this._vertexSource = vertexSourceOrFragmentSource;
4248
- _this._fragmentSource = fragmentSourceOrTags;
4249
- tags = tags != null ? tags : {
4304
+ _this._shaderLabSource = vertexSourceOrFragmentSourceOrCode;
4305
+ _this._vertexEntry = fragmentSourceOrTagsOrVertexEntry;
4306
+ _this._fragmentEntry = fragmentEntryOrTags;
4307
+ tags = _extends({
4308
+ pipelineStage: PipelineStage.Forward
4309
+ }, tags);
4310
+ _this._type = ShaderType.ShaderLab;
4311
+ } else if (typeof fragmentSourceOrTagsOrVertexEntry === "string") {
4312
+ _this._name = nameOrVertexSource;
4313
+ _this._vertexSource = vertexSourceOrFragmentSourceOrCode;
4314
+ _this._fragmentSource = fragmentSourceOrTagsOrVertexEntry;
4315
+ tags = fragmentEntryOrTags != null ? fragmentEntryOrTags : {
4250
4316
  pipelineStage: PipelineStage.Forward
4251
4317
  };
4252
4318
  } else {
4253
4319
  _this._name = "Default";
4254
4320
  _this._vertexSource = nameOrVertexSource;
4255
- _this._fragmentSource = vertexSourceOrFragmentSource;
4256
- tags = fragmentSourceOrTags != null ? fragmentSourceOrTags : {
4321
+ _this._fragmentSource = vertexSourceOrFragmentSourceOrCode;
4322
+ tags = fragmentSourceOrTagsOrVertexEntry != null ? fragmentSourceOrTagsOrVertexEntry : {
4257
4323
  pipelineStage: PipelineStage.Forward
4258
4324
  };
4259
4325
  }
@@ -4271,9 +4337,52 @@ var ShaderFactory = /*#__PURE__*/ function() {
4271
4337
  if (shaderProgram) {
4272
4338
  return shaderProgram;
4273
4339
  }
4340
+ if (this._type === ShaderType.Canonical) {
4341
+ shaderProgram = this._getCanonicalShaderProgram(engine, macroCollection);
4342
+ } else {
4343
+ shaderProgram = this._compileShaderProgram(engine, macroCollection, this._vertexEntry, this._fragmentEntry);
4344
+ }
4345
+ shaderProgramPool.cache(shaderProgram);
4346
+ return shaderProgram;
4347
+ };
4348
+ /**
4349
+ * @internal
4350
+ */ _proto._destroy = function _destroy() {
4351
+ var shaderProgramPools = this._shaderProgramPools;
4352
+ for(var i = 0, n = shaderProgramPools.length; i < n; i++){
4353
+ shaderProgramPools[i]._destroy();
4354
+ }
4355
+ shaderProgramPools.length = 0;
4356
+ };
4357
+ /**
4358
+ * Shader Lab compilation
4359
+ */ _proto._compileShaderProgram = function _compileShaderProgram(engine, macroCollection, vertexEntry, fragmentEntry) {
4360
+ var _this = this, path = _this._path, platformMacros = _this._platformMacros;
4274
4361
  var isWebGL2 = engine._hardwareRenderer.isWebGL2;
4275
- var macroNameList = [];
4276
- ShaderMacro._getNamesByMacros(macroCollection, macroNameList);
4362
+ var macros = new Array();
4363
+ ShaderMacro._getMacrosElements(macroCollection, macros);
4364
+ platformMacros.length = 0;
4365
+ if (engine._hardwareRenderer.canIUse(GLCapabilityType.shaderTextureLod)) {
4366
+ platformMacros.push("HAS_TEX_LOD");
4367
+ }
4368
+ if (engine._hardwareRenderer.canIUse(GLCapabilityType.standardDerivatives)) {
4369
+ platformMacros.push("HAS_DERIVATIVES");
4370
+ }
4371
+ if (isWebGL2) {
4372
+ platformMacros.push("GRAPHICS_API_WEBGL2");
4373
+ } else {
4374
+ platformMacros.push("GRAPHICS_API_WEBGL1");
4375
+ }
4376
+ var start = performance.now();
4377
+ var _Shader__shaderLab__parseShaderPass = Shader._shaderLab._parseShaderPass(this._shaderLabSource, vertexEntry, fragmentEntry, macros, isWebGL2 ? ShaderPlatformTarget.GLES300 : ShaderPlatformTarget.GLES100, platformMacros, new URL(path, ShaderPass._shaderRootPath).href), vertex = _Shader__shaderLab__parseShaderPass.vertex, fragment = _Shader__shaderLab__parseShaderPass.fragment;
4378
+ Logger.info("[ShaderLab compilation] cost time: " + (performance.now() - start) + "ms");
4379
+ return new ShaderProgram(engine, vertex, fragment);
4380
+ };
4381
+ // TODO: remove it after migrate all shader to `ShaderLab`.
4382
+ _proto._getCanonicalShaderProgram = function _getCanonicalShaderProgram(engine, macroCollection) {
4383
+ var isWebGL2 = engine._hardwareRenderer.isWebGL2;
4384
+ var macroNameList = new Array();
4385
+ ShaderMacro._getMacrosElements(macroCollection, macroNameList);
4277
4386
  var macroNameStr = ShaderFactory.parseCustomMacros(macroNameList);
4278
4387
  var versionStr = isWebGL2 ? "#version 300 es" : "#version 100";
4279
4388
  var graphicAPI = isWebGL2 ? "#define GRAPHICS_API_WEBGL2" : "#define GRAPHICS_API_WEBGL1";
@@ -4290,24 +4399,17 @@ var ShaderFactory = /*#__PURE__*/ function() {
4290
4399
  vertexSource = ShaderFactory.convertTo300(vertexSource);
4291
4400
  fragmentSource = ShaderFactory.convertTo300(fragmentSource, true);
4292
4401
  }
4293
- shaderProgram = new ShaderProgram(engine, vertexSource, fragmentSource);
4294
- shaderProgramPool.cache(shaderProgram);
4402
+ var shaderProgram = new ShaderProgram(engine, vertexSource, fragmentSource);
4295
4403
  return shaderProgram;
4296
4404
  };
4297
- /**
4298
- * @internal
4299
- */ _proto._destroy = function _destroy() {
4300
- var shaderProgramPools = this._shaderProgramPools;
4301
- for(var i = 0, n = shaderProgramPools.length; i < n; i++){
4302
- shaderProgramPools[i]._destroy();
4303
- }
4304
- shaderProgramPools.length = 0;
4305
- };
4306
4405
  return ShaderPass;
4307
4406
  }(ShaderPart);
4308
4407
  (function() {
4309
4408
  ShaderPass._shaderPassCounter = 0;
4310
4409
  })();
4410
+ (function() {
4411
+ /** @internal */ ShaderPass._shaderRootPath = "shaders://root/";
4412
+ })();
4311
4413
 
4312
4414
  /**
4313
4415
  * Sub shader.
@@ -4944,6 +5046,18 @@ __decorate([
4944
5046
  }
4945
5047
  var _proto = Shader.prototype;
4946
5048
  /**
5049
+ * @internal
5050
+ * path should follow the specifications of [URL.origin](https://developer.mozilla.org/en-US/docs/Web/API/URL/origin), like: `shaders://root/`
5051
+ */ _proto._registerPath = function _registerPath(path) {
5052
+ for(var _iterator = _create_for_of_iterator_helper_loose(this._subShaders), _step; !(_step = _iterator()).done;){
5053
+ var subShader = _step.value;
5054
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(subShader.passes), _step1; !(_step1 = _iterator1()).done;){
5055
+ var shaderPass = _step1.value;
5056
+ shaderPass._path = path;
5057
+ }
5058
+ }
5059
+ };
5060
+ /**
4947
5061
  * Compile shader variant by macro name list.
4948
5062
  *
4949
5063
  * @remarks
@@ -5006,45 +5120,44 @@ __decorate([
5006
5120
  if (!Shader._shaderLab) {
5007
5121
  throw "ShaderLab has not been set up yet.";
5008
5122
  }
5009
- var shaderInfo = Shader._shaderLab.parseShader(nameOrShaderSource);
5010
- if (shaderMap[shaderInfo.name]) {
5011
- console.error('Shader named "' + shaderInfo.name + '" already exists.');
5123
+ var shaderContent = Shader._shaderLab._parseShaderContent(nameOrShaderSource);
5124
+ if (shaderMap[shaderContent.name]) {
5125
+ console.error('Shader named "' + shaderContent.name + '" already exists.');
5012
5126
  return;
5013
5127
  }
5014
- var subShaderList = shaderInfo.subShaders.map(function(subShaderInfo) {
5015
- var passList = subShaderInfo.passes.map(function(passInfo) {
5016
- if (typeof passInfo === "string") {
5128
+ var subShaderList = shaderContent.subShaders.map(function(subShaderContent) {
5129
+ var passList = subShaderContent.passes.map(function(passInfo) {
5130
+ if (passInfo.isUsePass) {
5017
5131
  var _Shader_find_subShaders_find, _Shader_find;
5018
5132
  // Use pass reference
5019
- var paths = passInfo.split("/");
5133
+ var paths = passInfo.name.split("/");
5020
5134
  return (_Shader_find = Shader.find(paths[0])) == null ? void 0 : (_Shader_find_subShaders_find = _Shader_find.subShaders.find(function(subShader) {
5021
5135
  return subShader.name === paths[1];
5022
5136
  })) == null ? void 0 : _Shader_find_subShaders_find.passes.find(function(pass) {
5023
5137
  return pass.name === paths[2];
5024
5138
  });
5025
5139
  }
5026
- var shaderPass = new ShaderPass(passInfo.name, passInfo.vertexSource, passInfo.fragmentSource, passInfo.tags);
5140
+ var shaderPassContent = new ShaderPass(passInfo.name, passInfo.contents, passInfo.vertexEntry, passInfo.fragmentEntry, passInfo.tags);
5027
5141
  var renderStates = passInfo.renderStates;
5028
5142
  var renderState = new RenderState();
5029
- shaderPass._renderState = renderState;
5143
+ shaderPassContent._renderState = renderState;
5030
5144
  // Parse const render state
5031
- var constRenderStateInfo = renderStates[0];
5032
- for(var k in constRenderStateInfo){
5033
- Shader._applyConstRenderStates(renderState, parseInt(k), constRenderStateInfo[k]);
5145
+ var constantMap = renderStates.constantMap, variableMap = renderStates.variableMap;
5146
+ for(var k in constantMap){
5147
+ Shader._applyConstRenderStates(renderState, parseInt(k), constantMap[k]);
5034
5148
  }
5035
5149
  // Parse variable render state
5036
- var variableRenderStateInfo = renderStates[1];
5037
5150
  var renderStateDataMap = {};
5038
- for(var k1 in variableRenderStateInfo){
5039
- renderStateDataMap[k1] = ShaderProperty.getByName(variableRenderStateInfo[k1]);
5151
+ for(var k1 in variableMap){
5152
+ renderStateDataMap[k1] = ShaderProperty.getByName(variableMap[k1]);
5040
5153
  }
5041
- shaderPass._renderStateDataMap = renderStateDataMap;
5042
- return shaderPass;
5154
+ shaderPassContent._renderStateDataMap = renderStateDataMap;
5155
+ return shaderPassContent;
5043
5156
  });
5044
- return new SubShader(shaderInfo.name, passList, subShaderInfo.tags);
5157
+ return new SubShader(subShaderContent.name, passList, subShaderContent.tags);
5045
5158
  });
5046
- shader = new Shader(shaderInfo.name, subShaderList);
5047
- shaderMap[shaderInfo.name] = shader;
5159
+ shader = new Shader(shaderContent.name, subShaderList);
5160
+ shaderMap[shaderContent.name] = shader;
5048
5161
  return shader;
5049
5162
  } else {
5050
5163
  if (shaderMap[nameOrShaderSource]) {
@@ -8134,6 +8247,14 @@ var /**
8134
8247
  MSAASamples[MSAASamples[/** Multi-sample anti-aliasing with 8 samples. */ "EightX"] = 8] = "EightX";
8135
8248
  })(MSAASamples || (MSAASamples = {}));
8136
8249
 
8250
+ /**
8251
+ * The strategy to use when a shader replacement fails.
8252
+ */ var ReplacementFailureStrategy;
8253
+ (function(ReplacementFailureStrategy) {
8254
+ ReplacementFailureStrategy[ReplacementFailureStrategy[/** Keep the original shader. */ "KeepOriginalShader"] = 0] = "KeepOriginalShader";
8255
+ ReplacementFailureStrategy[ReplacementFailureStrategy[/** Do not render. */ "DoNotRender"] = 1] = "DoNotRender";
8256
+ })(ReplacementFailureStrategy || (ReplacementFailureStrategy = {}));
8257
+
8137
8258
  var _Camera;
8138
8259
  var MathTemp = function MathTemp() {
8139
8260
  };
@@ -8183,6 +8304,7 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component1) {
8183
8304
  /** @internal */ _this._virtualCamera = new VirtualCamera();
8184
8305
  /** @internal */ _this._replacementShader = null;
8185
8306
  /** @internal */ _this._replacementSubShaderTag = null;
8307
+ /** @internal */ _this._replacementFailureStrategy = null;
8186
8308
  /** @internal */ _this._cameraIndex = -1;
8187
8309
  _this._priority = 0;
8188
8310
  _this._shaderData = new ShaderData(ShaderDataGroup.Camera);
@@ -8362,6 +8484,7 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component1) {
8362
8484
  context.virtualCamera = virtualCamera;
8363
8485
  context.replacementShader = this._replacementShader;
8364
8486
  context.replacementTag = this._replacementSubShaderTag;
8487
+ context.replacementFailureStrategy = this._replacementFailureStrategy;
8365
8488
  // compute cull frustum.
8366
8489
  if (this.enableFrustumCulling && this._frustumChangeFlag.flag) {
8367
8490
  this._frustum.calculateFromMatrix(virtualCamera.viewProjectionMatrix);
@@ -8381,15 +8504,18 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component1) {
8381
8504
  this._renderPipeline.render(context, cubeFace, mipLevel, clearMask);
8382
8505
  this._engine._renderCount++;
8383
8506
  };
8384
- _proto.setReplacementShader = function setReplacementShader(shader, replacementTag) {
8507
+ _proto.setReplacementShader = function setReplacementShader(shader, replacementTag, failureStrategy) {
8508
+ if (failureStrategy === void 0) failureStrategy = ReplacementFailureStrategy.KeepOriginalShader;
8385
8509
  this._replacementShader = shader;
8386
8510
  this._replacementSubShaderTag = typeof replacementTag === "string" ? ShaderTagKey.getByName(replacementTag) : replacementTag;
8511
+ this._replacementFailureStrategy = failureStrategy;
8387
8512
  };
8388
8513
  /**
8389
8514
  * Reset and clear the replacement shader.
8390
8515
  */ _proto.resetReplacementShader = function resetReplacementShader() {
8391
8516
  this._replacementShader = null;
8392
8517
  this._replacementSubShaderTag = null;
8518
+ this._replacementFailureStrategy = null;
8393
8519
  };
8394
8520
  /**
8395
8521
  * @inheritdoc
@@ -8503,7 +8629,7 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component1) {
8503
8629
  this._checkMainCanvasAntialiasWaste();
8504
8630
  };
8505
8631
  _proto._checkMainCanvasAntialiasWaste = function _checkMainCanvasAntialiasWaste() {
8506
- if (this.independentCanvasEnabled && Vector4.equals(this._viewport, PipelineUtils.defaultViewport)) {
8632
+ if (this._phasedActiveInScene && this.independentCanvasEnabled && Vector4.equals(this._viewport, PipelineUtils.defaultViewport)) {
8507
8633
  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.");
8508
8634
  }
8509
8635
  };
@@ -10197,6 +10323,7 @@ var /**
10197
10323
  break;
10198
10324
  }
10199
10325
  }
10326
+ context.replacementFailureStrategy === ReplacementFailureStrategy.KeepOriginalShader && this.pushRenderElementByType(renderElement, subRenderElement, materialSubShader.passes, renderStates);
10200
10327
  } else {
10201
10328
  this.pushRenderElementByType(renderElement, subRenderElement, replacementSubShaders[0].passes, renderStates);
10202
10329
  }
@@ -23341,7 +23468,7 @@ ShaderPool.init();
23341
23468
  */ _proto._initialize = function _initialize(configuration) {
23342
23469
  var _this = this;
23343
23470
  var shaderLab = configuration.shaderLab, physics = configuration.physics;
23344
- if (shaderLab) {
23471
+ if (shaderLab && !Shader._shaderLab) {
23345
23472
  Shader._shaderLab = shaderLab;
23346
23473
  }
23347
23474
  var initializePromises = new Array();
@@ -24348,9 +24475,9 @@ ShaderPool.init();
24348
24475
  /** Shadow bias.*/ _this.shadowBias = 1;
24349
24476
  /** Shadow mapping normal-based bias. */ _this.shadowNormalBias = 1;
24350
24477
  /** Near plane value to use for shadow frustums. */ _this.shadowNearPlane = 0.1;
24351
- /** Shadow intensity, the larger the value, the clearer and darker the shadow. */ _this.shadowStrength = 1.0;
24352
24478
  /** @internal */ _this._lightIndex = -1;
24353
24479
  /** @internal */ _this._lightColor = new Color();
24480
+ _this._shadowStrength = 1.0;
24354
24481
  _this._color = new Color(1, 1, 1, 1);
24355
24482
  return _this;
24356
24483
  }
@@ -24366,6 +24493,15 @@ ShaderPool.init();
24366
24493
  return this._lightColor;
24367
24494
  };
24368
24495
  _create_class(Light, [
24496
+ {
24497
+ key: "shadowStrength",
24498
+ get: /** Shadow intensity, the larger the value, the clearer and darker the shadow, range [0,1]. */ function get() {
24499
+ return this._shadowStrength;
24500
+ },
24501
+ set: function set(value) {
24502
+ this._shadowStrength = MathUtil.clamp(value, 0, 1);
24503
+ }
24504
+ },
24369
24505
  {
24370
24506
  key: "color",
24371
24507
  get: /**
@@ -25081,7 +25217,7 @@ var BloomEffect = /*#__PURE__*/ function() {
25081
25217
  return this._scatter;
25082
25218
  },
25083
25219
  set: function set(value) {
25084
- value = Math.min(Math.max(0, value), 1);
25220
+ value = MathUtil.clamp(value, 0, 1);
25085
25221
  if (value !== this._scatter) {
25086
25222
  this._scatter = value;
25087
25223
  var params = this._bloomMaterial.shaderData.getVector4(BloomEffect._bloomParams);
@@ -25280,6 +25416,9 @@ var TonemappingEffect = /*#__PURE__*/ function() {
25280
25416
  */ var _PostProcessManager = /*#__PURE__*/ function() {
25281
25417
  function _PostProcessManager(scene) {
25282
25418
  this.scene = scene;
25419
+ this./**
25420
+ * Whether the post process manager is active.
25421
+ */ isActive = true;
25283
25422
  var uberShader = Shader.find(_PostProcessManager.UBER_SHADER_NAME);
25284
25423
  var uberMaterial = new Material(scene.engine, uberShader);
25285
25424
  var depthState = uberMaterial.renderState.depthState;
@@ -25313,7 +25452,7 @@ var TonemappingEffect = /*#__PURE__*/ function() {
25313
25452
  get: /**
25314
25453
  * Whether has active post process effect.
25315
25454
  */ function get() {
25316
- return this._bloomEffect.enabled || this._tonemappingEffect.enabled;
25455
+ return this.isActive && (this._bloomEffect.enabled || this._tonemappingEffect.enabled);
25317
25456
  }
25318
25457
  }
25319
25458
  ]);
@@ -34105,5 +34244,5 @@ var cacheDir = new Vector3();
34105
34244
  return CubeProbe;
34106
34245
  }(Probe);
34107
34246
 
34108
- export { AmbientLight, AnimationArrayCurve, AnimationBoolCurve, AnimationClip, AnimationClipCurveBinding, AnimationColorCurve, AnimationCurve, AnimationEvent, AnimationFloatArrayCurve, AnimationFloatCurve, AnimationQuaternionCurve, AnimationRectCurve, AnimationRefCurve, AnimationStringCurve, AnimationVector2Curve, AnimationVector3Curve, AnimationVector4Curve, Animator, AnimatorConditionMode, AnimatorController, AnimatorControllerLayer, AnimatorCullingMode, AnimatorLayerBlendingMode, AnimatorLayerMask, AnimatorState, AnimatorStateMachine, AnimatorStateTransition, AssetPromise, AssetType, Background, BackgroundMode, BackgroundTextureFillMode, BaseMaterial, BasicRenderPipeline, BlendFactor, BlendMode, BlendOperation, BlendShape, BlendShapeFrame, BlendState, BlinnPhongMaterial, BloomDownScaleMode, BloomEffect, BoolUpdateFlag, BoxColliderShape, BoxShape, Buffer, BufferBindFlag, BufferMesh, BufferUsage, BufferUtil, Burst, Camera, CameraClearFlags, CameraType, Canvas, CapsuleColliderShape, CharacterController, CircleShape, ClearableObjectPool, CloneManager, Collider, ColliderShape, ColliderShapeUpAxis, CollisionDetectionMode, ColorOverLifetimeModule, ColorSpace, ColorWriteMask, CompareFunction, Component, ConeEmitType, ConeShape, ContentRestorer, ControllerCollisionFlag, ControllerNonWalkableMode, CubeProbe, CullMode, CurveKey, DataType, DependentMode, DepthState, DepthTextureMode, DiffuseMode, DirectLight, Downsampling, DynamicCollider, DynamicColliderConstraints, EmissionModule, Engine, EngineObject, Entity, EventDispatcher, FixedJoint, FogMode, Font, FontStyle, GLCapabilityType, GradientAlphaKey, GradientColorKey, HemisphereShape, HingeJoint, HitResult, IndexBufferBinding, IndexFormat, InputManager, InterpolationType, Joint, JointLimits, JointMotor, Keyframe, Keys, Layer, Light, Loader, Logger, MSAASamples, MainModule, Material, Mesh, MeshRenderer, MeshTopology, ModelMesh, OverflowMode, PBRBaseMaterial, PBRMaterial, PBRSpecularMaterial, ParticleCompositeCurve, ParticleCompositeGradient, ParticleCurve, ParticleCurveMode, ParticleGenerator, ParticleGradient, ParticleGradientMode, ParticleMaterial, ParticleRenderMode, ParticleRenderer, ParticleScaleMode, ParticleShapeArcMode, ParticleShapeType, ParticleSimulationSpace, ParticleStopMode, PhysicsMaterial, PhysicsMaterialCombineMode, PhysicsScene, PipelineStage, PlaneColliderShape, Platform, PointLight, Pointer, PointerButton, PointerPhase, Primitive, PrimitiveMesh, Probe, RasterState, ReferResource, RenderBufferDepthFormat, RenderFace, RenderQueue, RenderQueueType, RenderState, RenderStateElementKey as RenderStateDataKey, RenderTarget, RenderTargetBlendState, Renderer, ResourceManager, ReturnableObjectPool, RotationOverLifetimeModule, Scene, SceneManager, Script, SetDataOptions, Shader, ShaderData, ShaderFactory, ShaderLib, ShaderMacro, ShaderMacroCollection, ShaderPass, ShaderProperty, ShaderPropertyType, ShaderTagKey, ShadowCascadesMode, ShadowResolution, ShadowType, SizeOverLifetimeModule, Skin, SkinnedMeshRenderer, Sky, SkyBoxMaterial, SkyProceduralMaterial, SphereColliderShape, SphereShape, SpotLight, SpringJoint, Sprite, SpriteAtlas, SpriteDrawMode, SpriteMask, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer, SpriteTileMode, StateMachineScript, StaticCollider, StencilOperation, StencilState, SubMesh, SubPrimitive, SubShader, SunMode, SystemInfo, TextHorizontalAlignment, TextRenderer, TextUtils, TextVerticalAlignment, Texture, Texture2D, Texture2DArray, TextureCoordinate, TextureCube, TextureCubeFace, TextureDepthCompareFunction, TextureFilterMode, TextureFormat, TextureSheetAnimationModule, TextureUsage, TextureWrapMode, Time, TonemappingEffect, TonemappingMode, TrailMaterial, TrailRenderer, Transform, UnlitMaterial, Utils, VelocityOverLifetimeModule, VertexAttribute, VertexBufferBinding, VertexElement, VertexElementFormat, WrapMode, XRManager, _PostProcessManager, assignmentClone, deepClone, dependentComponents, ignoreClone, request, resourceLoader, shallowClone };
34247
+ export { AmbientLight, AnimationArrayCurve, AnimationBoolCurve, AnimationClip, AnimationClipCurveBinding, AnimationColorCurve, AnimationCurve, AnimationEvent, AnimationFloatArrayCurve, AnimationFloatCurve, AnimationQuaternionCurve, AnimationRectCurve, AnimationRefCurve, AnimationStringCurve, AnimationVector2Curve, AnimationVector3Curve, AnimationVector4Curve, Animator, AnimatorConditionMode, AnimatorController, AnimatorControllerLayer, AnimatorCullingMode, AnimatorLayerBlendingMode, AnimatorLayerMask, AnimatorState, AnimatorStateMachine, AnimatorStateTransition, AssetPromise, AssetType, Background, BackgroundMode, BackgroundTextureFillMode, BaseMaterial, BasicRenderPipeline, BlendFactor, BlendMode, BlendOperation, BlendShape, BlendShapeFrame, BlendState, BlinnPhongMaterial, BloomDownScaleMode, BloomEffect, BoolUpdateFlag, BoxColliderShape, BoxShape, Buffer, BufferBindFlag, BufferMesh, BufferUsage, BufferUtil, Burst, Camera, CameraClearFlags, CameraType, Canvas, CapsuleColliderShape, CharacterController, CircleShape, ClearableObjectPool, CloneManager, Collider, ColliderShape, ColliderShapeUpAxis, CollisionDetectionMode, ColorOverLifetimeModule, ColorSpace, ColorWriteMask, CompareFunction, Component, ConeEmitType, ConeShape, ContentRestorer, ControllerCollisionFlag, ControllerNonWalkableMode, CubeProbe, CullMode, CurveKey, DataType, DependentMode, DepthState, DepthTextureMode, DiffuseMode, DirectLight, Downsampling, DynamicCollider, DynamicColliderConstraints, EmissionModule, Engine, EngineObject, Entity, EventDispatcher, FixedJoint, FogMode, Font, FontStyle, GLCapabilityType, GradientAlphaKey, GradientColorKey, HemisphereShape, HingeJoint, HitResult, IndexBufferBinding, IndexFormat, InputManager, InterpolationType, Joint, JointLimits, JointMotor, Keyframe, Keys, Layer, Light, Loader, Logger, MSAASamples, MainModule, Material, Mesh, MeshRenderer, MeshTopology, ModelMesh, OverflowMode, PBRBaseMaterial, PBRMaterial, PBRSpecularMaterial, ParticleCompositeCurve, ParticleCompositeGradient, ParticleCurve, ParticleCurveMode, ParticleGenerator, ParticleGradient, ParticleGradientMode, ParticleMaterial, ParticleRenderMode, ParticleRenderer, ParticleScaleMode, ParticleShapeArcMode, ParticleShapeType, ParticleSimulationSpace, ParticleStopMode, PhysicsMaterial, PhysicsMaterialCombineMode, PhysicsScene, PipelineStage, PlaneColliderShape, Platform, PointLight, Pointer, PointerButton, PointerPhase, Primitive, PrimitiveMesh, Probe, RasterState, ReferResource, RenderBufferDepthFormat, RenderFace, RenderQueue, RenderQueueType, RenderState, RenderStateElementKey as RenderStateDataKey, RenderTarget, RenderTargetBlendState, Renderer, ReplacementFailureStrategy, ResourceManager, ReturnableObjectPool, RotationOverLifetimeModule, Scene, SceneManager, Script, SetDataOptions, Shader, ShaderData, ShaderFactory, ShaderLib, ShaderMacro, ShaderMacroCollection, ShaderPass, ShaderPlatformTarget, ShaderProperty, ShaderPropertyType, ShaderTagKey, ShadowCascadesMode, ShadowResolution, ShadowType, SizeOverLifetimeModule, Skin, SkinnedMeshRenderer, Sky, SkyBoxMaterial, SkyProceduralMaterial, SphereColliderShape, SphereShape, SpotLight, SpringJoint, Sprite, SpriteAtlas, SpriteDrawMode, SpriteMask, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer, SpriteTileMode, StateMachineScript, StaticCollider, StencilOperation, StencilState, SubMesh, SubPrimitive, SubShader, SunMode, SystemInfo, TextHorizontalAlignment, TextRenderer, TextUtils, TextVerticalAlignment, Texture, Texture2D, Texture2DArray, TextureCoordinate, TextureCube, TextureCubeFace, TextureDepthCompareFunction, TextureFilterMode, TextureFormat, TextureSheetAnimationModule, TextureUsage, TextureWrapMode, Time, TonemappingEffect, TonemappingMode, TrailMaterial, TrailRenderer, Transform, UnlitMaterial, Utils, VelocityOverLifetimeModule, VertexAttribute, VertexBufferBinding, VertexElement, VertexElementFormat, WrapMode, XRManager, _PostProcessManager, assignmentClone, deepClone, dependentComponents, ignoreClone, request, resourceLoader, shallowClone };
34109
34248
  //# sourceMappingURL=module.js.map