@galacean/engine 1.6.0-alpha.2 → 1.6.0-beta.0

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
@@ -9311,6 +9311,14 @@
9311
9311
  /** cut the back-face of the polygons. */ CullMode[CullMode["Back"] = 2] = "Back";
9312
9312
  return CullMode;
9313
9313
  }({});
9314
+ /**
9315
+ * Render queue type.
9316
+ */ var RenderQueueType = /*#__PURE__*/ function(RenderQueueType) {
9317
+ /** Opaque queue. */ RenderQueueType[RenderQueueType["Opaque"] = 0] = "Opaque";
9318
+ /** Opaque queue, alpha cutoff. */ RenderQueueType[RenderQueueType["AlphaTest"] = 1] = "AlphaTest";
9319
+ /** Transparent queue, rendering from back to front to ensure correct rendering of transparent objects. */ RenderQueueType[RenderQueueType["Transparent"] = 2] = "Transparent";
9320
+ return RenderQueueType;
9321
+ }({});
9314
9322
  var RenderStateElementKey = /*#__PURE__*/ function(RenderStateElementKey) {
9315
9323
  /** Blend state enabled for target 0 key. */ RenderStateElementKey[RenderStateElementKey["BlendStateEnabled0"] = 0] = "BlendStateEnabled0";
9316
9324
  /** Blend state color blend operation for target 0 key. */ RenderStateElementKey[RenderStateElementKey["BlendStateColorBlendOperation0"] = 1] = "BlendStateColorBlendOperation0";
@@ -9343,14 +9351,6 @@
9343
9351
  /** Render queue type key. */ RenderStateElementKey[RenderStateElementKey["RenderQueueType"] = 28] = "RenderQueueType";
9344
9352
  return RenderStateElementKey;
9345
9353
  }({});
9346
- /**
9347
- * Render queue type.
9348
- */ var RenderQueueType = /*#__PURE__*/ function(RenderQueueType) {
9349
- /** Opaque queue. */ RenderQueueType[RenderQueueType["Opaque"] = 0] = "Opaque";
9350
- /** Opaque queue, alpha cutoff. */ RenderQueueType[RenderQueueType["AlphaTest"] = 1] = "AlphaTest";
9351
- /** Transparent queue, rendering from back to front to ensure correct rendering of transparent objects. */ RenderQueueType[RenderQueueType["Transparent"] = 2] = "Transparent";
9352
- return RenderQueueType;
9353
- }({});
9354
9354
  /**
9355
9355
  * Shader data grouping.
9356
9356
  */ var ShaderDataGroup = /*#__PURE__*/ function(ShaderDataGroup) {
@@ -9361,6 +9361,13 @@
9361
9361
  /** Render element group. */ ShaderDataGroup[ShaderDataGroup["RenderElement"] = 4] = "RenderElement";
9362
9362
  return ShaderDataGroup;
9363
9363
  }({});
9364
+ /**
9365
+ * Shader language belongs to.
9366
+ */ var ShaderLanguage = /*#__PURE__*/ function(ShaderLanguage) {
9367
+ /** GLSL ES 100. */ ShaderLanguage[ShaderLanguage["GLSLES100"] = 0] = "GLSLES100";
9368
+ /** GLSL ES 300. */ ShaderLanguage[ShaderLanguage["GLSLES300"] = 1] = "GLSLES300";
9369
+ return ShaderLanguage;
9370
+ }({});
9364
9371
  /**
9365
9372
  * Shader Property type.
9366
9373
  */ var ShaderPropertyType = /*#__PURE__*/ function(ShaderPropertyType) {
@@ -9391,43 +9398,6 @@
9391
9398
  /** Decrements the current stencil buffer value. Wraps stencil buffer value to the maximum representable unsigned value when decrementing a stencil buffer value of 0. */ StencilOperation[StencilOperation["DecrementWrap"] = 7] = "DecrementWrap";
9392
9399
  return StencilOperation;
9393
9400
  }({});
9394
- var ShaderPlatformTarget = /*#__PURE__*/ function(ShaderPlatformTarget) {
9395
- ShaderPlatformTarget[ShaderPlatformTarget["GLES100"] = 0] = "GLES100";
9396
- ShaderPlatformTarget[ShaderPlatformTarget["GLES300"] = 1] = "GLES300";
9397
- return ShaderPlatformTarget;
9398
- }({});
9399
- function _array_like_to_array$1(arr, len) {
9400
- if (len == null || len > arr.length) len = arr.length;
9401
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
9402
- return arr2;
9403
- }
9404
- function _unsupported_iterable_to_array$1(o, minLen) {
9405
- if (!o) return;
9406
- if (typeof o === "string") return _array_like_to_array$1(o, minLen);
9407
- var n = Object.prototype.toString.call(o).slice(8, -1);
9408
- if (n === "Object" && o.constructor) n = o.constructor.name;
9409
- if (n === "Map" || n === "Set") return Array.from(n);
9410
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array$1(o, minLen);
9411
- }
9412
- function _create_for_of_iterator_helper_loose$1(o, allowArrayLike) {
9413
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
9414
- if (it) return (it = it.call(o)).next.bind(it);
9415
- // Fallback for engines without symbol support
9416
- if (Array.isArray(o) || (it = _unsupported_iterable_to_array$1(o)) || allowArrayLike && o && typeof o.length === "number") {
9417
- if (it) o = it;
9418
- var i = 0;
9419
- return function() {
9420
- if (i >= o.length) return {
9421
- done: true
9422
- };
9423
- return {
9424
- done: false,
9425
- value: o[i++]
9426
- };
9427
- };
9428
- }
9429
- throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
9430
- }
9431
9401
  /**
9432
9402
  * Shader macro。
9433
9403
  */ var ShaderMacro = /*#__PURE__*/ function() {
@@ -9654,7 +9624,7 @@
9654
9624
  return PipelineStage;
9655
9625
  }({});
9656
9626
  var camera_declare = "uniform vec3 camera_Position;\nuniform vec3 camera_Forward; "; // eslint-disable-line
9657
- var common = "#define PI 3.14159265359\n#define RECIPROCAL_PI 0.31830988618\n#define EPSILON 1e-6\n#define LOG2 1.442695\n#define HALF_MIN 6.103515625e-5 // 2^-14, the same value for 10, 11 and 16-bit: https://www.khronos.org/opengl/wiki/Small_Float_Formats\n#define HALF_EPS 4.8828125e-4 // 2^-11, machine epsilon: 1 + EPS = 1 (half of the ULP for 1.0f)\n\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n\nfloat pow2(float x ) {\n return x * x;\n}\n\nvec4 RGBMToLinear(vec4 value, float maxRange ) {\n return vec4( value.rgb * value.a * maxRange, 1.0 );\n}\n\nvec4 gammaToLinear(vec4 value){\n return vec4( pow(value.rgb, vec3(2.2)), value.a);\n}\n\nvec4 linearToGamma(vec4 value){\n\tvalue = max(value, 0.0);\n return vec4( pow(value.rgb, vec3(1.0 / 2.2)), value.a);\n}\n\n\n// https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_framebuffer_sRGB.txt\n// https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_sRGB_decode.txt\nfloat sRGBToLinear(float value){\n float linearRGBLo = value / 12.92;\n float linearRGBHi = pow((value + 0.055) / 1.055, 2.4);\n float linearRGB = (value <= 0.04045) ? linearRGBLo : linearRGBHi;\n return linearRGB;\n}\n\nvec4 sRGBToLinear(vec4 value){\n return vec4(sRGBToLinear(value.r), sRGBToLinear(value.g), sRGBToLinear(value.b), value.a);\n}\n\nfloat linearToSRGB(float value){\n\tvalue = max(value, 0.0);\n return (value <= 0.0031308) ? (value * 12.9232102) : 1.055 * pow(value, 1.0 / 2.4) - 0.055;\n}\n\nvec4 linearToSRGB(vec4 value){\n return vec4(linearToSRGB(value.r), linearToSRGB(value.g), linearToSRGB(value.b), value.a);\n}\n\n// Compatible with devices that do not even support EXT_sRGB in WebGL1.0.\nvec4 texture2DSRGB(sampler2D tex, vec2 uv) {\n\tvec4 color = texture2D(tex, uv);\n\t#ifdef ENGINE_NO_SRGB\n\t\tcolor = sRGBToLinear(color);\n\t#endif\n\treturn color;\n}\n\n#ifdef HAS_TEX_LOD\n\tvec4 texture2DLodSRGB(sampler2D tex, vec2 uv, float lod) {\n\t\tvec4 color = texture2DLodEXT(tex, uv, lod);\n\t\t#ifdef ENGINE_NO_SRGB\n\t\t\tcolor = sRGBToLinear(color);\n\t\t#endif\n\t\treturn color;\n\t}\n#endif\n\n\nvec4 outputSRGBCorrection(vec4 linearIn){\n #ifdef ENGINE_OUTPUT_SRGB_CORRECT\n \treturn linearToSRGB(linearIn);\n #else \n \treturn linearIn;\n #endif\n}\n\n\nuniform vec4 camera_DepthBufferParams;\nuniform vec4 camera_ProjectionParams;\n\nfloat remapDepthBufferLinear01(float depth){\n\treturn 1.0 / (camera_DepthBufferParams.x * depth + camera_DepthBufferParams.y);\n}\n\nfloat remapDepthBufferEyeDepth(float depth){\n\t#ifdef CAMERA_ORTHOGRAPHIC\n\t\treturn camera_ProjectionParams.y + (camera_ProjectionParams.z - camera_ProjectionParams.y) * depth;\n\t#else\n\t\treturn 1.0 / (camera_DepthBufferParams.z * depth + camera_DepthBufferParams.w);\n\t#endif\n}\n\n// From Next Generation Post Processing in Call of Duty: Advanced Warfare [Jimenez 2014]\n// http://advances.realtimerendering.com/s2014/index.html\n// sampleCoord must not be normalized (e.g. window coordinates)\nfloat interleavedGradientNoise(vec2 sampleCoord)\n{\n\tconst vec3 magic = vec3(0.06711056, 0.00583715, 52.9829189);\n\treturn fract(magic.z * fract(dot(sampleCoord, magic.xy)));\n}\n\n#ifdef GRAPHICS_API_WEBGL2\n\t#define INVERSE_MAT(mat) inverse(mat)\n#else\n\tmat2 inverseMat(mat2 m) {\n\t\treturn mat2(m[1][1],-m[0][1],\n\t\t\t\t-m[1][0], m[0][0]) / (m[0][0]*m[1][1] - m[0][1]*m[1][0]);\n\t}\n\tmat3 inverseMat(mat3 m) {\n\t\tfloat a00 = m[0][0], a01 = m[0][1], a02 = m[0][2];\n\t\tfloat a10 = m[1][0], a11 = m[1][1], a12 = m[1][2];\n\t\tfloat a20 = m[2][0], a21 = m[2][1], a22 = m[2][2];\n\n\t\tfloat b01 = a22 * a11 - a12 * a21;\n\t\tfloat b11 = -a22 * a10 + a12 * a20;\n\t\tfloat b21 = a21 * a10 - a11 * a20;\n\n\t\tfloat det = a00 * b01 + a01 * b11 + a02 * b21;\n\n\t\treturn mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11),\n\t\t\t\t\tb11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10),\n\t\t\t\t\tb21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det;\n\t}\n\tmat4 inverseMat(mat4 m) {\n\t\tfloat a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3],\n\t\t\ta10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3],\n\t\t\ta20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3],\n\t\t\ta30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3],\n\n\t\t\tb00 = a00 * a11 - a01 * a10,\n\t\t\tb01 = a00 * a12 - a02 * a10,\n\t\t\tb02 = a00 * a13 - a03 * a10,\n\t\t\tb03 = a01 * a12 - a02 * a11,\n\t\t\tb04 = a01 * a13 - a03 * a11,\n\t\t\tb05 = a02 * a13 - a03 * a12,\n\t\t\tb06 = a20 * a31 - a21 * a30,\n\t\t\tb07 = a20 * a32 - a22 * a30,\n\t\t\tb08 = a20 * a33 - a23 * a30,\n\t\t\tb09 = a21 * a32 - a22 * a31,\n\t\t\tb10 = a21 * a33 - a23 * a31,\n\t\t\tb11 = a22 * a33 - a23 * a32,\n\n\t\t\tdet = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n\t\treturn mat4(\n\t\t\ta11 * b11 - a12 * b10 + a13 * b09,\n\t\t\ta02 * b10 - a01 * b11 - a03 * b09,\n\t\t\ta31 * b05 - a32 * b04 + a33 * b03,\n\t\t\ta22 * b04 - a21 * b05 - a23 * b03,\n\t\t\ta12 * b08 - a10 * b11 - a13 * b07,\n\t\t\ta00 * b11 - a02 * b08 + a03 * b07,\n\t\t\ta32 * b02 - a30 * b05 - a33 * b01,\n\t\t\ta20 * b05 - a22 * b02 + a23 * b01,\n\t\t\ta10 * b10 - a11 * b08 + a13 * b06,\n\t\t\ta01 * b08 - a00 * b10 - a03 * b06,\n\t\t\ta30 * b04 - a31 * b02 + a33 * b00,\n\t\t\ta21 * b02 - a20 * b04 - a23 * b00,\n\t\t\ta11 * b07 - a10 * b09 - a12 * b06,\n\t\t\ta00 * b09 - a01 * b07 + a02 * b06,\n\t\t\ta31 * b01 - a30 * b03 - a32 * b00,\n\t\t\ta20 * b03 - a21 * b01 + a22 * b00) / det;\n\t}\n\n\t#define INVERSE_MAT(mat) inverseMat(mat)\n#endif\n\n\nvec3 safeNormalize(vec3 inVec) {\n float dp3 = max(float(HALF_MIN), dot(inVec, inVec));\n return inVec * inversesqrt(dp3);\n}\n"; // eslint-disable-line
9627
+ var common = "#define PI 3.14159265359\n#define RECIPROCAL_PI 0.31830988618\n#define EPSILON 1e-6\n#define LOG2 1.442695\n#define HALF_MIN 6.103515625e-5 // 2^-14, the same value for 10, 11 and 16-bit: https://www.khronos.org/opengl/wiki/Small_Float_Formats\n#define HALF_EPS 4.8828125e-4 // 2^-11, machine epsilon: 1 + EPS = 1 (half of the ULP for 1.0f)\n\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n\nfloat pow2(float x ) {\n return x * x;\n}\n\nvec4 RGBMToLinear(vec4 value, float maxRange ) {\n return vec4( value.rgb * value.a * maxRange, 1.0 );\n}\n\nvec4 gammaToLinear(vec4 value){\n return vec4( pow(value.rgb, vec3(2.2)), value.a);\n}\n\nvec4 linearToGamma(vec4 value){\n\tvalue = max(value, 0.0);\n return vec4( pow(value.rgb, vec3(1.0 / 2.2)), value.a);\n}\n\n\n// https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_framebuffer_sRGB.txt\n// https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_sRGB_decode.txt\nfloat sRGBToLinear(float value){\n float linearRGBLo = value / 12.92;\n float linearRGBHi = pow((value + 0.055) / 1.055, 2.4);\n float linearRGB = (value <= 0.04045) ? linearRGBLo : linearRGBHi;\n return linearRGB;\n}\n\nvec4 sRGBToLinear(vec4 value){\n return vec4(sRGBToLinear(value.r), sRGBToLinear(value.g), sRGBToLinear(value.b), value.a);\n}\n\nfloat linearToSRGB(float value){\n\tvalue = max(value, 0.0);\n return (value <= 0.0031308) ? (value * 12.9232102) : 1.055 * pow(value, 1.0 / 2.4) - 0.055;\n}\n\nvec4 linearToSRGB(vec4 value){\n return vec4(linearToSRGB(value.r), linearToSRGB(value.g), linearToSRGB(value.b), value.a);\n}\n\n// Compatible with devices that do not even support EXT_sRGB in WebGL1.0.\nvec4 texture2DSRGB(sampler2D tex, vec2 uv) {\n\tvec4 color = texture2D(tex, uv);\n\t#ifdef ENGINE_NO_SRGB\n\t\tcolor = sRGBToLinear(color);\n\t#endif\n\treturn color;\n}\n\nvec4 outputSRGBCorrection(vec4 linearIn){\n #ifdef ENGINE_OUTPUT_SRGB_CORRECT\n \treturn linearToSRGB(linearIn);\n #else \n \treturn linearIn;\n #endif\n}\n\n\nuniform vec4 camera_DepthBufferParams;\nuniform vec4 camera_ProjectionParams;\n\nfloat remapDepthBufferLinear01(float depth){\n\treturn 1.0 / (camera_DepthBufferParams.x * depth + camera_DepthBufferParams.y);\n}\n\nfloat remapDepthBufferEyeDepth(float depth){\n\t#ifdef CAMERA_ORTHOGRAPHIC\n\t\treturn camera_ProjectionParams.y + (camera_ProjectionParams.z - camera_ProjectionParams.y) * depth;\n\t#else\n\t\treturn 1.0 / (camera_DepthBufferParams.z * depth + camera_DepthBufferParams.w);\n\t#endif\n}\n\n// From Next Generation Post Processing in Call of Duty: Advanced Warfare [Jimenez 2014]\n// http://advances.realtimerendering.com/s2014/index.html\n// sampleCoord must not be normalized (e.g. window coordinates)\nfloat interleavedGradientNoise(vec2 sampleCoord)\n{\n\tconst vec3 magic = vec3(0.06711056, 0.00583715, 52.9829189);\n\treturn fract(magic.z * fract(dot(sampleCoord, magic.xy)));\n}\n\n#ifdef GRAPHICS_API_WEBGL2\n\t#define INVERSE_MAT(mat) inverse(mat)\n#else\n\tmat2 inverseMat(mat2 m) {\n\t\treturn mat2(m[1][1],-m[0][1],\n\t\t\t\t-m[1][0], m[0][0]) / (m[0][0]*m[1][1] - m[0][1]*m[1][0]);\n\t}\n\tmat3 inverseMat(mat3 m) {\n\t\tfloat a00 = m[0][0], a01 = m[0][1], a02 = m[0][2];\n\t\tfloat a10 = m[1][0], a11 = m[1][1], a12 = m[1][2];\n\t\tfloat a20 = m[2][0], a21 = m[2][1], a22 = m[2][2];\n\n\t\tfloat b01 = a22 * a11 - a12 * a21;\n\t\tfloat b11 = -a22 * a10 + a12 * a20;\n\t\tfloat b21 = a21 * a10 - a11 * a20;\n\n\t\tfloat det = a00 * b01 + a01 * b11 + a02 * b21;\n\n\t\treturn mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11),\n\t\t\t\t\tb11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10),\n\t\t\t\t\tb21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det;\n\t}\n\tmat4 inverseMat(mat4 m) {\n\t\tfloat a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3],\n\t\t\ta10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3],\n\t\t\ta20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3],\n\t\t\ta30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3],\n\n\t\t\tb00 = a00 * a11 - a01 * a10,\n\t\t\tb01 = a00 * a12 - a02 * a10,\n\t\t\tb02 = a00 * a13 - a03 * a10,\n\t\t\tb03 = a01 * a12 - a02 * a11,\n\t\t\tb04 = a01 * a13 - a03 * a11,\n\t\t\tb05 = a02 * a13 - a03 * a12,\n\t\t\tb06 = a20 * a31 - a21 * a30,\n\t\t\tb07 = a20 * a32 - a22 * a30,\n\t\t\tb08 = a20 * a33 - a23 * a30,\n\t\t\tb09 = a21 * a32 - a22 * a31,\n\t\t\tb10 = a21 * a33 - a23 * a31,\n\t\t\tb11 = a22 * a33 - a23 * a32,\n\n\t\t\tdet = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n\t\treturn mat4(\n\t\t\ta11 * b11 - a12 * b10 + a13 * b09,\n\t\t\ta02 * b10 - a01 * b11 - a03 * b09,\n\t\t\ta31 * b05 - a32 * b04 + a33 * b03,\n\t\t\ta22 * b04 - a21 * b05 - a23 * b03,\n\t\t\ta12 * b08 - a10 * b11 - a13 * b07,\n\t\t\ta00 * b11 - a02 * b08 + a03 * b07,\n\t\t\ta32 * b02 - a30 * b05 - a33 * b01,\n\t\t\ta20 * b05 - a22 * b02 + a23 * b01,\n\t\t\ta10 * b10 - a11 * b08 + a13 * b06,\n\t\t\ta01 * b08 - a00 * b10 - a03 * b06,\n\t\t\ta30 * b04 - a31 * b02 + a33 * b00,\n\t\t\ta21 * b02 - a20 * b04 - a23 * b00,\n\t\t\ta11 * b07 - a10 * b09 - a12 * b06,\n\t\t\ta00 * b09 - a01 * b07 + a02 * b06,\n\t\t\ta31 * b01 - a30 * b03 - a32 * b00,\n\t\t\ta20 * b03 - a21 * b01 + a22 * b00) / det;\n\t}\n\n\t#define INVERSE_MAT(mat) inverseMat(mat)\n#endif\n\n\nvec3 safeNormalize(vec3 inVec) {\n float dp3 = max(float(HALF_MIN), dot(inVec, inVec));\n return inVec * inversesqrt(dp3);\n}\n"; // eslint-disable-line
9658
9628
  var common_vert = "attribute vec3 POSITION;\n\n#ifdef RENDERER_HAS_UV\n attribute vec2 TEXCOORD_0;\n#endif\n\n#ifdef RENDERER_HAS_UV1\n attribute vec2 TEXCOORD_1;\n#endif\n\n#ifdef RENDERER_HAS_SKIN\n attribute vec4 JOINTS_0;\n attribute vec4 WEIGHTS_0;\n\n #ifdef RENDERER_USE_JOINT_TEXTURE\n uniform sampler2D renderer_JointSampler;\n uniform float renderer_JointCount;\n\n mat4 getJointMatrix(sampler2D smp, float index)\n {\n float base = index / renderer_JointCount;\n float hf = 0.5 / renderer_JointCount;\n float v = base + hf;\n\n vec4 m0 = texture2D(smp, vec2(0.125, v ));\n vec4 m1 = texture2D(smp, vec2(0.375, v ));\n vec4 m2 = texture2D(smp, vec2(0.625, v ));\n vec4 m3 = texture2D(smp, vec2(0.875, v ));\n\n return mat4(m0, m1, m2, m3);\n\n }\n\n #else\n uniform mat4 renderer_JointMatrix[ RENDERER_JOINTS_NUM ];\n #endif\n#endif\n\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\n attribute vec4 COLOR_0;\n#endif\n\n\n#include <transform_declare>\n#include <camera_declare>\n\nuniform vec4 material_TilingOffset;\n\n\n#ifndef MATERIAL_OMIT_NORMAL\n #ifdef RENDERER_HAS_NORMAL\n attribute vec3 NORMAL;\n #endif\n\n #ifdef RENDERER_HAS_TANGENT\n attribute vec4 TANGENT;\n #endif\n#endif"; // eslint-disable-line
9659
9629
  var transform_declare = "uniform mat4 renderer_LocalMat;\nuniform mat4 renderer_ModelMat;\nuniform mat4 camera_ViewMat;\nuniform mat4 camera_ProjMat;\nuniform mat4 renderer_MVMat;\nuniform mat4 renderer_MVPMat;\nuniform mat4 renderer_NormalMat;"; // eslint-disable-line
9660
9630
  var color_share = "#ifdef RENDERER_ENABLE_VERTEXCOLOR\n\nvarying vec4 v_color;\n\n#endif\n"; // eslint-disable-line
@@ -9843,11 +9813,11 @@
9843
9813
  shader = shader.replace(/\bvarying\b/g, isFrag ? "in" : "out");
9844
9814
  shader = shader.replace(/\btexture(2D|Cube)\b/g, "texture");
9845
9815
  shader = shader.replace(/\btexture2DProj\b/g, "textureProj");
9816
+ shader = shader.replace(/\btexture(2D|Cube)LodEXT\b/g, "textureLod");
9817
+ shader = shader.replace(/\btexture(2D|Cube)GradEXT\b/g, "textureGrad");
9818
+ shader = shader.replace(/\btexture2DProjLodEXT\b/g, "textureProjLod");
9819
+ shader = shader.replace(/\btexture2DProjGradEXT\b/g, "textureProjGrad");
9846
9820
  if (isFrag) {
9847
- shader = shader.replace(/\btexture(2D|Cube)LodEXT\b/g, "textureLod");
9848
- shader = shader.replace(/\btexture(2D|Cube)GradEXT\b/g, "textureGrad");
9849
- shader = shader.replace(/\btexture2DProjLodEXT\b/g, "textureProjLod");
9850
- shader = shader.replace(/\btexture2DProjGradEXT\b/g, "textureProjGrad");
9851
9821
  shader = shader.replace(/\bgl_FragDepthEXT\b/g, "gl_FragDepth");
9852
9822
  if (!ShaderFactory._has300Output(shader)) {
9853
9823
  var isMRT = /\bgl_FragData\[.+?\]/g.test(shader);
@@ -9856,7 +9826,7 @@
9856
9826
  var result = shader.match(/\bgl_FragData\[.+?\]/g);
9857
9827
  shader = this._replaceMRTShader(shader, result);
9858
9828
  } else {
9859
- shader = shader.replace(/void\s+?main\s*\(/g, "out vec4 glFragColor;\nvoid main(");
9829
+ shader = "out vec4 glFragColor;\n" + shader;
9860
9830
  shader = shader.replace(/\bgl_FragColor\b/g, "glFragColor");
9861
9831
  }
9862
9832
  }
@@ -10547,46 +10517,29 @@
10547
10517
  return ShaderProgram;
10548
10518
  }();
10549
10519
  ShaderProgram._counter = 0;
10550
- /**
10551
- * @internal
10552
- * Shader pass type
10553
- */ var ShaderType = /*#__PURE__*/ function(ShaderType) {
10554
- /** init by glsl */ ShaderType[ShaderType["Canonical"] = 0] = "Canonical";
10555
- /** init by shader-lab */ ShaderType[ShaderType["ShaderLab"] = 1] = "ShaderLab";
10556
- return ShaderType;
10557
- }({});
10520
+ var precisionStr = "\n #ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n precision highp int;\n #else\n precision mediump float;\n precision mediump int;\n #endif\n ";
10558
10521
  /**
10559
10522
  * Shader pass containing vertex and fragment source.
10560
10523
  */ var ShaderPass = /*#__PURE__*/ function(ShaderPart) {
10561
10524
  _inherits$2(ShaderPass, ShaderPart);
10562
- function ShaderPass(nameOrVertexSource, vertexSourceOrFragmentSourceOrCode, fragmentSourceOrTagsOrVertexEntry, fragmentEntryOrTags, tags) {
10525
+ function ShaderPass(nameOrVertexSource, vertexSourceOrFragmentSource, fragmentSourceOrTags, tags) {
10563
10526
  var _this;
10564
- _this = ShaderPart.call(this) || this, /** @internal */ _this._shaderPassId = 0, /** @internal */ _this._renderStateDataMap = {}, /** @internal */ _this._shaderProgramPools = [], /** @internal */ _this._path = "", _this._platformMacros = [];
10527
+ _this = ShaderPart.call(this) || this, /** @internal */ _this._shaderPassId = 0, /** @internal */ _this._renderStateDataMap = {}, /** @internal */ _this._shaderProgramPools = [];
10565
10528
  _this._shaderPassId = ShaderPass._shaderPassCounter++;
10566
- _this._type = ShaderType.Canonical;
10567
- if (typeof fragmentEntryOrTags === "string") {
10529
+ if (typeof fragmentSourceOrTags === "string") {
10568
10530
  _this._name = nameOrVertexSource;
10569
- _this._shaderLabSource = vertexSourceOrFragmentSourceOrCode;
10570
- _this._vertexEntry = fragmentSourceOrTagsOrVertexEntry;
10571
- _this._fragmentEntry = fragmentEntryOrTags;
10531
+ _this._vertexSource = vertexSourceOrFragmentSource;
10532
+ _this._fragmentSource = fragmentSourceOrTags;
10572
10533
  tags = _extends$2({
10573
10534
  pipelineStage: PipelineStage.Forward
10574
10535
  }, tags);
10575
- _this._type = ShaderType.ShaderLab;
10576
- } else if (typeof fragmentSourceOrTagsOrVertexEntry === "string") {
10577
- _this._name = nameOrVertexSource;
10578
- _this._vertexSource = vertexSourceOrFragmentSourceOrCode;
10579
- _this._fragmentSource = fragmentSourceOrTagsOrVertexEntry;
10580
- tags = fragmentEntryOrTags != null ? fragmentEntryOrTags : {
10581
- pipelineStage: PipelineStage.Forward
10582
- };
10583
10536
  } else {
10584
10537
  _this._name = "Default";
10585
10538
  _this._vertexSource = nameOrVertexSource;
10586
- _this._fragmentSource = vertexSourceOrFragmentSourceOrCode;
10587
- tags = fragmentSourceOrTagsOrVertexEntry != null ? fragmentSourceOrTagsOrVertexEntry : {
10539
+ _this._fragmentSource = vertexSourceOrFragmentSource;
10540
+ tags = _extends$2({
10588
10541
  pipelineStage: PipelineStage.Forward
10589
- };
10542
+ }, fragmentSourceOrTags);
10590
10543
  }
10591
10544
  for(var key in tags){
10592
10545
  _this.setTag(key, tags[key]);
@@ -10602,11 +10555,7 @@
10602
10555
  if (shaderProgram) {
10603
10556
  return shaderProgram;
10604
10557
  }
10605
- if (this._type === ShaderType.Canonical) {
10606
- shaderProgram = this._getCanonicalShaderProgram(engine, macroCollection);
10607
- } else {
10608
- shaderProgram = this._compileShaderProgram(engine, macroCollection, this._vertexEntry, this._fragmentEntry);
10609
- }
10558
+ shaderProgram = this._getCanonicalShaderProgram(engine, macroCollection);
10610
10559
  shaderProgramPool.cache(shaderProgram);
10611
10560
  return shaderProgram;
10612
10561
  };
@@ -10622,55 +10571,37 @@
10622
10571
  // Clear array storing multiple engine shader program pools
10623
10572
  shaderProgramPools.length = 0;
10624
10573
  };
10625
- /**
10626
- * Shader Lab compilation
10627
- */ _proto._compileShaderProgram = function _compileShaderProgram(engine, macroCollection, vertexEntry, fragmentEntry) {
10628
- var _this = this, path = _this._path, platformMacros = _this._platformMacros;
10574
+ _proto._getCanonicalShaderProgram = function _getCanonicalShaderProgram(engine, macroCollection) {
10629
10575
  var isWebGL2 = engine._hardwareRenderer.isWebGL2;
10630
- var macros = new Array();
10631
- ShaderMacro._getMacrosElements(macroCollection, macros);
10632
- platformMacros.length = 0;
10576
+ var shaderMacroList = new Array();
10577
+ ShaderMacro._getMacrosElements(macroCollection, shaderMacroList);
10578
+ shaderMacroList.push(ShaderMacro.getByName(isWebGL2 ? "GRAPHICS_API_WEBGL2" : "GRAPHICS_API_WEBGL1"));
10633
10579
  if (engine._hardwareRenderer.canIUse(GLCapabilityType.shaderTextureLod)) {
10634
- platformMacros.push("HAS_TEX_LOD");
10580
+ shaderMacroList.push(ShaderMacro.getByName("HAS_TEX_LOD"));
10635
10581
  }
10636
10582
  if (engine._hardwareRenderer.canIUse(GLCapabilityType.standardDerivatives)) {
10637
- platformMacros.push("HAS_DERIVATIVES");
10583
+ shaderMacroList.push(ShaderMacro.getByName("HAS_DERIVATIVES"));
10638
10584
  }
10639
- if (isWebGL2) {
10640
- platformMacros.push("GRAPHICS_API_WEBGL2");
10585
+ // Compatible with non-shaderlab syntax
10586
+ var noIncludeVertex = ShaderFactory.parseIncludes(this._vertexSource);
10587
+ var noIncludeFrag = ShaderFactory.parseIncludes(this._fragmentSource);
10588
+ // Parse macros when use shaderlab
10589
+ if (this._platformTarget != undefined) {
10590
+ noIncludeVertex = Shader._shaderLab._parseMacros(noIncludeVertex, shaderMacroList);
10591
+ noIncludeFrag = Shader._shaderLab._parseMacros(noIncludeFrag, shaderMacroList);
10641
10592
  } else {
10642
- platformMacros.push("GRAPHICS_API_WEBGL1");
10593
+ var macroNameStr = ShaderFactory.parseCustomMacros(shaderMacroList);
10594
+ noIncludeVertex = macroNameStr + noIncludeVertex;
10595
+ noIncludeFrag = macroNameStr + noIncludeFrag;
10643
10596
  }
10644
- var start = performance.now();
10645
- var shaderProgramSource = Shader._shaderLab._parseShaderPass(this._shaderLabSource, vertexEntry, fragmentEntry, macros, isWebGL2 ? ShaderPlatformTarget.GLES300 : ShaderPlatformTarget.GLES100, platformMacros, new URL(path, ShaderPass._shaderRootPath).href);
10646
- Logger.info("[ShaderLab compilation] cost time: " + (performance.now() - start) + "ms");
10647
- if (shaderProgramSource) {
10648
- return new ShaderProgram(engine, shaderProgramSource.vertex, shaderProgramSource.fragment);
10649
- } else {
10650
- return new ShaderProgram(engine, "", "");
10597
+ // Need to convert to 300 es when the target is GLSL ES 100 or unkdown
10598
+ if (isWebGL2 && (this._platformTarget == undefined || this._platformTarget === ShaderLanguage.GLSLES100)) {
10599
+ noIncludeVertex = ShaderFactory.convertTo300(noIncludeVertex);
10600
+ noIncludeFrag = ShaderFactory.convertTo300(noIncludeFrag, true);
10651
10601
  }
10652
- };
10653
- // TODO: remove it after migrate all shader to `ShaderLab`.
10654
- _proto._getCanonicalShaderProgram = function _getCanonicalShaderProgram(engine, macroCollection) {
10655
- var isWebGL2 = engine._hardwareRenderer.isWebGL2;
10656
- var macroNameList = new Array();
10657
- ShaderMacro._getMacrosElements(macroCollection, macroNameList);
10658
- var macroNameStr = ShaderFactory.parseCustomMacros(macroNameList);
10659
10602
  var versionStr = isWebGL2 ? "#version 300 es" : "#version 100";
10660
- var graphicAPI = isWebGL2 ? "#define GRAPHICS_API_WEBGL2" : "#define GRAPHICS_API_WEBGL1";
10661
- var precisionStr = "\n #ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n precision highp int;\n #else\n precision mediump float;\n precision mediump int;\n #endif\n ";
10662
- if (engine._hardwareRenderer.canIUse(GLCapabilityType.shaderTextureLod)) {
10663
- precisionStr += "#define HAS_TEX_LOD\n";
10664
- }
10665
- if (engine._hardwareRenderer.canIUse(GLCapabilityType.standardDerivatives)) {
10666
- precisionStr += "#define HAS_DERIVATIVES\n";
10667
- }
10668
- var vertexSource = " " + versionStr + "\n " + graphicAPI + "\n " + macroNameStr + "\n " + ShaderFactory.parseIncludes(this._vertexSource);
10669
- var fragmentSource = " " + versionStr + "\n " + graphicAPI + "\n " + (isWebGL2 ? "" : ShaderFactory._shaderExtension) + "\n " + precisionStr + "\n " + macroNameStr + "\n " + ShaderFactory.parseIncludes(this._fragmentSource);
10670
- if (isWebGL2) {
10671
- vertexSource = ShaderFactory.convertTo300(vertexSource);
10672
- fragmentSource = ShaderFactory.convertTo300(fragmentSource, true);
10673
- }
10603
+ var vertexSource = " " + versionStr + " \n " + noIncludeVertex + "\n ";
10604
+ var fragmentSource = " " + versionStr + "\n " + (isWebGL2 ? "" : ShaderFactory._shaderExtension) + "\n " + precisionStr + "\n " + noIncludeFrag + "\n ";
10674
10605
  var shaderProgram = new ShaderProgram(engine, vertexSource, fragmentSource);
10675
10606
  return shaderProgram;
10676
10607
  };
@@ -11344,18 +11275,6 @@
11344
11275
  }
11345
11276
  var _proto = Shader.prototype;
11346
11277
  /**
11347
- * @internal
11348
- * path should follow the specifications of [URL.origin](https://developer.mozilla.org/en-US/docs/Web/API/URL/origin), like: `shaders://root/`
11349
- */ _proto._registerPath = function _registerPath(path) {
11350
- for(var _iterator = _create_for_of_iterator_helper_loose$1(this._subShaders), _step; !(_step = _iterator()).done;){
11351
- var subShader = _step.value;
11352
- for(var _iterator1 = _create_for_of_iterator_helper_loose$1(subShader.passes), _step1; !(_step1 = _iterator1()).done;){
11353
- var shaderPass = _step1.value;
11354
- shaderPass._path = path;
11355
- }
11356
- }
11357
- };
11358
- /**
11359
11278
  * Compile shader variant by macro name list.
11360
11279
  *
11361
11280
  * @remarks
@@ -11411,74 +11330,82 @@
11411
11330
  */ _proto._addReferCount = function _addReferCount(value) {
11412
11331
  this._refCount += value;
11413
11332
  };
11414
- Shader.create = function create(nameOrShaderSource, vertexSourceOrShaderPassesOrSubShaders, fragmentSource) {
11333
+ Shader.create = function create(nameOrShaderSource, vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget, fragmentSourceOrPath) {
11415
11334
  var shader;
11416
11335
  var shaderMap = Shader._shaderMap;
11417
- if (!vertexSourceOrShaderPassesOrSubShaders) {
11418
- if (!Shader._shaderLab) {
11336
+ if (vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget == undefined) {
11337
+ vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget = ShaderLanguage.GLSLES100;
11338
+ }
11339
+ if (typeof vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget === "number") {
11340
+ var shaderLab = Shader._shaderLab;
11341
+ if (!shaderLab) {
11419
11342
  throw "ShaderLab has not been set up yet.";
11420
11343
  }
11421
- var shaderContent = Shader._shaderLab._parseShaderContent(nameOrShaderSource);
11422
- if (shaderMap[shaderContent.name]) {
11423
- console.error('Shader named "' + shaderContent.name + '" already exists.');
11344
+ var shaderSource = shaderLab._parseShaderSource(nameOrShaderSource);
11345
+ if (shaderMap[shaderSource.name]) {
11346
+ console.error('Shader named "' + shaderSource.name + '" already exists.');
11424
11347
  return;
11425
11348
  }
11426
- var subShaderList = shaderContent.subShaders.map(function(subShaderContent) {
11427
- var passList = subShaderContent.passes.map(function(passInfo) {
11428
- if (passInfo.isUsePass) {
11349
+ var subShaderList = shaderSource.subShaders.map(function(subShaderSource) {
11350
+ var passList = subShaderSource.passes.map(function(passSource) {
11351
+ if (passSource.isUsePass) {
11429
11352
  var _Shader_find_subShaders_find, _Shader_find;
11430
- // Use pass reference
11431
- var paths = passInfo.name.split("/");
11432
- return (_Shader_find = Shader.find(paths[0])) == null ? void 0 : (_Shader_find_subShaders_find = _Shader_find.subShaders.find(function(subShader) {
11433
- return subShader.name === paths[1];
11353
+ var _passSource_name_split = passSource.name.split("/"), shaderName = _passSource_name_split[0], subShaderName = _passSource_name_split[1], passName = _passSource_name_split[2];
11354
+ return (_Shader_find = Shader.find(shaderName)) == null ? void 0 : (_Shader_find_subShaders_find = _Shader_find.subShaders.find(function(subShader) {
11355
+ return subShader.name === subShaderName;
11434
11356
  })) == null ? void 0 : _Shader_find_subShaders_find.passes.find(function(pass) {
11435
- return pass.name === paths[2];
11357
+ return pass.name === passName;
11436
11358
  });
11437
11359
  }
11438
- var shaderPassContent = new ShaderPass(passInfo.name, passInfo.contents, passInfo.vertexEntry, passInfo.fragmentEntry, passInfo.tags);
11439
- var _passInfo_renderStates = passInfo.renderStates, constantMap = _passInfo_renderStates.constantMap, variableMap = _passInfo_renderStates.variableMap;
11360
+ var shaderPassSource = Shader._shaderLab._parseShaderPass(passSource.contents, passSource.vertexEntry, passSource.fragmentEntry, vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget, new URL(fragmentSourceOrPath != null ? fragmentSourceOrPath : "", ShaderPass._shaderRootPath).href);
11361
+ if (!shaderPassSource) {
11362
+ throw 'Shader pass "' + shaderSource.name + "." + subShaderSource.name + "." + passSource.name + '" parse failed, please check the shader source code.';
11363
+ }
11364
+ var shaderPass = new ShaderPass(passSource.name, shaderPassSource.vertex, shaderPassSource.fragment, passSource.tags);
11365
+ shaderPass._platformTarget = vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget;
11366
+ var _passSource_renderStates = passSource.renderStates, constantMap = _passSource_renderStates.constantMap, variableMap = _passSource_renderStates.variableMap;
11440
11367
  // Compatible shader lab no render state use material `renderState` to modify render state
11441
11368
  if (Object.keys(constantMap).length > 0 || Object.keys(variableMap).length > 0) {
11442
11369
  // Parse const render state
11443
11370
  var renderState = new RenderState();
11444
- shaderPassContent._renderState = renderState;
11445
11371
  for(var k in constantMap){
11446
- Shader._applyConstRenderStates(renderState, parseInt(k), constantMap[k]);
11372
+ Shader._applyConstRenderStates(renderState, +k, constantMap[k]);
11447
11373
  }
11374
+ shaderPass._renderState = renderState;
11448
11375
  // Parse variable render state
11449
11376
  var renderStateDataMap = {};
11450
11377
  for(var k1 in variableMap){
11451
11378
  renderStateDataMap[k1] = ShaderProperty.getByName(variableMap[k1]);
11452
11379
  }
11453
- shaderPassContent._renderStateDataMap = renderStateDataMap;
11380
+ shaderPass._renderStateDataMap = renderStateDataMap;
11454
11381
  }
11455
- return shaderPassContent;
11382
+ return shaderPass;
11456
11383
  });
11457
- return new SubShader(subShaderContent.name, passList, subShaderContent.tags);
11384
+ return new SubShader(subShaderSource.name, passList, subShaderSource.tags);
11458
11385
  });
11459
- shader = new Shader(shaderContent.name, subShaderList);
11460
- shaderMap[shaderContent.name] = shader;
11386
+ shader = new Shader(shaderSource.name, subShaderList);
11387
+ shaderMap[shaderSource.name] = shader;
11461
11388
  return shader;
11462
11389
  } else {
11463
11390
  if (shaderMap[nameOrShaderSource]) {
11464
11391
  console.error('Shader named "' + nameOrShaderSource + '" already exists.');
11465
11392
  return;
11466
11393
  }
11467
- if (typeof vertexSourceOrShaderPassesOrSubShaders === "string") {
11468
- var shaderPass = new ShaderPass(vertexSourceOrShaderPassesOrSubShaders, fragmentSource);
11394
+ if (typeof vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget === "string") {
11395
+ var shaderPass = new ShaderPass(vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget, fragmentSourceOrPath);
11469
11396
  shader = new Shader(nameOrShaderSource, [
11470
11397
  new SubShader("Default", [
11471
11398
  shaderPass
11472
11399
  ])
11473
11400
  ]);
11474
11401
  } else {
11475
- if (vertexSourceOrShaderPassesOrSubShaders.length > 0) {
11476
- if (vertexSourceOrShaderPassesOrSubShaders[0].constructor === ShaderPass) {
11402
+ if (vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget.length > 0) {
11403
+ if (vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget[0].constructor === ShaderPass) {
11477
11404
  shader = new Shader(nameOrShaderSource, [
11478
- new SubShader("Default", vertexSourceOrShaderPassesOrSubShaders)
11405
+ new SubShader("Default", vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget)
11479
11406
  ]);
11480
11407
  } else {
11481
- shader = new Shader(nameOrShaderSource, vertexSourceOrShaderPassesOrSubShaders.slice());
11408
+ shader = new Shader(nameOrShaderSource, vertexSourceOrShaderPassesOrSubShadersOrPlatformTarget.slice());
11482
11409
  }
11483
11410
  } else {
11484
11411
  throw "SubShader or ShaderPass count must large than 0.";
@@ -30546,8 +30473,8 @@
30546
30473
  ParticleBufferUtils.boundsFloatStride = 8;
30547
30474
  ParticleBufferUtils.boundsTimeOffset = 6;
30548
30475
  ParticleBufferUtils.boundsMaxLifetimeOffset = 7;
30549
- var blitFs = "#include <common>\n\nuniform mediump sampler2D renderer_BlitTexture;\n#ifdef HAS_TEX_LOD\n\tuniform float renderer_BlitMipLevel;\n#endif\n\nuniform vec4 renderer_SourceScaleOffset;\n\nvarying vec2 v_uv;\n\nvoid main() {\n\tvec2 uv = v_uv;\n\tuv = uv * renderer_SourceScaleOffset.xy + renderer_SourceScaleOffset.zw;\n\n\t#ifdef HAS_TEX_LOD\n\t\tgl_FragColor = texture2DLodSRGB( renderer_BlitTexture, uv, renderer_BlitMipLevel );\n\t#else\n\t\tgl_FragColor = texture2DSRGB( renderer_BlitTexture, uv );\n\t#endif\n}\n\n"; // eslint-disable-line
30550
- var blitScreenFs = "#include <common>\n\nuniform mediump sampler2D renderer_BlitTexture;\n#ifdef HAS_TEX_LOD\n\tuniform float renderer_BlitMipLevel;\n#endif\n\nvarying vec2 v_uv;\n\nvoid main() {\n\tvec2 uv = v_uv;\n\t// Screen uv is flipped\n\tuv.y = 1.0 - uv.y;\n\n\t#ifdef HAS_TEX_LOD\n\t\tgl_FragColor = texture2DLodSRGB( renderer_BlitTexture, uv, renderer_BlitMipLevel );\n\t#else\n\t\tgl_FragColor = texture2D( renderer_BlitTexture, uv );\n\t#endif\n\n\t// Color space in screen is in gamma space but without sRGB texture, so we need to convert it to linear space manually\n\tgl_FragColor = sRGBToLinear(gl_FragColor);\n}\n\n"; // eslint-disable-line
30476
+ var blitFs = "#include <common>\n\nuniform mediump sampler2D renderer_BlitTexture;\n#ifdef HAS_TEX_LOD\n\tuniform float renderer_BlitMipLevel;\n#endif\n\nuniform vec4 renderer_SourceScaleOffset;\n\nvarying vec2 v_uv;\n\n#ifdef HAS_TEX_LOD\n\tvec4 texture2DLodSRGB(sampler2D tex, vec2 uv, float lod) {\n\t\tvec4 color = texture2DLodEXT(tex, uv, lod);\n\t\t#ifdef ENGINE_NO_SRGB\n\t\t\tcolor = sRGBToLinear(color);\n\t\t#endif\n\t\treturn color;\n\t}\n#endif\n\nvoid main() {\n\tvec2 uv = v_uv;\n\tuv = uv * renderer_SourceScaleOffset.xy + renderer_SourceScaleOffset.zw;\n\n\t#ifdef HAS_TEX_LOD\n\t\tgl_FragColor = texture2DLodSRGB( renderer_BlitTexture, uv, renderer_BlitMipLevel );\n\t#else\n\t\tgl_FragColor = texture2DSRGB( renderer_BlitTexture, uv );\n\t#endif\n}\n\n"; // eslint-disable-line
30477
+ var blitScreenFs = "#include <common>\n\nuniform mediump sampler2D renderer_BlitTexture;\n#ifdef HAS_TEX_LOD\n\tuniform float renderer_BlitMipLevel;\n#endif\n\nvarying vec2 v_uv;\n\n#ifdef HAS_TEX_LOD\n\tvec4 texture2DLodSRGB(sampler2D tex, vec2 uv, float lod) {\n\t\tvec4 color = texture2DLodEXT(tex, uv, lod);\n\t\t#ifdef ENGINE_NO_SRGB\n\t\t\tcolor = sRGBToLinear(color);\n\t\t#endif\n\t\treturn color;\n\t}\n#endif\n\nvoid main() {\n\tvec2 uv = v_uv;\n\t// Screen uv is flipped\n\tuv.y = 1.0 - uv.y;\n\n\t#ifdef HAS_TEX_LOD\n\t\tgl_FragColor = texture2DLodSRGB( renderer_BlitTexture, uv, renderer_BlitMipLevel );\n\t#else\n\t\tgl_FragColor = texture2D( renderer_BlitTexture, uv );\n\t#endif\n\n\t// Color space in screen is in gamma space but without sRGB texture, so we need to convert it to linear space manually\n\tgl_FragColor = sRGBToLinear(gl_FragColor);\n}\n\n"; // eslint-disable-line
30551
30478
  var skyProceduralFs = "// This code uses the Unity skybox-Procedural shader algorithm, developed by Unity and licensed under the Unity Companion License. \n// The original implementation can be found at unity build-in shader(DefaultResourcesExtra/Skybox-Procedural.shader)\n\n#include <common>\n\nconst float MIE_G = -0.990;\nconst float MIE_G2 = 0.9801;\nconst float SKY_GROUND_THRESHOLD = 0.02;\n\nuniform float material_SunSize;\nuniform float material_SunSizeConvergence;\nuniform vec4 scene_SunlightColor;\nuniform vec3 scene_SunlightDirection;\n\nvarying vec3 v_GroundColor;\nvarying vec3 v_SkyColor;\n\n#ifdef MATERIAL_SUN_HIGH_QUALITY\n\tvarying vec3 v_Vertex;\n#elif defined(MATERIAL_SUN_SIMPLE)\n\tvarying vec3 v_RayDir;\n#else\n\tvarying float v_SkyGroundFactor;\n#endif\n\n#if defined(MATERIAL_SUN_HIGH_QUALITY)||defined(MATERIAL_SUN_SIMPLE)\n\tvarying vec3 v_SunColor;\n#endif\n\n// Calculates the Mie phase function\nfloat getMiePhase(float eyeCos, float eyeCos2) {\n\tfloat temp = 1.0 + MIE_G2 - 2.0 * MIE_G * eyeCos;\n\ttemp = pow(temp, pow(material_SunSize,0.65) * 10.0);\n\ttemp = max(temp,1.0e-4); // prevent division by zero, esp. in half precision\n\ttemp = 1.5 * ((1.0 - MIE_G2) / (2.0 + MIE_G2)) * (1.0 + eyeCos2) / temp;\n\treturn temp;\n}\n\n// Calculates the sun shape\nfloat calcSunAttenuation(vec3 lightPos, vec3 ray) {\n\t#ifdef MATERIAL_SUN_HIGH_QUALITY\n\t\tfloat focusedEyeCos = pow(clamp(dot(lightPos, ray),0.0,1.0), material_SunSizeConvergence);\n\t\treturn getMiePhase(-focusedEyeCos, focusedEyeCos * focusedEyeCos);\n\t#else //MATERIAL_SUN_SIMPLE\n\t\tvec3 delta = lightPos - ray;\n\t\tfloat dist = length(delta);\n\t\tfloat spot = 1.0 - smoothstep(0.0, material_SunSize, dist);\n\t\treturn spot * spot;\n\t#endif\n}\n\nvoid main() {\n\t// if y > 1 [eyeRay.y < -SKY_GROUND_THRESHOLD] - ground\n\t// if y >= 0 and < 1 [eyeRay.y <= 0 and > -SKY_GROUND_THRESHOLD] - horizon\n\t// if y < 0 [eyeRay.y > 0] - sky\n\tvec3 col = vec3(0.0, 0.0, 0.0);\n\n\t#ifdef MATERIAL_SUN_HIGH_QUALITY\n\t\tvec3 ray = normalize(v_Vertex);\n\t\tfloat y = ray.y / SKY_GROUND_THRESHOLD;\n\t#elif defined(MATERIAL_SUN_SIMPLE) \n\t\tvec3 ray = v_RayDir;\n\t\tfloat y = ray.y / SKY_GROUND_THRESHOLD;\t\n\t#else\n\t\tfloat y = v_SkyGroundFactor;\n\t#endif\n\n\t// if we did precalculate color in vprog: just do lerp between them\n\tcol = mix(v_SkyColor, v_GroundColor, clamp(y,0.0,1.0));\n\n\t#if defined(MATERIAL_SUN_HIGH_QUALITY)||defined(MATERIAL_SUN_SIMPLE)\n\t\tif (y < 0.0)\n\t\t\tcol += v_SunColor * calcSunAttenuation(-scene_SunlightDirection, -ray);\n\t#endif\n\n\n\tgl_FragColor = vec4(col, 1.0);\n}\n\n"; // eslint-disable-line
30552
30479
  var skyProceduralVs = "// This code uses the Unity skybox-Procedural shader algorithm, developed by Unity and licensed under the Unity Companion License. \n// The original implementation can be found at unity build-in shader(DefaultResourcesExtra/Skybox-Procedural.shader)\n\n#define OUTER_RADIUS 1.025\n#define RAYLEIGH (mix(0.0, 0.0025, pow(material_AtmosphereThickness,2.5)))\t// Rayleigh constant\n#define MIE 0.0010\t// Mie constant\n#define SUN_BRIGHTNESS 20.0\t// Sun brightness\n#define MAX_SCATTER 50.0 // Maximum scattering value, to prevent math overflows on Adrenos\n\nconst float SKY_GROUND_THRESHOLD = 0.02;\nconst float outerRadius = OUTER_RADIUS;\nconst float outerRadius2 = OUTER_RADIUS*OUTER_RADIUS;\nconst float innerRadius = 1.0;\nconst float innerRadius2 = 1.0;\nconst float cameraHeight = 0.0001;\n\nconst float HDSundiskIntensityFactor = 15.0;\nconst float simpleSundiskIntensityFactor = 27.0;\n\nconst float sunScale = 400.0 * SUN_BRIGHTNESS;\nconst float kmESun = MIE * SUN_BRIGHTNESS;\nconst float km4PI = MIE * 4.0 * 3.14159265;\nconst float scale = 1.0 / (OUTER_RADIUS - 1.0);\nconst float scaleDepth = 0.25;\nconst float scaleOverScaleDepth = (1.0 / (OUTER_RADIUS - 1.0)) / 0.25;\nconst float samples = 2.0; // THIS IS UNROLLED MANUALLY, DON'T TOUCH\n\n// RGB wavelengths .35 (.62=158), .43 (.68=174), .525 (.75=190)\nconst vec3 c_DefaultScatteringWavelength = vec3(0.65, 0.57, 0.475);\nconst vec3 c_VariableRangeForScatteringWavelength = vec3(0.15, 0.15, 0.15);\n\nattribute vec4 POSITION;\n\nuniform mat4 camera_VPMat;\nuniform vec3 material_SkyTint;\nuniform vec3 material_GroundTint;\nuniform float material_Exposure;\nuniform float material_AtmosphereThickness;\nuniform vec4 scene_SunlightColor;\nuniform vec3 scene_SunlightDirection;\n\nvarying vec3 v_GroundColor;\nvarying vec3 v_SkyColor;\n\n#ifdef MATERIAL_SUN_HIGH_QUALITY\n\tvarying vec3 v_Vertex;\n#elif defined(MATERIAL_SUN_SIMPLE)\n\tvarying vec3 v_RayDir;\n#else\n\tvarying float v_SkyGroundFactor;\n#endif\n\n#if defined(MATERIAL_SUN_HIGH_QUALITY)||defined(MATERIAL_SUN_SIMPLE)\n\tvarying vec3 v_SunColor;\n#endif\n\n#define GAMMA 2.2\n#define COLOR_2_GAMMA(color) pow(color,vec3(1.0/GAMMA))\n#define COLOR_2_LINEAR(color) color\n\n// Calculates the Rayleigh phase function\nfloat getRayleighPhase(vec3 light, vec3 ray) \n{\n\tfloat eyeCos = dot(light, ray);\n\treturn 0.75 + 0.75 * eyeCos * eyeCos;\n}\n\nfloat scaleAngle(float inCos)\n{\n\tfloat x = 1.0 - inCos;\n\treturn 0.25 * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.80 + x*5.25))));\n}\n\nvoid main () {\n\tgl_Position = camera_VPMat*vec4(POSITION.xyz,1.0);\n\n \tvec3 skyTintInGammaSpace = COLOR_2_GAMMA(material_SkyTint);\n\tvec3 scatteringWavelength = mix(c_DefaultScatteringWavelength-c_VariableRangeForScatteringWavelength,c_DefaultScatteringWavelength+c_VariableRangeForScatteringWavelength,vec3(1.0) - skyTintInGammaSpace); // using Tint in sRGB+ gamma allows for more visually linear interpolation and to keep (0.5) at (128, gray in sRGB) point\n\tvec3 invWavelength = 1.0 / pow(scatteringWavelength, vec3(4.0));\n\n\tfloat krESun = RAYLEIGH * SUN_BRIGHTNESS;\n\tfloat kr4PI = RAYLEIGH * 4.0 * 3.14159265;\n\n\tvec3 cameraPos = vec3(0.0,innerRadius + cameraHeight,0.0); // The camera's current position\n\n\t// Get the ray from the camera to the vertex and its length (which is the far point of the ray passing through the atmosphere)\n\tvec3 eyeRay = normalize(POSITION.xyz);\n\n\tfloat far = 0.0;\n\tvec3 cIn, cOut;\n\tif (eyeRay.y >= 0.0) {\n\t\t// Sky \n\t\t// Calculate the length of the \"atmosphere\"\n\t\tfar = sqrt(outerRadius2 + innerRadius2 * eyeRay.y * eyeRay.y - innerRadius2) - innerRadius * eyeRay.y;\n\n\t\t// Calculate the ray's starting position, then calculate its scattering offset\n\t\tfloat height = innerRadius + cameraHeight;\n\t\tfloat depth = exp(scaleOverScaleDepth * -cameraHeight);\n\t\tfloat startAngle = dot(eyeRay, cameraPos) / height;\n\t\tfloat startOffset = depth*scaleAngle(startAngle);\n\n\t\t// Initialize the scattering loop variables\n\t\tfloat sampleLength = far / samples;\n\t\tfloat scaledLength = sampleLength * scale;\n\t\tvec3 sampleRay = eyeRay * sampleLength;\n\t\tvec3 samplePoint = cameraPos + sampleRay * 0.5;\n\n\t\tvec3 frontColor = vec3(0.0);\n\t\t//unrolling this manually to avoid some platform for loop slow\n\t\t{\n\t\t\tfloat height = length(samplePoint);\n\t\t\tfloat depth = exp(scaleOverScaleDepth * (innerRadius - height));\n\t\t\tfloat lightAngle = dot(-scene_SunlightDirection, samplePoint) / height;\n\t\t\tfloat cameraAngle = dot(eyeRay, samplePoint) / height;\n\t\t\tfloat scatter = (startOffset + depth*(scaleAngle(lightAngle) - scaleAngle(cameraAngle)));\n\t\t\tvec3 attenuate = exp(-clamp(scatter, 0.0, MAX_SCATTER) * (invWavelength * kr4PI + km4PI));\n\n\t\t\tfrontColor += attenuate * (depth * scaledLength);\n\t\t\tsamplePoint += sampleRay;\n\t\t}\n\t\t{\n\t\t\tfloat height = length(samplePoint);\n\t\t\tfloat depth = exp(scaleOverScaleDepth * (innerRadius - height));\n\t\t\tfloat lightAngle = dot(-scene_SunlightDirection, samplePoint) / height;\n\t\t\tfloat cameraAngle = dot(eyeRay, samplePoint) / height;\n\t\t\tfloat scatter = (startOffset + depth*(scaleAngle(lightAngle) - scaleAngle(cameraAngle)));\n\t\t\tvec3 attenuate = exp(-clamp(scatter, 0.0, MAX_SCATTER) * (invWavelength * kr4PI + km4PI));\n\n\t\t\tfrontColor += attenuate * (depth * scaledLength);\n\t\t\tsamplePoint += sampleRay;\n\t\t}\n\n\t\t// Finally, scale the Mie and Rayleigh colors and set up the varying variables for the pixel shader\n\t\tcIn = frontColor * (invWavelength * krESun);\n\t\tcOut = frontColor * kmESun;\n\t} else {\n\t\t// Ground\n\t\tfar = (-cameraHeight) / (min(-0.001, eyeRay.y));\n\t\tvec3 pos = cameraPos + far * eyeRay;\n\n\t\t// Calculate the ray's starting position, then calculate its scattering offset\n\t\tfloat depth = exp((-cameraHeight) * (1.0/scaleDepth));\n\t\tfloat cameraAngle = dot(-eyeRay, pos);\n\t\tfloat lightAngle = dot(-scene_SunlightDirection, pos);\n\t\tfloat cameraScale = scaleAngle(cameraAngle);\n\t\tfloat lightScale = scaleAngle(lightAngle);\n\t\tfloat cameraOffset = depth*cameraScale;\n\t\tfloat temp = lightScale + cameraScale;\n\n\t\t// Initialize the scattering loop variables\n\t\tfloat sampleLength = far / samples;\n\t\tfloat scaledLength = sampleLength * scale;\n\t\tvec3 sampleRay = eyeRay * sampleLength;\n\t\tvec3 samplePoint = cameraPos + sampleRay * 0.5;\n\n\t\t// Now loop through the sample rays\n\t\tvec3 frontColor = vec3(0.0, 0.0, 0.0);\n\t\tvec3 attenuate;\n\n\t\t// Loop removed because we kept hitting SM2.0 temp variable limits. Doesn't affect the image too much\n\t\t{\n\t\t\tfloat height = length(samplePoint);\n\t\t\tfloat depth = exp(scaleOverScaleDepth * (innerRadius - height));\n\t\t\tfloat scatter = depth*temp - cameraOffset;\n\t\t\tattenuate = exp(-clamp(scatter, 0.0, MAX_SCATTER) * (invWavelength * kr4PI + km4PI));\n\t\t\tfrontColor += attenuate * (depth * scaledLength);\n\t\t\tsamplePoint += sampleRay;\n\t\t}\n\n\t\tcIn = frontColor * (invWavelength * krESun + kmESun);\n\t\tcOut = clamp(attenuate, 0.0, 1.0);\n\t}\n\n\t#ifdef MATERIAL_SUN_HIGH_QUALITY\n\t\tv_Vertex = -POSITION.xyz;\n\t#elif defined(MATERIAL_SUN_SIMPLE) \n\t\tv_RayDir = -eyeRay;\n\t#else\n\t\tv_SkyGroundFactor = -eyeRay.y / SKY_GROUND_THRESHOLD;\n\t#endif\n\n\t// if we want to calculate color in vprog:\n\t// 1. in case of linear: multiply by _Exposure in here (even in case of lerp it will be common multiplier, so we can skip mul in fshader)\n\t// 2. in case of gamma: do sqrt right away instead of doing that in fshader\n\t\n\tv_GroundColor = material_Exposure * (cIn + COLOR_2_LINEAR(material_GroundTint) * cOut);\n\tv_SkyColor = material_Exposure * (cIn * getRayleighPhase(-scene_SunlightDirection, -eyeRay));\n\n\t\n\t// The sun should have a stable intensity in its course in the sky. Moreover it should match the highlight of a purely specular material.\n\t// This matching was done using the standard shader BRDF1 on the 5/31/2017\n\t// Finally we want the sun to be always bright even in LDR thus the normalization of the lightColor for low intensity.\n\tfloat lightColorIntensity = clamp(length(scene_SunlightColor.xyz), 0.25, 1.0);\n\n\t#ifdef MATERIAL_SUN_HIGH_QUALITY \n\t\tv_SunColor = HDSundiskIntensityFactor * clamp(cOut,0.0,1.0) * scene_SunlightColor.xyz / lightColorIntensity;\n\t#elif defined(MATERIAL_SUN_SIMPLE) \n\t\tv_SunColor = simpleSundiskIntensityFactor * clamp(cOut * sunScale,0.0,1.0) * scene_SunlightColor.xyz / lightColorIntensity;\n\t#endif\n}\n"; // eslint-disable-line
30553
30480
  var backgroundTextureFs = "#include <common>\nuniform sampler2D material_BaseTexture;\n\nvarying vec2 v_uv;\n\nvoid main() {\n gl_FragColor = texture2DSRGB(material_BaseTexture, v_uv);\n}"; // eslint-disable-line
@@ -32973,6 +32900,38 @@
32973
32900
  Scene._fogColorProperty = ShaderProperty.getByName("scene_FogColor");
32974
32901
  Scene._fogParamsProperty = ShaderProperty.getByName("scene_FogParams");
32975
32902
  Scene._prefilterdDFGProperty = ShaderProperty.getByName("scene_PrefilteredDFG");
32903
+ function _array_like_to_array$1(arr, len) {
32904
+ if (len == null || len > arr.length) len = arr.length;
32905
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
32906
+ return arr2;
32907
+ }
32908
+ function _unsupported_iterable_to_array$1(o, minLen) {
32909
+ if (!o) return;
32910
+ if (typeof o === "string") return _array_like_to_array$1(o, minLen);
32911
+ var n = Object.prototype.toString.call(o).slice(8, -1);
32912
+ if (n === "Object" && o.constructor) n = o.constructor.name;
32913
+ if (n === "Map" || n === "Set") return Array.from(n);
32914
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array$1(o, minLen);
32915
+ }
32916
+ function _create_for_of_iterator_helper_loose$1(o, allowArrayLike) {
32917
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
32918
+ if (it) return (it = it.call(o)).next.bind(it);
32919
+ // Fallback for engines without symbol support
32920
+ if (Array.isArray(o) || (it = _unsupported_iterable_to_array$1(o)) || allowArrayLike && o && typeof o.length === "number") {
32921
+ if (it) o = it;
32922
+ var i = 0;
32923
+ return function() {
32924
+ if (i >= o.length) return {
32925
+ done: true
32926
+ };
32927
+ return {
32928
+ done: false,
32929
+ value: o[i++]
32930
+ };
32931
+ };
32932
+ }
32933
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
32934
+ }
32976
32935
  /**
32977
32936
  * Script class, used for logic writing.
32978
32937
  */ var Script = /*#__PURE__*/ function(Component) {
@@ -42048,7 +42007,7 @@
42048
42007
  RenderQueueFlags: RenderQueueFlags,
42049
42008
  RenderQueueType: RenderQueueType,
42050
42009
  RenderState: RenderState,
42051
- RenderStateDataKey: RenderStateElementKey,
42010
+ RenderStateElementKey: RenderStateElementKey,
42052
42011
  RenderTarget: RenderTarget,
42053
42012
  RenderTargetBlendState: RenderTargetBlendState,
42054
42013
  get Renderer () { return exports.Renderer; },
@@ -42066,11 +42025,11 @@
42066
42025
  ShaderData: ShaderData,
42067
42026
  ShaderDataGroup: ShaderDataGroup,
42068
42027
  ShaderFactory: ShaderFactory,
42028
+ ShaderLanguage: ShaderLanguage,
42069
42029
  ShaderLib: ShaderLib,
42070
42030
  ShaderMacro: ShaderMacro,
42071
42031
  ShaderMacroCollection: ShaderMacroCollection,
42072
42032
  ShaderPass: ShaderPass,
42073
- ShaderPlatformTarget: ShaderPlatformTarget,
42074
42033
  ShaderProperty: ShaderProperty,
42075
42034
  ShaderPropertyType: ShaderPropertyType,
42076
42035
  ShaderTagKey: ShaderTagKey,
@@ -50899,9 +50858,7 @@
50899
50858
  return Shader.find(builtinShader);
50900
50859
  }
50901
50860
  return ShaderChunkLoader._loadChunksInCode(code, url, resourceManager).then(function() {
50902
- var shader = Shader.create(code);
50903
- // @ts-ignore
50904
- shader._registerPath(url);
50861
+ var shader = Shader.create(code, undefined, url);
50905
50862
  return shader;
50906
50863
  });
50907
50864
  });
@@ -51581,7 +51538,7 @@
51581
51538
  ], EXT_texture_webp);
51582
51539
 
51583
51540
  //@ts-ignore
51584
- var version = "1.6.0-alpha.2";
51541
+ var version = "1.6.0-beta.0";
51585
51542
  console.log("Galacean Engine Version: " + version);
51586
51543
  for(var key in CoreObjects){
51587
51544
  Loader.registerClass(key, CoreObjects[key]);
@@ -51804,7 +51761,7 @@
51804
51761
  exports.RenderQueueFlags = RenderQueueFlags;
51805
51762
  exports.RenderQueueType = RenderQueueType;
51806
51763
  exports.RenderState = RenderState;
51807
- exports.RenderStateDataKey = RenderStateElementKey;
51764
+ exports.RenderStateElementKey = RenderStateElementKey;
51808
51765
  exports.RenderTarget = RenderTarget;
51809
51766
  exports.RenderTargetBlendState = RenderTargetBlendState;
51810
51767
  exports.RendererUpdateFlags = RendererUpdateFlags;
@@ -51822,11 +51779,11 @@
51822
51779
  exports.ShaderData = ShaderData;
51823
51780
  exports.ShaderDataGroup = ShaderDataGroup;
51824
51781
  exports.ShaderFactory = ShaderFactory;
51782
+ exports.ShaderLanguage = ShaderLanguage;
51825
51783
  exports.ShaderLib = ShaderLib;
51826
51784
  exports.ShaderMacro = ShaderMacro;
51827
51785
  exports.ShaderMacroCollection = ShaderMacroCollection;
51828
51786
  exports.ShaderPass = ShaderPass;
51829
- exports.ShaderPlatformTarget = ShaderPlatformTarget;
51830
51787
  exports.ShaderProperty = ShaderProperty;
51831
51788
  exports.ShaderPropertyType = ShaderPropertyType;
51832
51789
  exports.ShaderTagKey = ShaderTagKey;