@galacean/engine-core 1.0.0-beta.6 → 1.0.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -9517,11 +9517,11 @@ var camera_declare = "#define GLSLIFY 1\nuniform vec3 camera_Position;"; // esli
9517
9517
 
9518
9518
  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);}\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
9519
9519
 
9520
- 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_HAS_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
9520
+ 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
9521
9521
 
9522
9522
  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
9523
9523
 
9524
- var color_share = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_VERTEXCOLOR\nvarying vec4 v_color;\n#endif\n"; // eslint-disable-line
9524
+ var color_share = "#define GLSLIFY 1\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nvarying vec4 v_color;\n#endif\n"; // eslint-disable-line
9525
9525
 
9526
9526
  var FogFragmentDeclaration = "#define GLSLIFY 1\n#if SCENE_FOG_MODE != 0\nvarying vec3 v_positionVS;uniform vec4 scene_FogColor;uniform vec4 scene_FogParams;float ComputeFogIntensity(float fogDepth){\n#if SCENE_FOG_MODE == 1\nreturn clamp(fogDepth*scene_FogParams.x+scene_FogParams.y,0.0,1.0);\n#elif SCENE_FOG_MODE == 2\nreturn clamp(exp2(-fogDepth*scene_FogParams.z),0.0,1.0);\n#elif SCENE_FOG_MODE == 3\nfloat factor=fogDepth*scene_FogParams.w;return clamp(exp2(-factor*factor),0.0,1.0);\n#endif\n}\n#endif\n"; // eslint-disable-line
9527
9527
 
@@ -9541,7 +9541,7 @@ var blendShape_input = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_BLENDSHAPE\n#ifde
9541
9541
 
9542
9542
  var blendShape_vert = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_BLENDSHAPE\n#ifdef RENDERER_BLENDSHAPE_USE_TEXTURE\nint vertexOffset=gl_VertexID*renderer_BlendShapeTextureInfo.x;for(int i=0;i<RENDERER_BLENDSHAPE_COUNT;i++){int vertexElementOffset=vertexOffset;float weight=renderer_BlendShapeWeights[i];position.xyz+=getBlendShapeVertexElement(i,vertexElementOffset)*weight;\n#ifndef MATERIAL_OMIT_NORMAL\n#if defined( RENDERER_HAS_NORMAL ) && defined( RENDERER_BLENDSHAPE_HAS_NORMAL )\nvertexElementOffset+=1;normal+=getBlendShapeVertexElement(i,vertexElementOffset)*weight;\n#endif\n#if defined( RENDERER_HAS_TANGENT ) && defined(RENDERER_BLENDSHAPE_HAS_TANGENT) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\nvertexElementOffset+=1;tangent.xyz+=getBlendShapeVertexElement(i,vertexElementOffset)*weight;\n#endif\n#endif\n}\n#else\nposition.xyz+=POSITION_BS0*renderer_BlendShapeWeights[0];position.xyz+=POSITION_BS1*renderer_BlendShapeWeights[1];\n#if defined( RENDERER_BLENDSHAPE_HAS_NORMAL ) && defined( RENDERER_BLENDSHAPE_HAS_TANGENT )\n#ifndef MATERIAL_OMIT_NORMAL\n#ifdef RENDERER_HAS_NORMAL\nnormal+=NORMAL_BS0*renderer_BlendShapeWeights[0];normal+=NORMAL_BS1*renderer_BlendShapeWeights[1];\n#endif\n#if defined( RENDERER_HAS_TANGENT ) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\ntangent.xyz+=TANGENT_BS0*renderer_BlendShapeWeights[0];tangent.xyz+=TANGENT_BS1*renderer_BlendShapeWeights[1];\n#endif\n#endif\n#else\n#if defined( RENDERER_BLENDSHAPE_HAS_NORMAL ) || defined( RENDERER_BLENDSHAPE_HAS_TANGENT )\n#ifndef MATERIAL_OMIT_NORMAL\nposition.xyz+=POSITION_BS2*renderer_BlendShapeWeights[2];position.xyz+=POSITION_BS3*renderer_BlendShapeWeights[3];\n#if defined( RENDERER_BLENDSHAPE_HAS_NORMAL ) && defined( RENDERER_HAS_NORMAL )\nnormal+=NORMAL_BS0*renderer_BlendShapeWeights[0];normal+=NORMAL_BS1*renderer_BlendShapeWeights[1];normal+=NORMAL_BS2*renderer_BlendShapeWeights[2];normal+=NORMAL_BS3*renderer_BlendShapeWeights[3];\n#endif\n#if defined(RENDERER_BLENDSHAPE_HAS_TANGENT) && defined( RENDERER_HAS_TANGENT ) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\ntangent.xyz+=TANGENT_BS0*renderer_BlendShapeWeights[0];tangent.xyz+=TANGENT_BS1*renderer_BlendShapeWeights[1];tangent.xyz+=TANGENT_BS2*renderer_BlendShapeWeights[2];tangent.xyz+=TANGENT_BS3*renderer_BlendShapeWeights[3];\n#endif\n#endif\n#else\nposition.xyz+=POSITION_BS2*renderer_BlendShapeWeights[2];position.xyz+=POSITION_BS3*renderer_BlendShapeWeights[3];position.xyz+=POSITION_BS4*renderer_BlendShapeWeights[4];position.xyz+=POSITION_BS5*renderer_BlendShapeWeights[5];position.xyz+=POSITION_BS6*renderer_BlendShapeWeights[6];position.xyz+=POSITION_BS7*renderer_BlendShapeWeights[7];\n#endif\n#endif\n#endif\n#endif\n"; // eslint-disable-line
9543
9543
 
9544
- var color_vert = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_VERTEXCOLOR\nv_color=COLOR_0;\n#endif\n"; // eslint-disable-line
9544
+ var color_vert = "#define GLSLIFY 1\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nv_color=COLOR_0;\n#endif\n"; // eslint-disable-line
9545
9545
 
9546
9546
  var FogVertex = "#define GLSLIFY 1\n#if SCENE_FOG_MODE != 0\nvec4 positionVS=renderer_MVMat*position;v_positionVS=positionVS.xyz/positionVS.w;\n#endif\n"; // eslint-disable-line
9547
9547
 
@@ -9561,7 +9561,7 @@ var light_frag_define = "#define GLSLIFY 1\n#ifdef SCENE_DIRECT_LIGHT_COUNT\nstr
9561
9561
 
9562
9562
  var mobile_material_frag = "#define GLSLIFY 1\nuniform vec4 material_EmissiveColor;uniform vec4 material_BaseColor;uniform vec4 material_SpecularColor;uniform float material_Shininess;uniform float material_NormalIntensity;uniform float material_AlphaCutoff;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nuniform sampler2D material_EmissiveTexture;\n#endif\n#ifdef MATERIAL_HAS_BASETEXTURE\nuniform sampler2D material_BaseTexture;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_TEXTURE\nuniform sampler2D material_SpecularTexture;\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\nuniform sampler2D material_NormalTexture;\n#endif\n"; // eslint-disable-line
9563
9563
 
9564
- var begin_mobile_frag = "#define GLSLIFY 1\nvec4 ambient=vec4(0.0);vec4 emission=material_EmissiveColor;vec4 diffuse=material_BaseColor;vec4 specular=material_SpecularColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nvec4 emissiveTextureColor=texture2D(material_EmissiveTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nemissiveTextureColor=gammaToLinear(emissiveTextureColor);\n#endif\nemission*=emissiveTextureColor;\n#endif\n#ifdef MATERIAL_HAS_BASETEXTURE\nvec4 diffuseTextureColor=texture2D(material_BaseTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\ndiffuseTextureColor=gammaToLinear(diffuseTextureColor);\n#endif\ndiffuse*=diffuseTextureColor;\n#endif\n#ifdef RENDERER_HAS_VERTEXCOLOR\ndiffuse*=v_color;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_TEXTURE\nvec4 specularTextureColor=texture2D(material_SpecularTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nspecularTextureColor=gammaToLinear(specularTextureColor);\n#endif\nspecular*=specularTextureColor;\n#endif\nambient=vec4(scene_EnvMapLight.diffuse*scene_EnvMapLight.diffuseIntensity,1.0)*diffuse;"; // eslint-disable-line
9564
+ var begin_mobile_frag = "#define GLSLIFY 1\nvec4 ambient=vec4(0.0);vec4 emission=material_EmissiveColor;vec4 diffuse=material_BaseColor;vec4 specular=material_SpecularColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nvec4 emissiveTextureColor=texture2D(material_EmissiveTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nemissiveTextureColor=gammaToLinear(emissiveTextureColor);\n#endif\nemission*=emissiveTextureColor;\n#endif\n#ifdef MATERIAL_HAS_BASETEXTURE\nvec4 diffuseTextureColor=texture2D(material_BaseTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\ndiffuseTextureColor=gammaToLinear(diffuseTextureColor);\n#endif\ndiffuse*=diffuseTextureColor;\n#endif\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\ndiffuse*=v_color;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_TEXTURE\nvec4 specularTextureColor=texture2D(material_SpecularTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nspecularTextureColor=gammaToLinear(specularTextureColor);\n#endif\nspecular*=specularTextureColor;\n#endif\nambient=vec4(scene_EnvMapLight.diffuse*scene_EnvMapLight.diffuseIntensity,1.0)*diffuse;"; // eslint-disable-line
9565
9565
 
9566
9566
  var begin_viewdir_frag = "#define GLSLIFY 1\n#ifdef MATERIAL_NEED_WORLD_POS\nvec3 V=normalize(camera_Position-v_pos);\n#endif\n"; // eslint-disable-line
9567
9567
 
@@ -9601,7 +9601,7 @@ var noise_simplex_4D = "#define GLSLIFY 1\nvec4 grad4(float j,vec4 ip){const vec
9601
9601
 
9602
9602
  var pbr_frag_define = "#define GLSLIFY 1\nuniform float material_AlphaCutoff;uniform vec4 material_BaseColor;uniform float material_Metal;uniform float material_Roughness;uniform float material_IOR;uniform vec3 material_PBRSpecularColor;uniform float material_Glossiness;uniform vec3 material_EmissiveColor;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nuniform float material_ClearCoat;uniform float material_ClearCoatRoughness;\n#endif\nuniform float material_NormalIntensity;uniform float material_OcclusionIntensity;uniform float material_OcclusionTextureCoord;\n#ifdef MATERIAL_HAS_BASETEXTURE\nuniform sampler2D material_BaseTexture;\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\nuniform sampler2D material_NormalTexture;\n#endif\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nuniform sampler2D material_EmissiveTexture;\n#endif\n#ifdef MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE\nuniform sampler2D material_RoughnessMetallicTexture;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_GLOSSINESS_TEXTURE\nuniform sampler2D material_SpecularGlossinessTexture;\n#endif\n#ifdef MATERIAL_HAS_OCCLUSION_TEXTURE\nuniform sampler2D material_OcclusionTexture;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_TEXTURE\nuniform sampler2D material_ClearCoatTexture;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE\nuniform sampler2D material_ClearCoatRoughnessTexture;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE\nuniform sampler2D material_ClearCoatNormalTexture;\n#endif\nstruct ReflectedLight{vec3 directDiffuse;vec3 directSpecular;vec3 indirectDiffuse;vec3 indirectSpecular;};struct Geometry{vec3 position;vec3 normal;vec3 viewDir;float dotNV;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nvec3 clearCoatNormal;float clearCoatDotNV;\n#endif\n};struct Material{vec3 diffuseColor;float roughness;vec3 specularColor;float opacity;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nfloat clearCoat;float clearCoatRoughness;\n#endif\n};"; // eslint-disable-line
9603
9603
 
9604
- var pbr_helper = "#define GLSLIFY 1\n#include <normal_get>\nfloat computeSpecularOcclusion(float ambientOcclusion,float roughness,float dotNV){return saturate(pow(dotNV+ambientOcclusion,exp2(-16.0*roughness-1.0))-1.0+ambientOcclusion);}float getAARoughnessFactor(vec3 normal){\n#ifdef HAS_DERIVATIVES\nvec3 dxy=max(abs(dFdx(normal)),abs(dFdy(normal)));return 0.04+max(max(dxy.x,dxy.y),dxy.z);\n#else\nreturn 0.04;\n#endif\n}void initGeometry(out Geometry geometry){geometry.position=v_pos;geometry.viewDir=normalize(camera_Position-v_pos);\n#if defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE)\nmat3 tbn=getTBN();\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\ngeometry.normal=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv);\n#else\ngeometry.normal=getNormal();\n#endif\ngeometry.dotNV=saturate(dot(geometry.normal,geometry.viewDir));\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\n#ifdef MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE\ngeometry.clearCoatNormal=getNormalByNormalTexture(tbn,material_ClearCoatNormalTexture,material_NormalIntensity,v_uv);\n#else\ngeometry.clearCoatNormal=getNormal();\n#endif\ngeometry.clearCoatDotNV=saturate(dot(geometry.clearCoatNormal,geometry.viewDir));\n#endif\n}void initMaterial(out Material material,const in Geometry geometry){vec4 baseColor=material_BaseColor;float metal=material_Metal;float roughness=material_Roughness;vec3 specularColor=material_PBRSpecularColor;float glossiness=material_Glossiness;float alphaCutoff=material_AlphaCutoff;float F0=pow2((material_IOR-1.0)/(material_IOR+1.0));\n#ifdef MATERIAL_HAS_BASETEXTURE\nvec4 baseTextureColor=texture2D(material_BaseTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nbaseTextureColor=gammaToLinear(baseTextureColor);\n#endif\nbaseColor*=baseTextureColor;\n#endif\n#ifdef RENDERER_HAS_VERTEXCOLOR\nbaseColor*=v_color;\n#endif\n#ifdef MATERIAL_IS_ALPHA_CUTOFF\nif(baseColor.a<alphaCutoff){discard;}\n#endif\n#ifdef MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE\nvec4 metalRoughMapColor=texture2D(material_RoughnessMetallicTexture,v_uv);roughness*=metalRoughMapColor.g;metal*=metalRoughMapColor.b;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_GLOSSINESS_TEXTURE\nvec4 specularGlossinessColor=texture2D(material_SpecularGlossinessTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nspecularGlossinessColor=gammaToLinear(specularGlossinessColor);\n#endif\nspecularColor*=specularGlossinessColor.rgb;glossiness*=specularGlossinessColor.a;\n#endif\n#ifdef IS_METALLIC_WORKFLOW\nmaterial.diffuseColor=baseColor.rgb*(1.0-metal);material.specularColor=mix(vec3(F0),baseColor.rgb,metal);material.roughness=roughness;\n#else\nfloat specularStrength=max(max(specularColor.r,specularColor.g),specularColor.b);material.diffuseColor=baseColor.rgb*(1.0-specularStrength);material.specularColor=specularColor;material.roughness=1.0-glossiness;\n#endif\nmaterial.roughness=max(material.roughness,getAARoughnessFactor(geometry.normal));\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nmaterial.clearCoat=material_ClearCoat;material.clearCoatRoughness=material_ClearCoatRoughness;\n#ifdef MATERIAL_HAS_CLEAR_COAT_TEXTURE\nmaterial.clearCoat*=texture2D(material_ClearCoatTexture,v_uv).r;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE\nmaterial.clearCoatRoughness*=texture2D(material_ClearCoatRoughnessTexture,v_uv).g;\n#endif\nmaterial.clearCoat=saturate(material.clearCoat);material.clearCoatRoughness=max(material.clearCoatRoughness,getAARoughnessFactor(geometry.clearCoatNormal));\n#endif\n#ifdef MATERIAL_IS_TRANSPARENT\nmaterial.opacity=baseColor.a;\n#else\nmaterial.opacity=1.0;\n#endif\n}\n#include <brdf>\n#include <direct_irradiance_frag_define>\n#include <ibl_frag_define>\n"; // eslint-disable-line
9604
+ var pbr_helper = "#define GLSLIFY 1\n#include <normal_get>\nfloat computeSpecularOcclusion(float ambientOcclusion,float roughness,float dotNV){return saturate(pow(dotNV+ambientOcclusion,exp2(-16.0*roughness-1.0))-1.0+ambientOcclusion);}float getAARoughnessFactor(vec3 normal){\n#ifdef HAS_DERIVATIVES\nvec3 dxy=max(abs(dFdx(normal)),abs(dFdy(normal)));return 0.04+max(max(dxy.x,dxy.y),dxy.z);\n#else\nreturn 0.04;\n#endif\n}void initGeometry(out Geometry geometry){geometry.position=v_pos;geometry.viewDir=normalize(camera_Position-v_pos);\n#if defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE)\nmat3 tbn=getTBN();\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\ngeometry.normal=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv);\n#else\ngeometry.normal=getNormal();\n#endif\ngeometry.dotNV=saturate(dot(geometry.normal,geometry.viewDir));\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\n#ifdef MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE\ngeometry.clearCoatNormal=getNormalByNormalTexture(tbn,material_ClearCoatNormalTexture,material_NormalIntensity,v_uv);\n#else\ngeometry.clearCoatNormal=getNormal();\n#endif\ngeometry.clearCoatDotNV=saturate(dot(geometry.clearCoatNormal,geometry.viewDir));\n#endif\n}void initMaterial(out Material material,const in Geometry geometry){vec4 baseColor=material_BaseColor;float metal=material_Metal;float roughness=material_Roughness;vec3 specularColor=material_PBRSpecularColor;float glossiness=material_Glossiness;float alphaCutoff=material_AlphaCutoff;float F0=pow2((material_IOR-1.0)/(material_IOR+1.0));\n#ifdef MATERIAL_HAS_BASETEXTURE\nvec4 baseTextureColor=texture2D(material_BaseTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nbaseTextureColor=gammaToLinear(baseTextureColor);\n#endif\nbaseColor*=baseTextureColor;\n#endif\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nbaseColor*=v_color;\n#endif\n#ifdef MATERIAL_IS_ALPHA_CUTOFF\nif(baseColor.a<alphaCutoff){discard;}\n#endif\n#ifdef MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE\nvec4 metalRoughMapColor=texture2D(material_RoughnessMetallicTexture,v_uv);roughness*=metalRoughMapColor.g;metal*=metalRoughMapColor.b;\n#endif\n#ifdef MATERIAL_HAS_SPECULAR_GLOSSINESS_TEXTURE\nvec4 specularGlossinessColor=texture2D(material_SpecularGlossinessTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nspecularGlossinessColor=gammaToLinear(specularGlossinessColor);\n#endif\nspecularColor*=specularGlossinessColor.rgb;glossiness*=specularGlossinessColor.a;\n#endif\n#ifdef IS_METALLIC_WORKFLOW\nmaterial.diffuseColor=baseColor.rgb*(1.0-metal);material.specularColor=mix(vec3(F0),baseColor.rgb,metal);material.roughness=roughness;\n#else\nfloat specularStrength=max(max(specularColor.r,specularColor.g),specularColor.b);material.diffuseColor=baseColor.rgb*(1.0-specularStrength);material.specularColor=specularColor;material.roughness=1.0-glossiness;\n#endif\nmaterial.roughness=max(material.roughness,getAARoughnessFactor(geometry.normal));\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nmaterial.clearCoat=material_ClearCoat;material.clearCoatRoughness=material_ClearCoatRoughness;\n#ifdef MATERIAL_HAS_CLEAR_COAT_TEXTURE\nmaterial.clearCoat*=texture2D(material_ClearCoatTexture,v_uv).r;\n#endif\n#ifdef MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE\nmaterial.clearCoatRoughness*=texture2D(material_ClearCoatRoughnessTexture,v_uv).g;\n#endif\nmaterial.clearCoat=saturate(material.clearCoat);material.clearCoatRoughness=max(material.clearCoatRoughness,getAARoughnessFactor(geometry.clearCoatNormal));\n#endif\n#ifdef MATERIAL_IS_TRANSPARENT\nmaterial.opacity=baseColor.a;\n#else\nmaterial.opacity=1.0;\n#endif\n}\n#include <brdf>\n#include <direct_irradiance_frag_define>\n#include <ibl_frag_define>\n"; // eslint-disable-line
9605
9605
 
9606
9606
  var brdf = "#define GLSLIFY 1\nfloat F_Schlick(float dotLH){return 0.04+0.96*(pow(1.0-dotLH,5.0));}vec3 F_Schlick(vec3 specularColor,float dotLH){float fresnel=exp2((-5.55473*dotLH-6.98316)*dotLH);return(1.0-specularColor)*fresnel+specularColor;}float G_GGX_SmithCorrelated(float alpha,float dotNL,float dotNV){float a2=pow2(alpha);float gv=dotNL*sqrt(a2+(1.0-a2)*pow2(dotNV));float gl=dotNV*sqrt(a2+(1.0-a2)*pow2(dotNL));return 0.5/max(gv+gl,EPSILON);}float D_GGX(float alpha,float dotNH){float a2=pow2(alpha);float denom=pow2(dotNH)*(a2-1.0)+1.0;return RECIPROCAL_PI*a2/pow2(denom);}vec3 BRDF_Specular_GGX(vec3 incidentDirection,vec3 viewDir,vec3 normal,vec3 specularColor,float roughness){float alpha=pow2(roughness);vec3 halfDir=normalize(incidentDirection+viewDir);float dotNL=saturate(dot(normal,incidentDirection));float dotNV=saturate(dot(normal,viewDir));float dotNH=saturate(dot(normal,halfDir));float dotLH=saturate(dot(incidentDirection,halfDir));vec3 F=F_Schlick(specularColor,dotLH);float G=G_GGX_SmithCorrelated(alpha,dotNL,dotNV);float D=D_GGX(alpha,dotNH);return F*(G*D);}vec3 BRDF_Diffuse_Lambert(vec3 diffuseColor){return RECIPROCAL_PI*diffuseColor;}"; // eslint-disable-line
9607
9607
 
@@ -11176,8 +11176,10 @@ SimpleSpriteAssembler = __decorate([
11176
11176
  _this = Renderer.call(this, entity) || this;
11177
11177
  /** The mask layers the sprite mask influence to. */ _this.influenceLayers = exports.SpriteMaskLayer.Everything;
11178
11178
  _this._sprite = null;
11179
- _this._width = undefined;
11180
- _this._height = undefined;
11179
+ _this._automaticWidth = 0;
11180
+ _this._automaticHeight = 0;
11181
+ _this._customWidth = undefined;
11182
+ _this._customHeight = undefined;
11181
11183
  _this._flipX = false;
11182
11184
  _this._flipY = false;
11183
11185
  _this._alphaCutoff = 0.5;
@@ -11197,12 +11199,11 @@ SimpleSpriteAssembler = __decorate([
11197
11199
  /**
11198
11200
  * @internal
11199
11201
  */ _proto._updateBounds = function _updateBounds(worldBounds) {
11200
- var _this_sprite;
11201
- if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
11202
+ if (this.sprite) {
11203
+ SimpleSpriteAssembler.updatePositions(this);
11204
+ } else {
11202
11205
  worldBounds.min.set(0, 0, 0);
11203
11206
  worldBounds.max.set(0, 0, 0);
11204
- } else {
11205
- SimpleSpriteAssembler.updatePositions(this);
11206
11207
  }
11207
11208
  };
11208
11209
  /**
@@ -11213,12 +11214,12 @@ SimpleSpriteAssembler = __decorate([
11213
11214
  if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
11214
11215
  return;
11215
11216
  }
11216
- // Update position.
11217
+ // Update position
11217
11218
  if (this._dirtyUpdateFlag & RendererUpdateFlags.WorldVolume) {
11218
11219
  SimpleSpriteAssembler.updatePositions(this);
11219
11220
  this._dirtyUpdateFlag &= ~RendererUpdateFlags.WorldVolume;
11220
11221
  }
11221
- // Update uv.
11222
+ // Update uv
11222
11223
  if (this._dirtyUpdateFlag & 0x2) {
11223
11224
  SimpleSpriteAssembler.updateUVs(this);
11224
11225
  this._dirtyUpdateFlag &= ~0x2;
@@ -11241,11 +11242,27 @@ SimpleSpriteAssembler = __decorate([
11241
11242
  this._sprite = null;
11242
11243
  this._verticesData = null;
11243
11244
  };
11245
+ _proto._calDefaultSize = function _calDefaultSize() {
11246
+ var sprite = this._sprite;
11247
+ if (sprite) {
11248
+ this._automaticWidth = sprite.width;
11249
+ this._automaticHeight = sprite.height;
11250
+ } else {
11251
+ this._automaticWidth = this._automaticHeight = 0;
11252
+ }
11253
+ this._dirtyUpdateFlag &= ~0x4;
11254
+ };
11244
11255
  _proto._onSpriteChange = function _onSpriteChange(type) {
11245
11256
  switch(type){
11246
11257
  case SpriteModifyFlags.texture:
11247
11258
  this.shaderData.setTexture(SpriteMask._textureProperty, this.sprite.texture);
11248
11259
  break;
11260
+ case SpriteModifyFlags.size:
11261
+ this._dirtyUpdateFlag |= 0x4;
11262
+ if (this._customWidth === undefined || this._customHeight === undefined) {
11263
+ this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
11264
+ }
11265
+ break;
11249
11266
  case SpriteModifyFlags.region:
11250
11267
  case SpriteModifyFlags.atlasRegionOffset:
11251
11268
  this._dirtyUpdateFlag |= 0x3;
@@ -11253,22 +11270,31 @@ SimpleSpriteAssembler = __decorate([
11253
11270
  case SpriteModifyFlags.atlasRegion:
11254
11271
  this._dirtyUpdateFlag |= 0x2;
11255
11272
  break;
11273
+ case SpriteModifyFlags.pivot:
11274
+ this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
11275
+ break;
11256
11276
  }
11257
11277
  };
11258
11278
  _create_class(SpriteMask, [
11259
11279
  {
11260
11280
  key: "width",
11261
11281
  get: /**
11262
- * Render width.
11282
+ * Render width (in world coordinates).
11283
+ *
11284
+ * @remarks
11285
+ * If width is set, return the set value,
11286
+ * otherwise return `SpriteMask.sprite.width`.
11263
11287
  */ function get() {
11264
- if (this._width === undefined && this._sprite) {
11265
- this.width = this._sprite.width;
11288
+ if (this._customWidth !== undefined) {
11289
+ return this._customWidth;
11290
+ } else {
11291
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
11292
+ return this._automaticWidth;
11266
11293
  }
11267
- return this._width;
11268
11294
  },
11269
11295
  set: function set(value) {
11270
- if (this._width !== value) {
11271
- this._width = value;
11296
+ if (this._customWidth !== value) {
11297
+ this._customWidth = value;
11272
11298
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
11273
11299
  }
11274
11300
  }
@@ -11276,16 +11302,22 @@ SimpleSpriteAssembler = __decorate([
11276
11302
  {
11277
11303
  key: "height",
11278
11304
  get: /**
11279
- * Render height.
11305
+ * Render height (in world coordinates).
11306
+ *
11307
+ * @remarks
11308
+ * If height is set, return the set value,
11309
+ * otherwise return `SpriteMask.sprite.height`.
11280
11310
  */ function get() {
11281
- if (this._height === undefined && this._sprite) {
11282
- this.height = this._sprite.height;
11311
+ if (this._customHeight !== undefined) {
11312
+ return this._customHeight;
11313
+ } else {
11314
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
11315
+ return this._automaticHeight;
11283
11316
  }
11284
- return this._height;
11285
11317
  },
11286
11318
  set: function set(value) {
11287
- if (this._height !== value) {
11288
- this._height = value;
11319
+ if (this._customHeight !== value) {
11320
+ this._customHeight = value;
11289
11321
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
11290
11322
  }
11291
11323
  }
@@ -11329,9 +11361,9 @@ SimpleSpriteAssembler = __decorate([
11329
11361
  var lastSprite = this._sprite;
11330
11362
  if (lastSprite !== value) {
11331
11363
  lastSprite && lastSprite._updateFlagManager.removeListener(this._onSpriteChange);
11364
+ this._dirtyUpdateFlag |= 0x7;
11332
11365
  if (value) {
11333
11366
  value._updateFlagManager.addListener(this._onSpriteChange);
11334
- this._dirtyUpdateFlag |= 0x3;
11335
11367
  this.shaderData.setTexture(SpriteMask._textureProperty, value.texture);
11336
11368
  } else {
11337
11369
  this.shaderData.setTexture(SpriteMask._textureProperty, null);
@@ -11371,10 +11403,16 @@ __decorate([
11371
11403
  ], SpriteMask.prototype, "_sprite", void 0);
11372
11404
  __decorate([
11373
11405
  ignoreClone
11374
- ], SpriteMask.prototype, "_width", void 0);
11406
+ ], SpriteMask.prototype, "_automaticWidth", void 0);
11375
11407
  __decorate([
11376
11408
  ignoreClone
11377
- ], SpriteMask.prototype, "_height", void 0);
11409
+ ], SpriteMask.prototype, "_automaticHeight", void 0);
11410
+ __decorate([
11411
+ assignmentClone
11412
+ ], SpriteMask.prototype, "_customWidth", void 0);
11413
+ __decorate([
11414
+ assignmentClone
11415
+ ], SpriteMask.prototype, "_customHeight", void 0);
11378
11416
  __decorate([
11379
11417
  assignmentClone
11380
11418
  ], SpriteMask.prototype, "_flipX", void 0);
@@ -11392,7 +11430,9 @@ var /**
11392
11430
  */ SpriteMaskUpdateFlags;
11393
11431
  (function(SpriteMaskUpdateFlags) {
11394
11432
  SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** UV. */ "UV"] = 0x2] = "UV";
11395
- SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** All. */ "All"] = 0x3] = "All";
11433
+ SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** WorldVolume and UV . */ "RenderData"] = 0x3] = "RenderData";
11434
+ SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** Automatic Size. */ "AutomaticSize"] = 0x4] = "AutomaticSize";
11435
+ SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** All. */ "All"] = 0x7] = "All";
11396
11436
  })(SpriteMaskUpdateFlags || (SpriteMaskUpdateFlags = {}));
11397
11437
 
11398
11438
  /**
@@ -12199,6 +12239,7 @@ var MeshModifyFlags;
12199
12239
  var subDataDirtyFlags = this._subDataDirtyFlags;
12200
12240
  var blendShapeFloatStride = this._vertexElementCount * 3;
12201
12241
  var blendShapeByteStride = blendShapeFloatStride * 4;
12242
+ var bufferOffset = this._bufferBindingOffset;
12202
12243
  // @todo: should fix bug when dataChangedFlag is true
12203
12244
  for(var i = 0, n = blendShapes.length; i < n; i++){
12204
12245
  var dataChangedFlag = subDataDirtyFlags[i];
@@ -12216,7 +12257,7 @@ var MeshModifyFlags;
12216
12257
  var offset = indexInBuffer * blendShapeFloatStride;
12217
12258
  var storeInfo = storeInfos[i];
12218
12259
  storeInfo || (storeInfos[i] = storeInfo = new engineMath.Vector2());
12219
- storeInfo.set(bufferIndex + 1, indexInBuffer * blendShapeByteStride); // BlendShape buffer is start from 1
12260
+ storeInfo.set(bufferOffset + bufferIndex, indexInBuffer * blendShapeByteStride); // BufferOffset is mesh vertexBuffer offset
12220
12261
  var deltaPositions = endFrame.deltaPositions;
12221
12262
  for(var j = 0; j < vertexCount; j++){
12222
12263
  var start = offset + bufferFloatStride * j;
@@ -13493,6 +13534,7 @@ var VertexChangedFlags;
13493
13534
  function MeshRenderer(entity) {
13494
13535
  var _this;
13495
13536
  _this = Renderer.call(this, entity) || this;
13537
+ _this._enableVertexColor = false;
13496
13538
  _this._onMeshChanged = _this._onMeshChanged.bind(_assert_this_initialized(_this));
13497
13539
  return _this;
13498
13540
  }
@@ -13537,7 +13579,7 @@ var VertexChangedFlags;
13537
13579
  shaderData.disableMacro(MeshRenderer._uv1Macro);
13538
13580
  shaderData.disableMacro(MeshRenderer._normalMacro);
13539
13581
  shaderData.disableMacro(MeshRenderer._tangentMacro);
13540
- shaderData.disableMacro(MeshRenderer._vertexColorMacro);
13582
+ shaderData.disableMacro(MeshRenderer._enableVertexColorMacro);
13541
13583
  for(var i = 0, n = vertexElements.length; i < n; i++){
13542
13584
  switch(vertexElements[i].semantic){
13543
13585
  case "TEXCOORD_0":
@@ -13553,7 +13595,7 @@ var VertexChangedFlags;
13553
13595
  shaderData.enableMacro(MeshRenderer._tangentMacro);
13554
13596
  break;
13555
13597
  case "COLOR_0":
13556
- shaderData.enableMacro(MeshRenderer._vertexColorMacro);
13598
+ this._enableVertexColor && shaderData.enableMacro(MeshRenderer._enableVertexColorMacro);
13557
13599
  break;
13558
13600
  }
13559
13601
  }
@@ -13604,6 +13646,20 @@ var VertexChangedFlags;
13604
13646
  this._setMesh(value);
13605
13647
  }
13606
13648
  }
13649
+ },
13650
+ {
13651
+ key: "enableVertexColor",
13652
+ get: /**
13653
+ * Whether enable vertex color.
13654
+ */ function get() {
13655
+ return this._enableVertexColor;
13656
+ },
13657
+ set: function set(value) {
13658
+ if (value !== this._enableVertexColor) {
13659
+ this._dirtyUpdateFlag |= 0x2;
13660
+ this._enableVertexColor = value;
13661
+ }
13662
+ }
13607
13663
  }
13608
13664
  ]);
13609
13665
  return MeshRenderer;
@@ -13621,7 +13677,7 @@ var VertexChangedFlags;
13621
13677
  MeshRenderer._tangentMacro = ShaderMacro.getByName("RENDERER_HAS_TANGENT");
13622
13678
  })();
13623
13679
  (function() {
13624
- MeshRenderer._vertexColorMacro = ShaderMacro.getByName("RENDERER_HAS_VERTEXCOLOR");
13680
+ MeshRenderer._enableVertexColorMacro = ShaderMacro.getByName("RENDERER_ENABLE_VERTEXCOLOR");
13625
13681
  })();
13626
13682
  __decorate([
13627
13683
  ignoreClone
@@ -15210,7 +15266,7 @@ var Basic2DBatcher = /*#__PURE__*/ function() {
15210
15266
  // vertices
15211
15267
  this._vertexBuffers[index] = new Buffer(engine, exports.BufferBindFlag.VertexBuffer, MAX_VERTEX_COUNT * 4 * vertexStride, exports.BufferUsage.Dynamic);
15212
15268
  // indices
15213
- this._indiceBuffers[index] = new Buffer(engine, exports.BufferBindFlag.IndexBuffer, MAX_VERTEX_COUNT * 3, exports.BufferUsage.Dynamic);
15269
+ this._indiceBuffers[index] = new Buffer(engine, exports.BufferBindFlag.IndexBuffer, MAX_VERTEX_COUNT * 2 * 3, exports.BufferUsage.Dynamic);
15214
15270
  mesh.setVertexBufferBinding(this._vertexBuffers[index], vertexStride);
15215
15271
  mesh.setIndexBufferBinding(this._indiceBuffers[index], exports.IndexFormat.UInt16);
15216
15272
  mesh.setVertexElements(vertexElements);
@@ -18329,7 +18385,7 @@ var /**
18329
18385
  CascadedShadowCasterPass._cascadesSplitDistance = new Array(CascadedShadowCasterPass._maxCascades + 1);
18330
18386
  })();
18331
18387
  (function() {
18332
- CascadedShadowCasterPass._viewport = new engineMath.Color(0, 0, 1, 1);
18388
+ CascadedShadowCasterPass._viewport = new engineMath.Vector4(0, 0, 1, 1);
18333
18389
  })();
18334
18390
  (function() {
18335
18391
  CascadedShadowCasterPass._clearColor = new engineMath.Color(1, 1, 1, 1);
@@ -20397,8 +20453,10 @@ exports.TextVerticalAlignment = void 0;
20397
20453
  if (name === void 0) name = null;
20398
20454
  var _this;
20399
20455
  _this = ReferResource.call(this, engine) || this;
20400
- _this._width = undefined;
20401
- _this._height = undefined;
20456
+ _this._automaticWidth = 0;
20457
+ _this._automaticHeight = 0;
20458
+ _this._customWidth = undefined;
20459
+ _this._customHeight = undefined;
20402
20460
  _this._positions = [
20403
20461
  new engineMath.Vector2(),
20404
20462
  new engineMath.Vector2(),
@@ -20419,7 +20477,7 @@ exports.TextVerticalAlignment = void 0;
20419
20477
  _this._region = new engineMath.Rect(0, 0, 1, 1);
20420
20478
  _this._pivot = new engineMath.Vector2(0.5, 0.5);
20421
20479
  _this._border = new engineMath.Vector4(0, 0, 0, 0);
20422
- _this._dirtyUpdateFlag = 0x3;
20480
+ _this._dirtyUpdateFlag = 0x7;
20423
20481
  /** @internal */ _this._updateFlagManager = new UpdateFlagManager();
20424
20482
  _this._texture = texture;
20425
20483
  region && _this._region.copyFrom(region);
@@ -20467,9 +20525,12 @@ exports.TextVerticalAlignment = void 0;
20467
20525
  if (this._texture) {
20468
20526
  var _this = this, _texture = _this._texture, _atlasRegion = _this._atlasRegion, _atlasRegionOffset = _this._atlasRegionOffset, _region = _this._region;
20469
20527
  var pixelsPerUnitReciprocal = 1.0 / Engine._pixelsPerUnit;
20470
- this._width = _texture.width * _atlasRegion.width / (1 - _atlasRegionOffset.x - _atlasRegionOffset.z) * _region.width * pixelsPerUnitReciprocal;
20471
- this._height = _texture.height * _atlasRegion.height / (1 - _atlasRegionOffset.y - _atlasRegionOffset.w) * _region.height * pixelsPerUnitReciprocal;
20528
+ this._automaticWidth = _texture.width * _atlasRegion.width / (1 - _atlasRegionOffset.x - _atlasRegionOffset.z) * _region.width * pixelsPerUnitReciprocal;
20529
+ this._automaticHeight = _texture.height * _atlasRegion.height / (1 - _atlasRegionOffset.y - _atlasRegionOffset.w) * _region.height * pixelsPerUnitReciprocal;
20530
+ } else {
20531
+ this._automaticWidth = this._automaticHeight = 0;
20472
20532
  }
20533
+ this._dirtyUpdateFlag &= ~0x4;
20473
20534
  };
20474
20535
  _proto._updatePositions = function _updatePositions() {
20475
20536
  var blank = this._atlasRegionOffset;
@@ -20523,11 +20584,16 @@ exports.TextVerticalAlignment = void 0;
20523
20584
  };
20524
20585
  _proto._dispatchSpriteChange = function _dispatchSpriteChange(type) {
20525
20586
  switch(type){
20587
+ case SpriteModifyFlags.texture:
20588
+ this._dirtyUpdateFlag |= 0x4;
20589
+ break;
20526
20590
  case SpriteModifyFlags.atlasRegionOffset:
20527
20591
  case SpriteModifyFlags.region:
20528
- this._dirtyUpdateFlag |= 0x3;
20592
+ this._dirtyUpdateFlag |= 0x7;
20529
20593
  break;
20530
20594
  case SpriteModifyFlags.atlasRegion:
20595
+ this._dirtyUpdateFlag |= 0x4 | 0x2;
20596
+ break;
20531
20597
  case SpriteModifyFlags.border:
20532
20598
  this._dirtyUpdateFlag |= 0x2;
20533
20599
  break;
@@ -20546,7 +20612,9 @@ exports.TextVerticalAlignment = void 0;
20546
20612
  if (this._texture !== value) {
20547
20613
  this._texture = value;
20548
20614
  this._dispatchSpriteChange(SpriteModifyFlags.texture);
20549
- (this._width === undefined || this._height === undefined) && this._dispatchSpriteChange(SpriteModifyFlags.size);
20615
+ if (this._customWidth === undefined || this._customHeight === undefined) {
20616
+ this._dispatchSpriteChange(SpriteModifyFlags.size);
20617
+ }
20550
20618
  }
20551
20619
  }
20552
20620
  },
@@ -20554,13 +20622,21 @@ exports.TextVerticalAlignment = void 0;
20554
20622
  key: "width",
20555
20623
  get: /**
20556
20624
  * The width of the sprite (in world coordinates).
20625
+ *
20626
+ * @remarks
20627
+ * If width is set, return the set value,
20628
+ * otherwise return the width calculated according to `Texture.width`, `Sprite.region`, `Sprite.atlasRegion`, `Sprite.atlasRegionOffset` and `Engine._pixelsPerUnit`.
20557
20629
  */ function get() {
20558
- this._width === undefined && this._calDefaultSize();
20559
- return this._width;
20630
+ if (this._customWidth !== undefined) {
20631
+ return this._customWidth;
20632
+ } else {
20633
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
20634
+ return this._automaticWidth;
20635
+ }
20560
20636
  },
20561
20637
  set: function set(value) {
20562
- if (this._width !== value) {
20563
- this._width = value;
20638
+ if (this._customWidth !== value) {
20639
+ this._customWidth = value;
20564
20640
  this._dispatchSpriteChange(SpriteModifyFlags.size);
20565
20641
  }
20566
20642
  }
@@ -20569,13 +20645,21 @@ exports.TextVerticalAlignment = void 0;
20569
20645
  key: "height",
20570
20646
  get: /**
20571
20647
  * The height of the sprite (in world coordinates).
20648
+ *
20649
+ * @remarks
20650
+ * If height is set, return the set value,
20651
+ * otherwise return the height calculated according to `Texture.height`, `Sprite.region`, `Sprite.atlasRegion`, `Sprite.atlasRegionOffset` and `Engine._pixelsPerUnit`.
20572
20652
  */ function get() {
20573
- this._height === undefined && this._calDefaultSize();
20574
- return this._height;
20653
+ if (this._customHeight !== undefined) {
20654
+ return this._customHeight;
20655
+ } else {
20656
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
20657
+ return this._automaticHeight;
20658
+ }
20575
20659
  },
20576
20660
  set: function set(value) {
20577
- if (this._height !== value) {
20578
- this._height = value;
20661
+ if (this._customHeight !== value) {
20662
+ this._customHeight = value;
20579
20663
  this._dispatchSpriteChange(SpriteModifyFlags.size);
20580
20664
  }
20581
20665
  }
@@ -20605,7 +20689,9 @@ exports.TextVerticalAlignment = void 0;
20605
20689
  var y = engineMath.MathUtil.clamp(value.y, 0, 1);
20606
20690
  this._atlasRegion.set(x, y, engineMath.MathUtil.clamp(value.width, 0, 1 - x), engineMath.MathUtil.clamp(value.height, 0, 1 - y));
20607
20691
  this._dispatchSpriteChange(SpriteModifyFlags.atlasRegion);
20608
- (this._width === undefined || this._height === undefined) && this._dispatchSpriteChange(SpriteModifyFlags.size);
20692
+ if (this._customWidth === undefined || this._customHeight === undefined) {
20693
+ this._dispatchSpriteChange(SpriteModifyFlags.size);
20694
+ }
20609
20695
  }
20610
20696
  },
20611
20697
  {
@@ -20620,7 +20706,9 @@ exports.TextVerticalAlignment = void 0;
20620
20706
  var y = engineMath.MathUtil.clamp(value.y, 0, 1);
20621
20707
  this._atlasRegionOffset.set(x, y, engineMath.MathUtil.clamp(value.z, 0, 1 - x), engineMath.MathUtil.clamp(value.w, 0, 1 - y));
20622
20708
  this._dispatchSpriteChange(SpriteModifyFlags.atlasRegionOffset);
20623
- (this._width === undefined || this._height === undefined) && this._dispatchSpriteChange(SpriteModifyFlags.size);
20709
+ if (this._customWidth === undefined || this._customHeight === undefined) {
20710
+ this._dispatchSpriteChange(SpriteModifyFlags.size);
20711
+ }
20624
20712
  }
20625
20713
  },
20626
20714
  {
@@ -20636,7 +20724,9 @@ exports.TextVerticalAlignment = void 0;
20636
20724
  var y = engineMath.MathUtil.clamp(value.y, 0, 1);
20637
20725
  region.set(x, y, engineMath.MathUtil.clamp(value.width, 0, 1 - x), engineMath.MathUtil.clamp(value.height, 0, 1 - y));
20638
20726
  this._dispatchSpriteChange(SpriteModifyFlags.region);
20639
- (this._width === undefined || this._height === undefined) && this._dispatchSpriteChange(SpriteModifyFlags.size);
20727
+ if (this._customWidth === undefined || this._customHeight === undefined) {
20728
+ this._dispatchSpriteChange(SpriteModifyFlags.size);
20729
+ }
20640
20730
  }
20641
20731
  },
20642
20732
  {
@@ -20686,7 +20776,8 @@ var SpriteUpdateFlags;
20686
20776
  (function(SpriteUpdateFlags) {
20687
20777
  SpriteUpdateFlags[SpriteUpdateFlags["positions"] = 0x1] = "positions";
20688
20778
  SpriteUpdateFlags[SpriteUpdateFlags["uvs"] = 0x2] = "uvs";
20689
- SpriteUpdateFlags[SpriteUpdateFlags["all"] = 0x3] = "all";
20779
+ SpriteUpdateFlags[SpriteUpdateFlags["automaticSize"] = 0x4] = "automaticSize";
20780
+ SpriteUpdateFlags[SpriteUpdateFlags["all"] = 0x7] = "all";
20690
20781
  })(SpriteUpdateFlags || (SpriteUpdateFlags = {}));
20691
20782
 
20692
20783
  var _SlicedSpriteAssembler;
@@ -21178,8 +21269,10 @@ var TiledType;
21178
21269
  _this._tiledAdaptiveThreshold = 0.5;
21179
21270
  _this._color = new engineMath.Color(1, 1, 1, 1);
21180
21271
  _this._sprite = null;
21181
- _this._width = undefined;
21182
- _this._height = undefined;
21272
+ _this._automaticWidth = 0;
21273
+ _this._automaticHeight = 0;
21274
+ _this._customWidth = undefined;
21275
+ _this._customHeight = undefined;
21183
21276
  _this._flipX = false;
21184
21277
  _this._flipY = false;
21185
21278
  _this._maskLayer = exports.SpriteMaskLayer.Layer0;
@@ -21196,6 +21289,7 @@ var TiledType;
21196
21289
  */ _proto._cloneTo = function _cloneTo(target) {
21197
21290
  target._assembler.resetData(target);
21198
21291
  target.sprite = this._sprite;
21292
+ target.drawMode = this._drawMode;
21199
21293
  };
21200
21294
  /**
21201
21295
  * @internal
@@ -21206,12 +21300,11 @@ var TiledType;
21206
21300
  /**
21207
21301
  * @internal
21208
21302
  */ _proto._updateBounds = function _updateBounds(worldBounds) {
21209
- var _this_sprite;
21210
- if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
21303
+ if (this.sprite) {
21304
+ this._assembler.updatePositions(this);
21305
+ } else {
21211
21306
  worldBounds.min.set(0, 0, 0);
21212
21307
  worldBounds.max.set(0, 0, 0);
21213
- } else {
21214
- this._assembler.updatePositions(this);
21215
21308
  }
21216
21309
  };
21217
21310
  /**
@@ -21221,17 +21314,17 @@ var TiledType;
21221
21314
  if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
21222
21315
  return;
21223
21316
  }
21224
- // Update position.
21317
+ // Update position
21225
21318
  if (this._dirtyUpdateFlag & RendererUpdateFlags.WorldVolume) {
21226
21319
  this._assembler.updatePositions(this);
21227
21320
  this._dirtyUpdateFlag &= ~RendererUpdateFlags.WorldVolume;
21228
21321
  }
21229
- // Update uv.
21322
+ // Update uv
21230
21323
  if (this._dirtyUpdateFlag & 0x2) {
21231
21324
  this._assembler.updateUVs(this);
21232
21325
  this._dirtyUpdateFlag &= ~0x2;
21233
21326
  }
21234
- // Push render data
21327
+ // Push primitive
21235
21328
  var material = this.getMaterial();
21236
21329
  var texture = this.sprite.texture;
21237
21330
  var renderData = this._engine._spriteRenderDataPool.getFromPool();
@@ -21249,6 +21342,16 @@ var TiledType;
21249
21342
  this._assembler = null;
21250
21343
  this._verticesData = null;
21251
21344
  };
21345
+ _proto._calDefaultSize = function _calDefaultSize() {
21346
+ var sprite = this._sprite;
21347
+ if (sprite) {
21348
+ this._automaticWidth = sprite.width;
21349
+ this._automaticHeight = sprite.height;
21350
+ } else {
21351
+ this._automaticWidth = this._automaticHeight = 0;
21352
+ }
21353
+ this._dirtyUpdateFlag &= ~0x4;
21354
+ };
21252
21355
  _proto._updateStencilState = function _updateStencilState() {
21253
21356
  // Update stencil.
21254
21357
  var material = this.getInstanceMaterial();
@@ -21275,22 +21378,21 @@ var TiledType;
21275
21378
  break;
21276
21379
  case SpriteModifyFlags.size:
21277
21380
  var _this = this, drawMode = _this._drawMode;
21278
- if (drawMode === exports.SpriteDrawMode.Sliced) {
21381
+ this._dirtyUpdateFlag |= 0x4;
21382
+ if (this._drawMode === exports.SpriteDrawMode.Sliced) {
21279
21383
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
21280
21384
  } else if (drawMode === exports.SpriteDrawMode.Tiled) {
21281
21385
  this._dirtyUpdateFlag |= 0x3;
21282
21386
  } else {
21283
21387
  // When the width and height of `SpriteRenderer` are `undefined`,
21284
21388
  // the `size` of `Sprite` will affect the position of `SpriteRenderer`.
21285
- if (this._width === undefined || this._height === undefined) {
21389
+ if (this._customWidth === undefined || this._customHeight === undefined) {
21286
21390
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
21287
21391
  }
21288
21392
  }
21289
21393
  break;
21290
21394
  case SpriteModifyFlags.border:
21291
- if (this._drawMode === exports.SpriteDrawMode.Sliced || this._drawMode === exports.SpriteDrawMode.Tiled) {
21292
- this._dirtyUpdateFlag |= 0x3;
21293
- }
21395
+ this._drawMode === exports.SpriteDrawMode.Sliced && (this._dirtyUpdateFlag |= 0x3);
21294
21396
  break;
21295
21397
  case SpriteModifyFlags.region:
21296
21398
  case SpriteModifyFlags.atlasRegionOffset:
@@ -21375,9 +21477,9 @@ var TiledType;
21375
21477
  var lastSprite = this._sprite;
21376
21478
  if (lastSprite !== value) {
21377
21479
  lastSprite && lastSprite._updateFlagManager.removeListener(this._onSpriteChange);
21480
+ this._dirtyUpdateFlag |= 0x7;
21378
21481
  if (value) {
21379
21482
  value._updateFlagManager.addListener(this._onSpriteChange);
21380
- this._dirtyUpdateFlag |= 0x3;
21381
21483
  this.shaderData.setTexture(SpriteRenderer._textureProperty, value.texture);
21382
21484
  } else {
21383
21485
  this.shaderData.setTexture(SpriteRenderer._textureProperty, null);
@@ -21402,16 +21504,22 @@ var TiledType;
21402
21504
  {
21403
21505
  key: "width",
21404
21506
  get: /**
21405
- * Render width.
21507
+ * Render width (in world coordinates).
21508
+ *
21509
+ * @remarks
21510
+ * If width is set, return the set value,
21511
+ * otherwise return `SpriteRenderer.sprite.width`.
21406
21512
  */ function get() {
21407
- this._width === undefined && this._sprite && (this.width = this._sprite.width);
21408
- return this._width;
21513
+ if (this._customWidth !== undefined) {
21514
+ return this._customWidth;
21515
+ } else {
21516
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
21517
+ return this._automaticWidth;
21518
+ }
21409
21519
  },
21410
21520
  set: function set(value) {
21411
- // Update width if undefined
21412
- this._width === undefined && this._sprite && (this._width = this._sprite.width);
21413
- if (this._width !== value) {
21414
- this._width = value;
21521
+ if (this._customWidth !== value) {
21522
+ this._customWidth = value;
21415
21523
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
21416
21524
  }
21417
21525
  }
@@ -21419,16 +21527,22 @@ var TiledType;
21419
21527
  {
21420
21528
  key: "height",
21421
21529
  get: /**
21422
- * Render height.
21530
+ * Render height (in world coordinates).
21531
+ *
21532
+ * @remarks
21533
+ * If height is set, return the set value,
21534
+ * otherwise return `SpriteRenderer.sprite.height`.
21423
21535
  */ function get() {
21424
- this._height === undefined && this._sprite && (this.height = this._sprite.height);
21425
- return this._height;
21536
+ if (this._customHeight !== undefined) {
21537
+ return this._customHeight;
21538
+ } else {
21539
+ this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
21540
+ return this._automaticHeight;
21541
+ }
21426
21542
  },
21427
21543
  set: function set(value) {
21428
- // Update height if undefined
21429
- this._height === undefined && this._sprite && (this._height = this._sprite.height);
21430
- if (this._height !== value) {
21431
- this._height = value;
21544
+ if (this._customHeight !== value) {
21545
+ this._customHeight = value;
21432
21546
  this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
21433
21547
  }
21434
21548
  }
@@ -21515,10 +21629,16 @@ __decorate([
21515
21629
  ], SpriteRenderer.prototype, "_sprite", void 0);
21516
21630
  __decorate([
21517
21631
  ignoreClone
21518
- ], SpriteRenderer.prototype, "_width", void 0);
21632
+ ], SpriteRenderer.prototype, "_automaticWidth", void 0);
21519
21633
  __decorate([
21520
21634
  ignoreClone
21521
- ], SpriteRenderer.prototype, "_height", void 0);
21635
+ ], SpriteRenderer.prototype, "_automaticHeight", void 0);
21636
+ __decorate([
21637
+ assignmentClone
21638
+ ], SpriteRenderer.prototype, "_customWidth", void 0);
21639
+ __decorate([
21640
+ assignmentClone
21641
+ ], SpriteRenderer.prototype, "_customHeight", void 0);
21522
21642
  __decorate([
21523
21643
  assignmentClone
21524
21644
  ], SpriteRenderer.prototype, "_flipX", void 0);
@@ -21539,7 +21659,9 @@ var /**
21539
21659
  */ SpriteRendererUpdateFlags;
21540
21660
  (function(SpriteRendererUpdateFlags) {
21541
21661
  SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** UV. */ "UV"] = 0x2] = "UV";
21542
- SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** All. */ "All"] = 0x3] = "All";
21662
+ SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** WorldVolume and UV . */ "RenderData"] = 0x3] = "RenderData";
21663
+ SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** Automatic Size. */ "AutomaticSize"] = 0x4] = "AutomaticSize";
21664
+ SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** All. */ "All"] = 0x7] = "All";
21543
21665
  })(SpriteRendererUpdateFlags || (SpriteRendererUpdateFlags = {}));
21544
21666
 
21545
21667
  /**