@galacean/engine 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/browser.js CHANGED
@@ -7948,6 +7948,43 @@
7948
7948
  StencilOperation[StencilOperation[/** Increments the current stencil buffer value. Wraps stencil buffer value to zero when incrementing the maximum representable unsigned value. */ "IncrementWrap"] = 6] = "IncrementWrap";
7949
7949
  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";
7950
7950
  })(exports.StencilOperation || (exports.StencilOperation = {}));
7951
+ exports.ShaderPlatformTarget = void 0;
7952
+ (function(ShaderPlatformTarget) {
7953
+ ShaderPlatformTarget[ShaderPlatformTarget["GLES100"] = 0] = "GLES100";
7954
+ ShaderPlatformTarget[ShaderPlatformTarget["GLES300"] = 1] = "GLES300";
7955
+ })(exports.ShaderPlatformTarget || (exports.ShaderPlatformTarget = {}));
7956
+ function _array_like_to_array$1(arr, len) {
7957
+ if (len == null || len > arr.length) len = arr.length;
7958
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
7959
+ return arr2;
7960
+ }
7961
+ function _unsupported_iterable_to_array$1(o, minLen) {
7962
+ if (!o) return;
7963
+ if (typeof o === "string") return _array_like_to_array$1(o, minLen);
7964
+ var n = Object.prototype.toString.call(o).slice(8, -1);
7965
+ if (n === "Object" && o.constructor) n = o.constructor.name;
7966
+ if (n === "Map" || n === "Set") return Array.from(n);
7967
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array$1(o, minLen);
7968
+ }
7969
+ function _create_for_of_iterator_helper_loose$1(o, allowArrayLike) {
7970
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
7971
+ if (it) return (it = it.call(o)).next.bind(it);
7972
+ // Fallback for engines without symbol support
7973
+ if (Array.isArray(o) || (it = _unsupported_iterable_to_array$1(o)) || allowArrayLike && o && typeof o.length === "number") {
7974
+ if (it) o = it;
7975
+ var i = 0;
7976
+ return function() {
7977
+ if (i >= o.length) return {
7978
+ done: true
7979
+ };
7980
+ return {
7981
+ done: false,
7982
+ value: o[i++]
7983
+ };
7984
+ };
7985
+ }
7986
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
7987
+ }
7951
7988
  /**
7952
7989
  * Shader macro。
7953
7990
  */ var ShaderMacro = /*#__PURE__*/ function() {
@@ -7977,14 +8014,14 @@
7977
8014
  maskMap.length++;
7978
8015
  maskMap[index] = new Array(32);
7979
8016
  }
7980
- maskMap[index][bit] = key;
8017
+ maskMap[index][bit] = macro;
7981
8018
  ShaderMacro._macroCounter++;
7982
8019
  }
7983
8020
  return macro;
7984
8021
  };
7985
8022
  /**
7986
8023
  * @internal
7987
- */ ShaderMacro._getNamesByMacros = function _getNamesByMacros(macros, out) {
8024
+ */ ShaderMacro._getMacrosElements = function _getMacrosElements(macros, out) {
7988
8025
  var maskMap = ShaderMacro._macroMaskMap;
7989
8026
  var mask = macros._mask;
7990
8027
  out.length = 0;
@@ -8165,14 +8202,6 @@
8165
8202
  };
8166
8203
  return ShaderMacroCollection;
8167
8204
  }();
8168
- /**
8169
- * Pipeline stage.
8170
- */ exports.PipelineStage = void 0;
8171
- (function(PipelineStage) {
8172
- PipelineStage[/** DepthOnly stage. */ "DepthOnly"] = "DepthOnly";
8173
- PipelineStage[/** Shadow caster stage. */ "ShadowCaster"] = "ShadowCaster";
8174
- PipelineStage[/** Forward shading stage. */ "Forward"] = "Forward";
8175
- })(exports.PipelineStage || (exports.PipelineStage = {}));
8176
8205
  function _extends$2() {
8177
8206
  _extends$2 = Object.assign || function assign(target) {
8178
8207
  for(var i = 1; i < arguments.length; i++){
@@ -8183,8 +8212,16 @@
8183
8212
  };
8184
8213
  return _extends$2.apply(this, arguments);
8185
8214
  }
8215
+ /**
8216
+ * Pipeline stage.
8217
+ */ exports.PipelineStage = void 0;
8218
+ (function(PipelineStage) {
8219
+ PipelineStage[/** DepthOnly stage. */ "DepthOnly"] = "DepthOnly";
8220
+ PipelineStage[/** Shadow caster stage. */ "ShadowCaster"] = "ShadowCaster";
8221
+ PipelineStage[/** Forward shading stage. */ "Forward"] = "Forward";
8222
+ })(exports.PipelineStage || (exports.PipelineStage = {}));
8186
8223
  var camera_declare = "#define GLSLIFY 1\nuniform vec3 camera_Position;uniform vec3 camera_Forward;uniform vec4 camera_ProjectionParams;"; // eslint-disable-line
8187
- 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
8224
+ 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
8188
8225
  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
8189
8226
  var transform_declare = "#define GLSLIFY 1\nuniform mat4 renderer_LocalMat;uniform mat4 renderer_ModelMat;uniform mat4 camera_ViewMat;uniform mat4 camera_ProjMat;uniform mat4 renderer_MVMat;uniform mat4 renderer_MVPMat;uniform mat4 renderer_NormalMat;"; // eslint-disable-line
8190
8227
  var color_share = "#define GLSLIFY 1\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nvarying vec4 v_color;\n#endif\n"; // eslint-disable-line
@@ -8328,7 +8365,7 @@
8328
8365
  var ShaderFactory = function ShaderFactory() {};
8329
8366
  ShaderFactory.parseCustomMacros = function parseCustomMacros(macros) {
8330
8367
  return macros.map(function(m) {
8331
- return "#define " + m + "\n";
8368
+ return "#define " + (m.value ? m.name + " " + m.value : m.name) + "\n";
8332
8369
  }).join("");
8333
8370
  };
8334
8371
  ShaderFactory.registerInclude = function registerInclude(includeName, includeSource) {
@@ -9105,29 +9142,49 @@
9105
9142
  (function() {
9106
9143
  ShaderProgram._counter = 0;
9107
9144
  })();
9145
+ /**
9146
+ * @internal
9147
+ * Shader pass type
9148
+ */ var ShaderType;
9149
+ (function(ShaderType) {
9150
+ ShaderType[ShaderType[/** init by glsl */ "Canonical"] = 0] = "Canonical";
9151
+ ShaderType[ShaderType[/** init by shader-lab */ "ShaderLab"] = 1] = "ShaderLab";
9152
+ })(ShaderType || (ShaderType = {}));
9108
9153
  /**
9109
9154
  * Shader pass containing vertex and fragment source.
9110
9155
  */ var ShaderPass = /*#__PURE__*/ function(ShaderPart1) {
9111
9156
  _inherits$2(ShaderPass, ShaderPart1);
9112
- function ShaderPass(nameOrVertexSource, vertexSourceOrFragmentSource, fragmentSourceOrTags, tags) {
9157
+ function ShaderPass(nameOrVertexSource, vertexSourceOrFragmentSourceOrCode, fragmentSourceOrTagsOrVertexEntry, fragmentEntryOrTags, tags) {
9113
9158
  var _this;
9114
9159
  _this = ShaderPart1.call(this) || this;
9115
9160
  /** @internal */ _this._shaderPassId = 0;
9116
9161
  /** @internal */ _this._renderStateDataMap = {};
9117
9162
  /** @internal */ _this._shaderProgramPools = [];
9163
+ /** @internal */ _this._path = "";
9164
+ _this._platformMacros = [];
9118
9165
  _this._shaderPassId = ShaderPass._shaderPassCounter++;
9119
- if (typeof fragmentSourceOrTags === "string") {
9166
+ _this._type = ShaderType.Canonical;
9167
+ if (typeof fragmentEntryOrTags === "string") {
9120
9168
  _this._name = nameOrVertexSource;
9121
- _this._vertexSource = vertexSourceOrFragmentSource;
9122
- _this._fragmentSource = fragmentSourceOrTags;
9123
- tags = tags != null ? tags : {
9169
+ _this._shaderLabSource = vertexSourceOrFragmentSourceOrCode;
9170
+ _this._vertexEntry = fragmentSourceOrTagsOrVertexEntry;
9171
+ _this._fragmentEntry = fragmentEntryOrTags;
9172
+ tags = _extends$2({
9173
+ pipelineStage: exports.PipelineStage.Forward
9174
+ }, tags);
9175
+ _this._type = ShaderType.ShaderLab;
9176
+ } else if (typeof fragmentSourceOrTagsOrVertexEntry === "string") {
9177
+ _this._name = nameOrVertexSource;
9178
+ _this._vertexSource = vertexSourceOrFragmentSourceOrCode;
9179
+ _this._fragmentSource = fragmentSourceOrTagsOrVertexEntry;
9180
+ tags = fragmentEntryOrTags != null ? fragmentEntryOrTags : {
9124
9181
  pipelineStage: exports.PipelineStage.Forward
9125
9182
  };
9126
9183
  } else {
9127
9184
  _this._name = "Default";
9128
9185
  _this._vertexSource = nameOrVertexSource;
9129
- _this._fragmentSource = vertexSourceOrFragmentSource;
9130
- tags = fragmentSourceOrTags != null ? fragmentSourceOrTags : {
9186
+ _this._fragmentSource = vertexSourceOrFragmentSourceOrCode;
9187
+ tags = fragmentSourceOrTagsOrVertexEntry != null ? fragmentSourceOrTagsOrVertexEntry : {
9131
9188
  pipelineStage: exports.PipelineStage.Forward
9132
9189
  };
9133
9190
  }
@@ -9145,9 +9202,52 @@
9145
9202
  if (shaderProgram) {
9146
9203
  return shaderProgram;
9147
9204
  }
9205
+ if (this._type === ShaderType.Canonical) {
9206
+ shaderProgram = this._getCanonicalShaderProgram(engine, macroCollection);
9207
+ } else {
9208
+ shaderProgram = this._compileShaderProgram(engine, macroCollection, this._vertexEntry, this._fragmentEntry);
9209
+ }
9210
+ shaderProgramPool.cache(shaderProgram);
9211
+ return shaderProgram;
9212
+ };
9213
+ /**
9214
+ * @internal
9215
+ */ _proto._destroy = function _destroy() {
9216
+ var shaderProgramPools = this._shaderProgramPools;
9217
+ for(var i = 0, n = shaderProgramPools.length; i < n; i++){
9218
+ shaderProgramPools[i]._destroy();
9219
+ }
9220
+ shaderProgramPools.length = 0;
9221
+ };
9222
+ /**
9223
+ * Shader Lab compilation
9224
+ */ _proto._compileShaderProgram = function _compileShaderProgram(engine, macroCollection, vertexEntry, fragmentEntry) {
9225
+ var _this = this, path = _this._path, platformMacros = _this._platformMacros;
9148
9226
  var isWebGL2 = engine._hardwareRenderer.isWebGL2;
9149
- var macroNameList = [];
9150
- ShaderMacro._getNamesByMacros(macroCollection, macroNameList);
9227
+ var macros = new Array();
9228
+ ShaderMacro._getMacrosElements(macroCollection, macros);
9229
+ platformMacros.length = 0;
9230
+ if (engine._hardwareRenderer.canIUse(exports.GLCapabilityType.shaderTextureLod)) {
9231
+ platformMacros.push("HAS_TEX_LOD");
9232
+ }
9233
+ if (engine._hardwareRenderer.canIUse(exports.GLCapabilityType.standardDerivatives)) {
9234
+ platformMacros.push("HAS_DERIVATIVES");
9235
+ }
9236
+ if (isWebGL2) {
9237
+ platformMacros.push("GRAPHICS_API_WEBGL2");
9238
+ } else {
9239
+ platformMacros.push("GRAPHICS_API_WEBGL1");
9240
+ }
9241
+ var start = performance.now();
9242
+ 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;
9243
+ Logger.info("[ShaderLab compilation] cost time: " + (performance.now() - start) + "ms");
9244
+ return new ShaderProgram(engine, vertex, fragment);
9245
+ };
9246
+ // TODO: remove it after migrate all shader to `ShaderLab`.
9247
+ _proto._getCanonicalShaderProgram = function _getCanonicalShaderProgram(engine, macroCollection) {
9248
+ var isWebGL2 = engine._hardwareRenderer.isWebGL2;
9249
+ var macroNameList = new Array();
9250
+ ShaderMacro._getMacrosElements(macroCollection, macroNameList);
9151
9251
  var macroNameStr = ShaderFactory.parseCustomMacros(macroNameList);
9152
9252
  var versionStr = isWebGL2 ? "#version 300 es" : "#version 100";
9153
9253
  var graphicAPI = isWebGL2 ? "#define GRAPHICS_API_WEBGL2" : "#define GRAPHICS_API_WEBGL1";
@@ -9164,24 +9264,17 @@
9164
9264
  vertexSource = ShaderFactory.convertTo300(vertexSource);
9165
9265
  fragmentSource = ShaderFactory.convertTo300(fragmentSource, true);
9166
9266
  }
9167
- shaderProgram = new ShaderProgram(engine, vertexSource, fragmentSource);
9168
- shaderProgramPool.cache(shaderProgram);
9267
+ var shaderProgram = new ShaderProgram(engine, vertexSource, fragmentSource);
9169
9268
  return shaderProgram;
9170
9269
  };
9171
- /**
9172
- * @internal
9173
- */ _proto._destroy = function _destroy() {
9174
- var shaderProgramPools = this._shaderProgramPools;
9175
- for(var i = 0, n = shaderProgramPools.length; i < n; i++){
9176
- shaderProgramPools[i]._destroy();
9177
- }
9178
- shaderProgramPools.length = 0;
9179
- };
9180
9270
  return ShaderPass;
9181
9271
  }(ShaderPart);
9182
9272
  (function() {
9183
9273
  ShaderPass._shaderPassCounter = 0;
9184
9274
  })();
9275
+ (function() {
9276
+ /** @internal */ ShaderPass._shaderRootPath = "shaders://root/";
9277
+ })();
9185
9278
  /**
9186
9279
  * Sub shader.
9187
9280
  */ var SubShader = /*#__PURE__*/ function(ShaderPart1) {
@@ -9810,6 +9903,18 @@
9810
9903
  };
9811
9904
  var _proto = Shader.prototype;
9812
9905
  /**
9906
+ * @internal
9907
+ * path should follow the specifications of [URL.origin](https://developer.mozilla.org/en-US/docs/Web/API/URL/origin), like: `shaders://root/`
9908
+ */ _proto._registerPath = function _registerPath(path) {
9909
+ for(var _iterator = _create_for_of_iterator_helper_loose$1(this._subShaders), _step; !(_step = _iterator()).done;){
9910
+ var subShader = _step.value;
9911
+ for(var _iterator1 = _create_for_of_iterator_helper_loose$1(subShader.passes), _step1; !(_step1 = _iterator1()).done;){
9912
+ var shaderPass = _step1.value;
9913
+ shaderPass._path = path;
9914
+ }
9915
+ }
9916
+ };
9917
+ /**
9813
9918
  * Compile shader variant by macro name list.
9814
9919
  *
9815
9920
  * @remarks
@@ -9872,45 +9977,44 @@
9872
9977
  if (!Shader._shaderLab) {
9873
9978
  throw "ShaderLab has not been set up yet.";
9874
9979
  }
9875
- var shaderInfo = Shader._shaderLab.parseShader(nameOrShaderSource);
9876
- if (shaderMap[shaderInfo.name]) {
9877
- console.error('Shader named "' + shaderInfo.name + '" already exists.');
9980
+ var shaderContent = Shader._shaderLab._parseShaderContent(nameOrShaderSource);
9981
+ if (shaderMap[shaderContent.name]) {
9982
+ console.error('Shader named "' + shaderContent.name + '" already exists.');
9878
9983
  return;
9879
9984
  }
9880
- var subShaderList = shaderInfo.subShaders.map(function(subShaderInfo) {
9881
- var passList = subShaderInfo.passes.map(function(passInfo) {
9882
- if (typeof passInfo === "string") {
9985
+ var subShaderList = shaderContent.subShaders.map(function(subShaderContent) {
9986
+ var passList = subShaderContent.passes.map(function(passInfo) {
9987
+ if (passInfo.isUsePass) {
9883
9988
  var _Shader_find_subShaders_find, _Shader_find;
9884
9989
  // Use pass reference
9885
- var paths = passInfo.split("/");
9990
+ var paths = passInfo.name.split("/");
9886
9991
  return (_Shader_find = Shader.find(paths[0])) == null ? void 0 : (_Shader_find_subShaders_find = _Shader_find.subShaders.find(function(subShader) {
9887
9992
  return subShader.name === paths[1];
9888
9993
  })) == null ? void 0 : _Shader_find_subShaders_find.passes.find(function(pass) {
9889
9994
  return pass.name === paths[2];
9890
9995
  });
9891
9996
  }
9892
- var shaderPass = new ShaderPass(passInfo.name, passInfo.vertexSource, passInfo.fragmentSource, passInfo.tags);
9997
+ var shaderPassContent = new ShaderPass(passInfo.name, passInfo.contents, passInfo.vertexEntry, passInfo.fragmentEntry, passInfo.tags);
9893
9998
  var renderStates = passInfo.renderStates;
9894
9999
  var renderState = new RenderState();
9895
- shaderPass._renderState = renderState;
10000
+ shaderPassContent._renderState = renderState;
9896
10001
  // Parse const render state
9897
- var constRenderStateInfo = renderStates[0];
9898
- for(var k in constRenderStateInfo){
9899
- Shader._applyConstRenderStates(renderState, parseInt(k), constRenderStateInfo[k]);
10002
+ var constantMap = renderStates.constantMap, variableMap = renderStates.variableMap;
10003
+ for(var k in constantMap){
10004
+ Shader._applyConstRenderStates(renderState, parseInt(k), constantMap[k]);
9900
10005
  }
9901
10006
  // Parse variable render state
9902
- var variableRenderStateInfo = renderStates[1];
9903
10007
  var renderStateDataMap = {};
9904
- for(var k1 in variableRenderStateInfo){
9905
- renderStateDataMap[k1] = ShaderProperty.getByName(variableRenderStateInfo[k1]);
10008
+ for(var k1 in variableMap){
10009
+ renderStateDataMap[k1] = ShaderProperty.getByName(variableMap[k1]);
9906
10010
  }
9907
- shaderPass._renderStateDataMap = renderStateDataMap;
9908
- return shaderPass;
10011
+ shaderPassContent._renderStateDataMap = renderStateDataMap;
10012
+ return shaderPassContent;
9909
10013
  });
9910
- return new SubShader(shaderInfo.name, passList, subShaderInfo.tags);
10014
+ return new SubShader(subShaderContent.name, passList, subShaderContent.tags);
9911
10015
  });
9912
- shader = new Shader(shaderInfo.name, subShaderList);
9913
- shaderMap[shaderInfo.name] = shader;
10016
+ shader = new Shader(shaderContent.name, subShaderList);
10017
+ shaderMap[shaderContent.name] = shader;
9914
10018
  return shader;
9915
10019
  } else {
9916
10020
  if (shaderMap[nameOrShaderSource]) {
@@ -12969,6 +13073,13 @@
12969
13073
  MSAASamples[MSAASamples[/** Multi-sample anti-aliasing with 4 samples. */ "FourX"] = 4] = "FourX";
12970
13074
  MSAASamples[MSAASamples[/** Multi-sample anti-aliasing with 8 samples. */ "EightX"] = 8] = "EightX";
12971
13075
  })(exports.MSAASamples || (exports.MSAASamples = {}));
13076
+ /**
13077
+ * The strategy to use when a shader replacement fails.
13078
+ */ exports.ReplacementFailureStrategy = void 0;
13079
+ (function(ReplacementFailureStrategy) {
13080
+ ReplacementFailureStrategy[ReplacementFailureStrategy[/** Keep the original shader. */ "KeepOriginalShader"] = 0] = "KeepOriginalShader";
13081
+ ReplacementFailureStrategy[ReplacementFailureStrategy[/** Do not render. */ "DoNotRender"] = 1] = "DoNotRender";
13082
+ })(exports.ReplacementFailureStrategy || (exports.ReplacementFailureStrategy = {}));
12972
13083
  var _Camera;
12973
13084
  var MathTemp = function MathTemp() {};
12974
13085
  (function() {
@@ -13016,6 +13127,7 @@
13016
13127
  /** @internal */ _this._virtualCamera = new VirtualCamera();
13017
13128
  /** @internal */ _this._replacementShader = null;
13018
13129
  /** @internal */ _this._replacementSubShaderTag = null;
13130
+ /** @internal */ _this._replacementFailureStrategy = null;
13019
13131
  /** @internal */ _this._cameraIndex = -1;
13020
13132
  _this._priority = 0;
13021
13133
  _this._shaderData = new ShaderData(ShaderDataGroup.Camera);
@@ -13196,6 +13308,7 @@
13196
13308
  context.virtualCamera = virtualCamera;
13197
13309
  context.replacementShader = this._replacementShader;
13198
13310
  context.replacementTag = this._replacementSubShaderTag;
13311
+ context.replacementFailureStrategy = this._replacementFailureStrategy;
13199
13312
  // compute cull frustum.
13200
13313
  if (this.enableFrustumCulling && this._frustumChangeFlag.flag) {
13201
13314
  this._frustum.calculateFromMatrix(virtualCamera.viewProjectionMatrix);
@@ -13215,15 +13328,18 @@
13215
13328
  this._renderPipeline.render(context, cubeFace, mipLevel, clearMask);
13216
13329
  this._engine._renderCount++;
13217
13330
  };
13218
- _proto.setReplacementShader = function setReplacementShader(shader, replacementTag) {
13331
+ _proto.setReplacementShader = function setReplacementShader(shader, replacementTag, failureStrategy) {
13332
+ if (failureStrategy === void 0) failureStrategy = exports.ReplacementFailureStrategy.KeepOriginalShader;
13219
13333
  this._replacementShader = shader;
13220
13334
  this._replacementSubShaderTag = typeof replacementTag === "string" ? ShaderTagKey.getByName(replacementTag) : replacementTag;
13335
+ this._replacementFailureStrategy = failureStrategy;
13221
13336
  };
13222
13337
  /**
13223
13338
  * Reset and clear the replacement shader.
13224
13339
  */ _proto.resetReplacementShader = function resetReplacementShader() {
13225
13340
  this._replacementShader = null;
13226
13341
  this._replacementSubShaderTag = null;
13342
+ this._replacementFailureStrategy = null;
13227
13343
  };
13228
13344
  /**
13229
13345
  * @inheritdoc
@@ -13337,7 +13453,7 @@
13337
13453
  this._checkMainCanvasAntialiasWaste();
13338
13454
  };
13339
13455
  _proto._checkMainCanvasAntialiasWaste = function _checkMainCanvasAntialiasWaste() {
13340
- if (this.independentCanvasEnabled && Vector4.equals(this._viewport, PipelineUtils.defaultViewport)) {
13456
+ if (this._phasedActiveInScene && this.independentCanvasEnabled && Vector4.equals(this._viewport, PipelineUtils.defaultViewport)) {
13341
13457
  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.");
13342
13458
  }
13343
13459
  };
@@ -15015,6 +15131,7 @@
15015
15131
  break;
15016
15132
  }
15017
15133
  }
15134
+ context.replacementFailureStrategy === exports.ReplacementFailureStrategy.KeepOriginalShader && this.pushRenderElementByType(renderElement, subRenderElement, materialSubShader.passes, renderStates);
15018
15135
  } else {
15019
15136
  this.pushRenderElementByType(renderElement, subRenderElement, replacementSubShaders[0].passes, renderStates);
15020
15137
  }
@@ -28021,7 +28138,7 @@
28021
28138
  */ _proto._initialize = function _initialize(configuration) {
28022
28139
  var _this = this;
28023
28140
  var shaderLab = configuration.shaderLab, physics = configuration.physics;
28024
- if (shaderLab) {
28141
+ if (shaderLab && !Shader._shaderLab) {
28025
28142
  Shader._shaderLab = shaderLab;
28026
28143
  }
28027
28144
  var initializePromises = new Array();
@@ -29019,9 +29136,9 @@
29019
29136
  /** Shadow bias.*/ _this.shadowBias = 1;
29020
29137
  /** Shadow mapping normal-based bias. */ _this.shadowNormalBias = 1;
29021
29138
  /** Near plane value to use for shadow frustums. */ _this.shadowNearPlane = 0.1;
29022
- /** Shadow intensity, the larger the value, the clearer and darker the shadow. */ _this.shadowStrength = 1.0;
29023
29139
  /** @internal */ _this._lightIndex = -1;
29024
29140
  /** @internal */ _this._lightColor = new Color();
29141
+ _this._shadowStrength = 1.0;
29025
29142
  _this._color = new Color(1, 1, 1, 1);
29026
29143
  return _this;
29027
29144
  };
@@ -29038,6 +29155,15 @@
29038
29155
  return this._lightColor;
29039
29156
  };
29040
29157
  _create_class$2(Light, [
29158
+ {
29159
+ key: "shadowStrength",
29160
+ get: /** Shadow intensity, the larger the value, the clearer and darker the shadow, range [0,1]. */ function get() {
29161
+ return this._shadowStrength;
29162
+ },
29163
+ set: function set(value) {
29164
+ this._shadowStrength = MathUtil.clamp(value, 0, 1);
29165
+ }
29166
+ },
29041
29167
  {
29042
29168
  key: "color",
29043
29169
  get: /**
@@ -29744,7 +29870,7 @@
29744
29870
  return this._scatter;
29745
29871
  },
29746
29872
  set: function set(value) {
29747
- value = Math.min(Math.max(0, value), 1);
29873
+ value = MathUtil.clamp(value, 0, 1);
29748
29874
  if (value !== this._scatter) {
29749
29875
  this._scatter = value;
29750
29876
  var params = this._bloomMaterial.shaderData.getVector4(BloomEffect._bloomParams);
@@ -29941,6 +30067,9 @@
29941
30067
  */ var _PostProcessManager = /*#__PURE__*/ function() {
29942
30068
  function _PostProcessManager(scene) {
29943
30069
  this.scene = scene;
30070
+ this./**
30071
+ * Whether the post process manager is active.
30072
+ */ isActive = true;
29944
30073
  var uberShader = Shader.find(_PostProcessManager.UBER_SHADER_NAME);
29945
30074
  var uberMaterial = new Material(scene.engine, uberShader);
29946
30075
  var depthState = uberMaterial.renderState.depthState;
@@ -29974,7 +30103,7 @@
29974
30103
  get: /**
29975
30104
  * Whether has active post process effect.
29976
30105
  */ function get() {
29977
- return this._bloomEffect.enabled || this._tonemappingEffect.enabled;
30106
+ return this.isActive && (this._bloomEffect.enabled || this._tonemappingEffect.enabled);
29978
30107
  }
29979
30108
  }
29980
30109
  ]);
@@ -38824,6 +38953,7 @@
38824
38953
  RenderTarget: RenderTarget,
38825
38954
  RenderTargetBlendState: RenderTargetBlendState,
38826
38955
  get Renderer () { return exports.Renderer; },
38956
+ get ReplacementFailureStrategy () { return exports.ReplacementFailureStrategy; },
38827
38957
  ResourceManager: ResourceManager,
38828
38958
  ReturnableObjectPool: ReturnableObjectPool,
38829
38959
  RotationOverLifetimeModule: RotationOverLifetimeModule,
@@ -38838,6 +38968,7 @@
38838
38968
  ShaderMacro: ShaderMacro,
38839
38969
  ShaderMacroCollection: ShaderMacroCollection,
38840
38970
  ShaderPass: ShaderPass,
38971
+ get ShaderPlatformTarget () { return exports.ShaderPlatformTarget; },
38841
38972
  ShaderProperty: ShaderProperty,
38842
38973
  get ShaderPropertyType () { return exports.ShaderPropertyType; },
38843
38974
  ShaderTagKey: ShaderTagKey,
@@ -46982,12 +47113,12 @@
46982
47113
  var atlasItemsLen = atlasItems ? atlasItems.length : 0;
46983
47114
  var engine = resourceManager.engine;
46984
47115
  var spriteAtlas = new SpriteAtlas(engine);
46985
- if (atlasItemsLen < 0) {
47116
+ if (atlasItemsLen <= 0) {
46986
47117
  resolve(spriteAtlas);
46987
47118
  return;
46988
47119
  }
46989
47120
  chainPromises.length = 0;
46990
- for(var i = 0; i < atlasItems.length; i++)_loop(i);
47121
+ for(var i = 0; i < atlasItemsLen; i++)_loop(i);
46991
47122
  AssetPromise.all(chainPromises).then(function() {
46992
47123
  resolve(spriteAtlas);
46993
47124
  }).catch(reject);
@@ -47307,6 +47438,31 @@
47307
47438
  if (fog.fogDensity != undefined) scene.fogDensity = fog.fogDensity;
47308
47439
  if (fog.fogColor != undefined) scene.fogColor.copyFrom(fog.fogColor);
47309
47440
  }
47441
+ // Post Process
47442
+ var postProcessData = data.scene.postProcess;
47443
+ if (postProcessData) {
47444
+ // @ts-ignore
47445
+ var postProcessManager = scene._postProcessManager;
47446
+ var bloomEffect = postProcessManager._bloomEffect;
47447
+ var tonemappingEffect = postProcessManager._tonemappingEffect;
47448
+ postProcessManager.isActive = postProcessData.isActive;
47449
+ bloomEffect.enabled = postProcessData.bloom.enabled;
47450
+ bloomEffect.threshold = postProcessData.bloom.threshold;
47451
+ bloomEffect.scatter = postProcessData.bloom.scatter;
47452
+ bloomEffect.intensity = postProcessData.bloom.intensity;
47453
+ bloomEffect.tint.copyFrom(postProcessData.bloom.tint);
47454
+ bloomEffect.dirtIntensity = postProcessData.bloom.dirtIntensity;
47455
+ tonemappingEffect.enabled = postProcessData.tonemapping.enabled;
47456
+ tonemappingEffect.mode = postProcessData.tonemapping.mode;
47457
+ if (postProcessData.bloom.dirtTexture) {
47458
+ // @ts-ignore
47459
+ // prettier-ignore
47460
+ var dirtTexturePromise = resourceManager.getResourceByRef(postProcessData.bloom.dirtTexture).then(function(texture) {
47461
+ bloomEffect.dirtTexture = texture;
47462
+ });
47463
+ promises.push(dirtTexturePromise);
47464
+ }
47465
+ }
47310
47466
  return Promise.all(promises).then(function() {
47311
47467
  resolve(scene);
47312
47468
  });
@@ -47696,7 +47852,7 @@
47696
47852
  ], KHR_materials_anisotropy);
47697
47853
 
47698
47854
  //@ts-ignore
47699
- var version = "1.3.0-alpha.1";
47855
+ var version = "1.3.0-alpha.3";
47700
47856
  console.log("Galacean engine version: " + version);
47701
47857
  for(var key in CoreObjects){
47702
47858
  Loader.registerClass(key, CoreObjects[key]);