@galacean/engine-core 1.0.0-beta.7 → 1.0.0-beta.9
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 +242 -101
- package/dist/main.js.map +1 -1
- package/dist/miniprogram.js +242 -101
- package/dist/module.js +242 -101
- package/dist/module.js.map +1 -1
- package/package.json +3 -3
- package/types/2d/sprite/Sprite.d.ts +12 -2
- package/types/2d/sprite/SpriteMask.d.ts +15 -4
- package/types/2d/sprite/SpriteRenderer.d.ts +15 -4
- package/types/mesh/MeshRenderer.d.ts +7 -1
package/dist/miniprogram.js
CHANGED
|
@@ -7882,8 +7882,9 @@ exports.DynamicColliderConstraints = void 0;
|
|
|
7882
7882
|
}
|
|
7883
7883
|
var _proto = Light.prototype;
|
|
7884
7884
|
/**
|
|
7885
|
+
* Light Color, include intensity.
|
|
7885
7886
|
* @internal
|
|
7886
|
-
*/ _proto.
|
|
7887
|
+
*/ _proto._getLightIntensityColor = function _getLightIntensityColor() {
|
|
7887
7888
|
this._lightColor.r = this.color.r * this.intensity;
|
|
7888
7889
|
this._lightColor.g = this.color.g * this.intensity;
|
|
7889
7890
|
this._lightColor.b = this.color.b * this.intensity;
|
|
@@ -7953,15 +7954,21 @@ __decorate([
|
|
|
7953
7954
|
var cullingMaskStart = lightIndex * 2;
|
|
7954
7955
|
var colorStart = lightIndex * 3;
|
|
7955
7956
|
var directionStart = lightIndex * 3;
|
|
7956
|
-
var lightColor = this.
|
|
7957
|
+
var lightColor = this._getLightIntensityColor();
|
|
7957
7958
|
var direction = this.direction;
|
|
7958
7959
|
var data = DirectLight._combinedData;
|
|
7959
7960
|
var cullingMask = this.cullingMask;
|
|
7960
7961
|
data.cullingMask[cullingMaskStart] = cullingMask & 65535;
|
|
7961
7962
|
data.cullingMask[cullingMaskStart + 1] = cullingMask >>> 16 & 65535;
|
|
7962
|
-
|
|
7963
|
-
|
|
7964
|
-
|
|
7963
|
+
if (this.engine.settings.colorSpace === exports.ColorSpace.Linear) {
|
|
7964
|
+
data.color[colorStart] = miniprogram.Color.gammaToLinearSpace(lightColor.r);
|
|
7965
|
+
data.color[colorStart + 1] = miniprogram.Color.gammaToLinearSpace(lightColor.g);
|
|
7966
|
+
data.color[colorStart + 2] = miniprogram.Color.gammaToLinearSpace(lightColor.b);
|
|
7967
|
+
} else {
|
|
7968
|
+
data.color[colorStart] = lightColor.r;
|
|
7969
|
+
data.color[colorStart + 1] = lightColor.g;
|
|
7970
|
+
data.color[colorStart + 2] = lightColor.b;
|
|
7971
|
+
}
|
|
7965
7972
|
data.direction[directionStart] = direction.x;
|
|
7966
7973
|
data.direction[directionStart + 1] = direction.y;
|
|
7967
7974
|
data.direction[directionStart + 2] = direction.z;
|
|
@@ -8050,15 +8057,21 @@ __decorate([
|
|
|
8050
8057
|
var colorStart = lightIndex * 3;
|
|
8051
8058
|
var positionStart = lightIndex * 3;
|
|
8052
8059
|
var distanceStart = lightIndex;
|
|
8053
|
-
var lightColor = this.
|
|
8060
|
+
var lightColor = this._getLightIntensityColor();
|
|
8054
8061
|
var lightPosition = this.position;
|
|
8055
8062
|
var data = PointLight._combinedData;
|
|
8056
8063
|
var cullingMask = this.cullingMask;
|
|
8057
8064
|
data.cullingMask[cullingMaskStart] = cullingMask & 65535;
|
|
8058
8065
|
data.cullingMask[cullingMaskStart + 1] = cullingMask >>> 16 & 65535;
|
|
8059
|
-
|
|
8060
|
-
|
|
8061
|
-
|
|
8066
|
+
if (this.engine.settings.colorSpace === exports.ColorSpace.Linear) {
|
|
8067
|
+
data.color[colorStart] = miniprogram.Color.gammaToLinearSpace(lightColor.r);
|
|
8068
|
+
data.color[colorStart + 1] = miniprogram.Color.gammaToLinearSpace(lightColor.g);
|
|
8069
|
+
data.color[colorStart + 2] = miniprogram.Color.gammaToLinearSpace(lightColor.b);
|
|
8070
|
+
} else {
|
|
8071
|
+
data.color[colorStart] = lightColor.r;
|
|
8072
|
+
data.color[colorStart + 1] = lightColor.g;
|
|
8073
|
+
data.color[colorStart + 2] = lightColor.b;
|
|
8074
|
+
}
|
|
8062
8075
|
data.position[positionStart] = lightPosition.x;
|
|
8063
8076
|
data.position[positionStart + 1] = lightPosition.y;
|
|
8064
8077
|
data.position[positionStart + 2] = lightPosition.z;
|
|
@@ -8151,16 +8164,22 @@ __decorate([
|
|
|
8151
8164
|
var distanceStart = lightIndex;
|
|
8152
8165
|
var penumbraCosStart = lightIndex;
|
|
8153
8166
|
var angleCosStart = lightIndex;
|
|
8154
|
-
var
|
|
8167
|
+
var lightColor = this._getLightIntensityColor();
|
|
8155
8168
|
var position = this.position;
|
|
8156
8169
|
var direction = this.direction;
|
|
8157
8170
|
var data = SpotLight._combinedData;
|
|
8158
8171
|
var cullingMask = this.cullingMask;
|
|
8159
8172
|
data.cullingMask[cullingMaskStart] = cullingMask & 65535;
|
|
8160
8173
|
data.cullingMask[cullingMaskStart + 1] = cullingMask >>> 16 & 65535;
|
|
8161
|
-
|
|
8162
|
-
|
|
8163
|
-
|
|
8174
|
+
if (this.engine.settings.colorSpace === exports.ColorSpace.Linear) {
|
|
8175
|
+
data.color[colorStart] = miniprogram.Color.gammaToLinearSpace(lightColor.r);
|
|
8176
|
+
data.color[colorStart + 1] = miniprogram.Color.gammaToLinearSpace(lightColor.g);
|
|
8177
|
+
data.color[colorStart + 2] = miniprogram.Color.gammaToLinearSpace(lightColor.b);
|
|
8178
|
+
} else {
|
|
8179
|
+
data.color[colorStart] = lightColor.r;
|
|
8180
|
+
data.color[colorStart + 1] = lightColor.g;
|
|
8181
|
+
data.color[colorStart + 2] = lightColor.b;
|
|
8182
|
+
}
|
|
8164
8183
|
data.position[positionStart] = position.x;
|
|
8165
8184
|
data.position[positionStart + 1] = position.y;
|
|
8166
8185
|
data.position[positionStart + 2] = position.z;
|
|
@@ -9518,11 +9537,11 @@ var camera_declare = "#define GLSLIFY 1\nuniform vec3 camera_Position;"; // esli
|
|
|
9518
9537
|
|
|
9519
9538
|
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
|
|
9520
9539
|
|
|
9521
|
-
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
|
|
9540
|
+
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
|
|
9522
9541
|
|
|
9523
9542
|
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
|
|
9524
9543
|
|
|
9525
|
-
var color_share = "#define GLSLIFY 1\n#ifdef
|
|
9544
|
+
var color_share = "#define GLSLIFY 1\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nvarying vec4 v_color;\n#endif\n"; // eslint-disable-line
|
|
9526
9545
|
|
|
9527
9546
|
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
|
|
9528
9547
|
|
|
@@ -9542,7 +9561,7 @@ var blendShape_input = "#define GLSLIFY 1\n#ifdef RENDERER_HAS_BLENDSHAPE\n#ifde
|
|
|
9542
9561
|
|
|
9543
9562
|
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
|
|
9544
9563
|
|
|
9545
|
-
var color_vert = "#define GLSLIFY 1\n#ifdef
|
|
9564
|
+
var color_vert = "#define GLSLIFY 1\n#ifdef RENDERER_ENABLE_VERTEXCOLOR\nv_color=COLOR_0;\n#endif\n"; // eslint-disable-line
|
|
9546
9565
|
|
|
9547
9566
|
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
|
|
9548
9567
|
|
|
@@ -9562,11 +9581,11 @@ var light_frag_define = "#define GLSLIFY 1\n#ifdef SCENE_DIRECT_LIGHT_COUNT\nstr
|
|
|
9562
9581
|
|
|
9563
9582
|
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
|
|
9564
9583
|
|
|
9565
|
-
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
|
|
9584
|
+
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
|
|
9566
9585
|
|
|
9567
9586
|
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
|
|
9568
9587
|
|
|
9569
|
-
var mobile_blinnphong_frag = "#define GLSLIFY 1\n#ifdef MATERIAL_HAS_NORMALTEXTURE\nmat3 tbn=getTBN();vec3 N=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv);\n#else\nvec3 N=getNormal();\n#endif\nvec3 lightDiffuse=vec3(0.0,0.0,0.0);vec3 lightSpecular=vec3(0.0,0.0,0.0);float shadowAttenuation=1.0;\n#ifdef SCENE_DIRECT_LIGHT_COUNT\nshadowAttenuation=1.0;\n#ifdef SCENE_IS_CALCULATE_SHADOWS\nshadowAttenuation*=sampleShadowMap();int sunIndex=int(scene_ShadowInfo.z);\n#endif\nDirectLight directionalLight;for(int i=0;i<SCENE_DIRECT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_DirectLightCullingMask[i]))continue;directionalLight.color=scene_DirectLightColor[i];\n#ifdef SCENE_IS_CALCULATE_SHADOWS\nif(i==sunIndex){directionalLight.color*=shadowAttenuation;}\n#endif\ndirectionalLight.direction=scene_DirectLightDirection[i];float d=max(dot(N,-directionalLight.direction),0.0);lightDiffuse+=directionalLight.color*d;vec3 halfDir=normalize(V-directionalLight.direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess);lightSpecular+=directionalLight.color*s;}\n#endif\n#ifdef SCENE_POINT_LIGHT_COUNT\nPointLight pointLight;for(int i=0;i<SCENE_POINT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_PointLightCullingMask[i]))continue;pointLight.color=scene_PointLightColor[i];pointLight.position=scene_PointLightPosition[i];pointLight.distance=scene_PointLightDistance[i];vec3 direction=v_pos-pointLight.position;float dist=length(direction);direction/=dist;float decay=clamp(1.0-pow(dist/pointLight.distance,4.0),0.0,1.0);float d=max(dot(N,-direction),0.0)*decay;lightDiffuse+=pointLight.color*d;vec3 halfDir=normalize(V-direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess)*decay;lightSpecular+=pointLight.color*s;}\n#endif\n#ifdef SCENE_SPOT_LIGHT_COUNT\nSpotLight spotLight;for(int i=0;i<SCENE_SPOT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_SpotLightCullingMask[i]))continue;spotLight.color=scene_SpotLightColor[i];spotLight.position=scene_SpotLightPosition[i];spotLight.direction=scene_SpotLightDirection[i];spotLight.distance=scene_SpotLightDistance[i];spotLight.angleCos=scene_SpotLightAngleCos[i];spotLight.penumbraCos=scene_SpotLightPenumbraCos[i];vec3 direction=spotLight.position-v_pos;float lightDistance=length(direction);direction/=lightDistance;float angleCos=dot(direction,-spotLight.direction);float decay=clamp(1.0-pow(lightDistance/spotLight.distance,4.0),0.0,1.0);float spotEffect=smoothstep(spotLight.penumbraCos,spotLight.angleCos,angleCos);float decayTotal=decay*spotEffect;float d=max(dot(N,direction),0.0)*decayTotal;lightDiffuse+=spotLight.color*d;vec3 halfDir=normalize(V+direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess)*decayTotal;lightSpecular+=spotLight.color*s;}\n#endif\ndiffuse*=vec4(lightDiffuse,1.0);specular*=vec4(lightSpecular,1.0);\n#ifdef MATERIAL_IS_ALPHA_CUTOFF\nif(diffuse.a<material_AlphaCutoff){discard;}\n#endif\n"; // eslint-disable-line
|
|
9588
|
+
var mobile_blinnphong_frag = "#define GLSLIFY 1\n#ifdef MATERIAL_HAS_NORMALTEXTURE\nmat3 tbn=getTBN(gl_FrontFacing);vec3 N=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv,gl_FrontFacing);\n#else\nvec3 N=getNormal(gl_FrontFacing);\n#endif\nvec3 lightDiffuse=vec3(0.0,0.0,0.0);vec3 lightSpecular=vec3(0.0,0.0,0.0);float shadowAttenuation=1.0;\n#ifdef SCENE_DIRECT_LIGHT_COUNT\nshadowAttenuation=1.0;\n#ifdef SCENE_IS_CALCULATE_SHADOWS\nshadowAttenuation*=sampleShadowMap();int sunIndex=int(scene_ShadowInfo.z);\n#endif\nDirectLight directionalLight;for(int i=0;i<SCENE_DIRECT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_DirectLightCullingMask[i]))continue;directionalLight.color=scene_DirectLightColor[i];\n#ifdef SCENE_IS_CALCULATE_SHADOWS\nif(i==sunIndex){directionalLight.color*=shadowAttenuation;}\n#endif\ndirectionalLight.direction=scene_DirectLightDirection[i];float d=max(dot(N,-directionalLight.direction),0.0);lightDiffuse+=directionalLight.color*d;vec3 halfDir=normalize(V-directionalLight.direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess);lightSpecular+=directionalLight.color*s;}\n#endif\n#ifdef SCENE_POINT_LIGHT_COUNT\nPointLight pointLight;for(int i=0;i<SCENE_POINT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_PointLightCullingMask[i]))continue;pointLight.color=scene_PointLightColor[i];pointLight.position=scene_PointLightPosition[i];pointLight.distance=scene_PointLightDistance[i];vec3 direction=v_pos-pointLight.position;float dist=length(direction);direction/=dist;float decay=clamp(1.0-pow(dist/pointLight.distance,4.0),0.0,1.0);float d=max(dot(N,-direction),0.0)*decay;lightDiffuse+=pointLight.color*d;vec3 halfDir=normalize(V-direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess)*decay;lightSpecular+=pointLight.color*s;}\n#endif\n#ifdef SCENE_SPOT_LIGHT_COUNT\nSpotLight spotLight;for(int i=0;i<SCENE_SPOT_LIGHT_COUNT;i++){if(isRendererCulledByLight(renderer_Layer.xy,scene_SpotLightCullingMask[i]))continue;spotLight.color=scene_SpotLightColor[i];spotLight.position=scene_SpotLightPosition[i];spotLight.direction=scene_SpotLightDirection[i];spotLight.distance=scene_SpotLightDistance[i];spotLight.angleCos=scene_SpotLightAngleCos[i];spotLight.penumbraCos=scene_SpotLightPenumbraCos[i];vec3 direction=spotLight.position-v_pos;float lightDistance=length(direction);direction/=lightDistance;float angleCos=dot(direction,-spotLight.direction);float decay=clamp(1.0-pow(lightDistance/spotLight.distance,4.0),0.0,1.0);float spotEffect=smoothstep(spotLight.penumbraCos,spotLight.angleCos,angleCos);float decayTotal=decay*spotEffect;float d=max(dot(N,direction),0.0)*decayTotal;lightDiffuse+=spotLight.color*d;vec3 halfDir=normalize(V+direction);float s=pow(clamp(dot(N,halfDir),0.0,1.0),material_Shininess)*decayTotal;lightSpecular+=spotLight.color*s;}\n#endif\ndiffuse*=vec4(lightDiffuse,1.0);specular*=vec4(lightSpecular,1.0);\n#ifdef MATERIAL_IS_ALPHA_CUTOFF\nif(diffuse.a<material_AlphaCutoff){discard;}\n#endif\n"; // eslint-disable-line
|
|
9570
9589
|
|
|
9571
9590
|
var noise_cellular = "#define GLSLIFY 1\n#include <noise_cellular_2D>\n#include <noise_cellular_3D>\n#include <noise_cellular_2x2>\n#include <noise_cellular_2x2x2>\n"; // eslint-disable-line
|
|
9572
9591
|
|
|
@@ -9602,7 +9621,7 @@ var noise_simplex_4D = "#define GLSLIFY 1\nvec4 grad4(float j,vec4 ip){const vec
|
|
|
9602
9621
|
|
|
9603
9622
|
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
|
|
9604
9623
|
|
|
9605
|
-
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
|
|
9624
|
+
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,bool isFrontFacing){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(isFrontFacing);\n#endif\n#ifdef MATERIAL_HAS_NORMALTEXTURE\ngeometry.normal=getNormalByNormalTexture(tbn,material_NormalTexture,material_NormalIntensity,v_uv,isFrontFacing);\n#else\ngeometry.normal=getNormal(isFrontFacing);\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,isFrontFacing);\n#else\ngeometry.clearCoatNormal=getNormal(isFrontFacing);\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
|
|
9606
9625
|
|
|
9607
9626
|
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
|
|
9608
9627
|
|
|
@@ -9610,7 +9629,7 @@ var direct_irradiance_frag_define = "#define GLSLIFY 1\n#include <ShadowFragment
|
|
|
9610
9629
|
|
|
9611
9630
|
var ibl_frag_define = "#define GLSLIFY 1\nvec3 getLightProbeIrradiance(vec3 sh[9],vec3 normal){normal.x=-normal.x;vec3 result=sh[0]+sh[1]*(normal.y)+sh[2]*(normal.z)+sh[3]*(normal.x)+sh[4]*(normal.y*normal.x)+sh[5]*(normal.y*normal.z)+sh[6]*(3.0*normal.z*normal.z-1.0)+sh[7]*(normal.z*normal.x)+sh[8]*(normal.x*normal.x-normal.y*normal.y);return max(result,vec3(0.0));}vec3 envBRDFApprox(vec3 specularColor,float roughness,float dotNV){const vec4 c0=vec4(-1,-0.0275,-0.572,0.022);const vec4 c1=vec4(1,0.0425,1.04,-0.04);vec4 r=roughness*c0+c1;float a004=min(r.x*r.x,exp2(-9.28*dotNV))*r.x+r.y;vec2 AB=vec2(-1.04,1.04)*a004+r.zw;return specularColor*AB.x+AB.y;}float getSpecularMIPLevel(float roughness,int maxMIPLevel){return roughness*float(maxMIPLevel);}vec3 getLightProbeRadiance(vec3 viewDir,vec3 normal,float roughness,int maxMIPLevel,float specularIntensity){\n#ifndef SCENE_USE_SPECULAR_ENV\nreturn vec3(0);\n#else\nvec3 reflectVec=reflect(-viewDir,normal);reflectVec.x=-reflectVec.x;float specularMIPLevel=getSpecularMIPLevel(roughness,maxMIPLevel);\n#ifdef HAS_TEX_LOD\nvec4 envMapColor=textureCubeLodEXT(scene_EnvSpecularSampler,reflectVec,specularMIPLevel);\n#else\nvec4 envMapColor=textureCube(scene_EnvSpecularSampler,reflectVec,specularMIPLevel);\n#endif\n#ifdef SCENE_IS_DECODE_ENV_RGBM\nenvMapColor.rgb=RGBMToLinear(envMapColor,5.0).rgb;\n#ifdef ENGINE_IS_COLORSPACE_GAMMA\nenvMapColor=linearToGamma(envMapColor);\n#endif\n#else\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nenvMapColor=gammaToLinear(envMapColor);\n#endif\n#endif\nreturn envMapColor.rgb*specularIntensity;\n#endif\n}"; // eslint-disable-line
|
|
9612
9631
|
|
|
9613
|
-
var pbr_frag = "#define GLSLIFY 1\nGeometry geometry;Material material;ReflectedLight reflectedLight=ReflectedLight(vec3(0.0),vec3(0.0),vec3(0.0),vec3(0.0));initGeometry(geometry);initMaterial(material,geometry);addTotalDirectRadiance(geometry,material,reflectedLight);\n#ifdef SCENE_USE_SH\nvec3 irradiance=getLightProbeIrradiance(scene_EnvSH,geometry.normal);\n#ifdef ENGINE_IS_COLORSPACE_GAMMA\nirradiance=linearToGamma(vec4(irradiance,1.0)).rgb;\n#endif\nirradiance*=scene_EnvMapLight.diffuseIntensity;\n#else\nvec3 irradiance=scene_EnvMapLight.diffuse*scene_EnvMapLight.diffuseIntensity;irradiance*=PI;\n#endif\nreflectedLight.indirectDiffuse+=irradiance*BRDF_Diffuse_Lambert(material.diffuseColor);vec3 radiance=getLightProbeRadiance(geometry.viewDir,geometry.normal,material.roughness,int(scene_EnvMapLight.mipMapLevel),scene_EnvMapLight.specularIntensity);float radianceAttenuation=1.0;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nvec3 clearCoatRadiance=getLightProbeRadiance(geometry.viewDir,geometry.clearCoatNormal,material.clearCoatRoughness,int(scene_EnvMapLight.mipMapLevel),scene_EnvMapLight.specularIntensity);reflectedLight.indirectSpecular+=clearCoatRadiance*material.clearCoat*envBRDFApprox(vec3(0.04),material.clearCoatRoughness,geometry.clearCoatDotNV);radianceAttenuation-=material.clearCoat*F_Schlick(geometry.clearCoatDotNV);\n#endif\nreflectedLight.indirectSpecular+=radianceAttenuation*radiance*envBRDFApprox(material.specularColor,material.roughness,geometry.dotNV);\n#ifdef MATERIAL_HAS_OCCLUSION_TEXTURE\nvec2 aoUV=v_uv;\n#ifdef RENDERER_HAS_UV1\nif(material_OcclusionTextureCoord==1.0){aoUV=v_uv1;}\n#endif\nfloat ambientOcclusion=(texture2D(material_OcclusionTexture,aoUV).r-1.0)*material_OcclusionIntensity+1.0;reflectedLight.indirectDiffuse*=ambientOcclusion;\n#ifdef SCENE_USE_SPECULAR_ENV\nreflectedLight.indirectSpecular*=computeSpecularOcclusion(ambientOcclusion,material.roughness,geometry.dotNV);\n#endif\n#endif\nvec3 emissiveRadiance=material_EmissiveColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nvec4 emissiveColor=texture2D(material_EmissiveTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nemissiveColor=gammaToLinear(emissiveColor);\n#endif\nemissiveRadiance*=emissiveColor.rgb;\n#endif\nvec3 totalRadiance=reflectedLight.directDiffuse+reflectedLight.indirectDiffuse+reflectedLight.directSpecular+reflectedLight.indirectSpecular+emissiveRadiance;vec4 targetColor=vec4(totalRadiance,material.opacity);gl_FragColor=targetColor;"; // eslint-disable-line
|
|
9632
|
+
var pbr_frag = "#define GLSLIFY 1\nGeometry geometry;Material material;ReflectedLight reflectedLight=ReflectedLight(vec3(0.0),vec3(0.0),vec3(0.0),vec3(0.0));initGeometry(geometry,gl_FrontFacing);initMaterial(material,geometry);addTotalDirectRadiance(geometry,material,reflectedLight);\n#ifdef SCENE_USE_SH\nvec3 irradiance=getLightProbeIrradiance(scene_EnvSH,geometry.normal);\n#ifdef ENGINE_IS_COLORSPACE_GAMMA\nirradiance=linearToGamma(vec4(irradiance,1.0)).rgb;\n#endif\nirradiance*=scene_EnvMapLight.diffuseIntensity;\n#else\nvec3 irradiance=scene_EnvMapLight.diffuse*scene_EnvMapLight.diffuseIntensity;irradiance*=PI;\n#endif\nreflectedLight.indirectDiffuse+=irradiance*BRDF_Diffuse_Lambert(material.diffuseColor);vec3 radiance=getLightProbeRadiance(geometry.viewDir,geometry.normal,material.roughness,int(scene_EnvMapLight.mipMapLevel),scene_EnvMapLight.specularIntensity);float radianceAttenuation=1.0;\n#ifdef MATERIAL_ENABLE_CLEAR_COAT\nvec3 clearCoatRadiance=getLightProbeRadiance(geometry.viewDir,geometry.clearCoatNormal,material.clearCoatRoughness,int(scene_EnvMapLight.mipMapLevel),scene_EnvMapLight.specularIntensity);reflectedLight.indirectSpecular+=clearCoatRadiance*material.clearCoat*envBRDFApprox(vec3(0.04),material.clearCoatRoughness,geometry.clearCoatDotNV);radianceAttenuation-=material.clearCoat*F_Schlick(geometry.clearCoatDotNV);\n#endif\nreflectedLight.indirectSpecular+=radianceAttenuation*radiance*envBRDFApprox(material.specularColor,material.roughness,geometry.dotNV);\n#ifdef MATERIAL_HAS_OCCLUSION_TEXTURE\nvec2 aoUV=v_uv;\n#ifdef RENDERER_HAS_UV1\nif(material_OcclusionTextureCoord==1.0){aoUV=v_uv1;}\n#endif\nfloat ambientOcclusion=(texture2D(material_OcclusionTexture,aoUV).r-1.0)*material_OcclusionIntensity+1.0;reflectedLight.indirectDiffuse*=ambientOcclusion;\n#ifdef SCENE_USE_SPECULAR_ENV\nreflectedLight.indirectSpecular*=computeSpecularOcclusion(ambientOcclusion,material.roughness,geometry.dotNV);\n#endif\n#endif\nvec3 emissiveRadiance=material_EmissiveColor;\n#ifdef MATERIAL_HAS_EMISSIVETEXTURE\nvec4 emissiveColor=texture2D(material_EmissiveTexture,v_uv);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\nemissiveColor=gammaToLinear(emissiveColor);\n#endif\nemissiveRadiance*=emissiveColor.rgb;\n#endif\nvec3 totalRadiance=reflectedLight.directDiffuse+reflectedLight.indirectDiffuse+reflectedLight.directSpecular+reflectedLight.indirectSpecular+emissiveRadiance;vec4 targetColor=vec4(totalRadiance,material.opacity);gl_FragColor=targetColor;"; // eslint-disable-line
|
|
9614
9633
|
|
|
9615
9634
|
var PBRShaderLib = {
|
|
9616
9635
|
pbr_frag_define: pbr_frag_define,
|
|
@@ -9639,7 +9658,7 @@ var ShadowLib = {
|
|
|
9639
9658
|
ShadowVertex: ShadowVertex
|
|
9640
9659
|
};
|
|
9641
9660
|
|
|
9642
|
-
var normal_get = "#define GLSLIFY 1\nvec3 getNormal(){\n#ifdef RENDERER_HAS_NORMAL\nvec3 normal=normalize(v_normal);\n#elif defined(HAS_DERIVATIVES)\nvec3 pos_dx=dFdx(v_pos);vec3 pos_dy=dFdy(v_pos);vec3 normal=normalize(cross(pos_dx,pos_dy));\n#else\nvec3 normal=vec3(0,0,1);\n#endif\nnormal*=float(
|
|
9661
|
+
var normal_get = "#define GLSLIFY 1\nvec3 getNormal(bool isFrontFacing){\n#ifdef RENDERER_HAS_NORMAL\nvec3 normal=normalize(v_normal);\n#elif defined(HAS_DERIVATIVES)\nvec3 pos_dx=dFdx(v_pos);vec3 pos_dy=dFdy(v_pos);vec3 normal=normalize(cross(pos_dx,pos_dy));\n#else\nvec3 normal=vec3(0,0,1);\n#endif\nnormal*=float(isFrontFacing)*2.0-1.0;return normal;}vec3 getNormalByNormalTexture(mat3 tbn,sampler2D normalTexture,float normalIntensity,vec2 uv,bool isFrontFacing){vec3 normal=texture2D(normalTexture,uv).rgb;normal=normalize(tbn*((2.0*normal-1.0)*vec3(normalIntensity,normalIntensity,1.0)));normal*=float(isFrontFacing)*2.0-1.0;return normal;}mat3 getTBN(bool isFrontFacing){\n#if defined(RENDERER_HAS_NORMAL) && defined(RENDERER_HAS_TANGENT) && ( defined(MATERIAL_HAS_NORMALTEXTURE) || defined(MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE) )\nmat3 tbn=v_TBN;\n#else\nvec3 normal=getNormal(isFrontFacing);vec3 position=v_pos;vec2 uv=isFrontFacing? v_uv:-v_uv;\n#ifdef HAS_DERIVATIVES\nvec3 dp1=dFdx(position);vec3 dp2=dFdy(position);vec2 duv1=dFdx(uv);vec2 duv2=dFdy(uv);vec3 dp2perp=cross(dp2,normal);vec3 dp1perp=cross(normal,dp1);vec3 tangent=dp2perp*duv1.x+dp1perp*duv2.x;vec3 binormal=dp2perp*duv1.y+dp1perp*duv2.y;float invmax=inversesqrt(max(dot(tangent,tangent),dot(binormal,binormal)));mat3 tbn=mat3(tangent*invmax,binormal*invmax,normal);\n#else\nmat3 tbn=mat3(vec3(0.0),vec3(0.0),normal);\n#endif\n#endif\nreturn tbn;}"; // eslint-disable-line
|
|
9643
9662
|
|
|
9644
9663
|
var ShaderLib = _extends({
|
|
9645
9664
|
common: common,
|
|
@@ -11177,8 +11196,10 @@ SimpleSpriteAssembler = __decorate([
|
|
|
11177
11196
|
_this = Renderer.call(this, entity) || this;
|
|
11178
11197
|
/** The mask layers the sprite mask influence to. */ _this.influenceLayers = exports.SpriteMaskLayer.Everything;
|
|
11179
11198
|
_this._sprite = null;
|
|
11180
|
-
_this.
|
|
11181
|
-
_this.
|
|
11199
|
+
_this._automaticWidth = 0;
|
|
11200
|
+
_this._automaticHeight = 0;
|
|
11201
|
+
_this._customWidth = undefined;
|
|
11202
|
+
_this._customHeight = undefined;
|
|
11182
11203
|
_this._flipX = false;
|
|
11183
11204
|
_this._flipY = false;
|
|
11184
11205
|
_this._alphaCutoff = 0.5;
|
|
@@ -11198,12 +11219,11 @@ SimpleSpriteAssembler = __decorate([
|
|
|
11198
11219
|
/**
|
|
11199
11220
|
* @internal
|
|
11200
11221
|
*/ _proto._updateBounds = function _updateBounds(worldBounds) {
|
|
11201
|
-
|
|
11202
|
-
|
|
11222
|
+
if (this.sprite) {
|
|
11223
|
+
SimpleSpriteAssembler.updatePositions(this);
|
|
11224
|
+
} else {
|
|
11203
11225
|
worldBounds.min.set(0, 0, 0);
|
|
11204
11226
|
worldBounds.max.set(0, 0, 0);
|
|
11205
|
-
} else {
|
|
11206
|
-
SimpleSpriteAssembler.updatePositions(this);
|
|
11207
11227
|
}
|
|
11208
11228
|
};
|
|
11209
11229
|
/**
|
|
@@ -11214,12 +11234,12 @@ SimpleSpriteAssembler = __decorate([
|
|
|
11214
11234
|
if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
|
|
11215
11235
|
return;
|
|
11216
11236
|
}
|
|
11217
|
-
// Update position
|
|
11237
|
+
// Update position
|
|
11218
11238
|
if (this._dirtyUpdateFlag & RendererUpdateFlags.WorldVolume) {
|
|
11219
11239
|
SimpleSpriteAssembler.updatePositions(this);
|
|
11220
11240
|
this._dirtyUpdateFlag &= ~RendererUpdateFlags.WorldVolume;
|
|
11221
11241
|
}
|
|
11222
|
-
// Update uv
|
|
11242
|
+
// Update uv
|
|
11223
11243
|
if (this._dirtyUpdateFlag & 0x2) {
|
|
11224
11244
|
SimpleSpriteAssembler.updateUVs(this);
|
|
11225
11245
|
this._dirtyUpdateFlag &= ~0x2;
|
|
@@ -11242,11 +11262,27 @@ SimpleSpriteAssembler = __decorate([
|
|
|
11242
11262
|
this._sprite = null;
|
|
11243
11263
|
this._verticesData = null;
|
|
11244
11264
|
};
|
|
11265
|
+
_proto._calDefaultSize = function _calDefaultSize() {
|
|
11266
|
+
var sprite = this._sprite;
|
|
11267
|
+
if (sprite) {
|
|
11268
|
+
this._automaticWidth = sprite.width;
|
|
11269
|
+
this._automaticHeight = sprite.height;
|
|
11270
|
+
} else {
|
|
11271
|
+
this._automaticWidth = this._automaticHeight = 0;
|
|
11272
|
+
}
|
|
11273
|
+
this._dirtyUpdateFlag &= ~0x4;
|
|
11274
|
+
};
|
|
11245
11275
|
_proto._onSpriteChange = function _onSpriteChange(type) {
|
|
11246
11276
|
switch(type){
|
|
11247
11277
|
case SpriteModifyFlags.texture:
|
|
11248
11278
|
this.shaderData.setTexture(SpriteMask._textureProperty, this.sprite.texture);
|
|
11249
11279
|
break;
|
|
11280
|
+
case SpriteModifyFlags.size:
|
|
11281
|
+
this._dirtyUpdateFlag |= 0x4;
|
|
11282
|
+
if (this._customWidth === undefined || this._customHeight === undefined) {
|
|
11283
|
+
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
|
|
11284
|
+
}
|
|
11285
|
+
break;
|
|
11250
11286
|
case SpriteModifyFlags.region:
|
|
11251
11287
|
case SpriteModifyFlags.atlasRegionOffset:
|
|
11252
11288
|
this._dirtyUpdateFlag |= 0x3;
|
|
@@ -11254,22 +11290,31 @@ SimpleSpriteAssembler = __decorate([
|
|
|
11254
11290
|
case SpriteModifyFlags.atlasRegion:
|
|
11255
11291
|
this._dirtyUpdateFlag |= 0x2;
|
|
11256
11292
|
break;
|
|
11293
|
+
case SpriteModifyFlags.pivot:
|
|
11294
|
+
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
|
|
11295
|
+
break;
|
|
11257
11296
|
}
|
|
11258
11297
|
};
|
|
11259
11298
|
_create_class(SpriteMask, [
|
|
11260
11299
|
{
|
|
11261
11300
|
key: "width",
|
|
11262
11301
|
get: /**
|
|
11263
|
-
* Render width.
|
|
11302
|
+
* Render width (in world coordinates).
|
|
11303
|
+
*
|
|
11304
|
+
* @remarks
|
|
11305
|
+
* If width is set, return the set value,
|
|
11306
|
+
* otherwise return `SpriteMask.sprite.width`.
|
|
11264
11307
|
*/ function get() {
|
|
11265
|
-
if (this.
|
|
11266
|
-
|
|
11308
|
+
if (this._customWidth !== undefined) {
|
|
11309
|
+
return this._customWidth;
|
|
11310
|
+
} else {
|
|
11311
|
+
this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
|
|
11312
|
+
return this._automaticWidth;
|
|
11267
11313
|
}
|
|
11268
|
-
return this._width;
|
|
11269
11314
|
},
|
|
11270
11315
|
set: function set(value) {
|
|
11271
|
-
if (this.
|
|
11272
|
-
this.
|
|
11316
|
+
if (this._customWidth !== value) {
|
|
11317
|
+
this._customWidth = value;
|
|
11273
11318
|
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
|
|
11274
11319
|
}
|
|
11275
11320
|
}
|
|
@@ -11277,16 +11322,22 @@ SimpleSpriteAssembler = __decorate([
|
|
|
11277
11322
|
{
|
|
11278
11323
|
key: "height",
|
|
11279
11324
|
get: /**
|
|
11280
|
-
* Render height.
|
|
11325
|
+
* Render height (in world coordinates).
|
|
11326
|
+
*
|
|
11327
|
+
* @remarks
|
|
11328
|
+
* If height is set, return the set value,
|
|
11329
|
+
* otherwise return `SpriteMask.sprite.height`.
|
|
11281
11330
|
*/ function get() {
|
|
11282
|
-
if (this.
|
|
11283
|
-
|
|
11331
|
+
if (this._customHeight !== undefined) {
|
|
11332
|
+
return this._customHeight;
|
|
11333
|
+
} else {
|
|
11334
|
+
this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
|
|
11335
|
+
return this._automaticHeight;
|
|
11284
11336
|
}
|
|
11285
|
-
return this._height;
|
|
11286
11337
|
},
|
|
11287
11338
|
set: function set(value) {
|
|
11288
|
-
if (this.
|
|
11289
|
-
this.
|
|
11339
|
+
if (this._customHeight !== value) {
|
|
11340
|
+
this._customHeight = value;
|
|
11290
11341
|
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
|
|
11291
11342
|
}
|
|
11292
11343
|
}
|
|
@@ -11330,9 +11381,9 @@ SimpleSpriteAssembler = __decorate([
|
|
|
11330
11381
|
var lastSprite = this._sprite;
|
|
11331
11382
|
if (lastSprite !== value) {
|
|
11332
11383
|
lastSprite && lastSprite._updateFlagManager.removeListener(this._onSpriteChange);
|
|
11384
|
+
this._dirtyUpdateFlag |= 0x7;
|
|
11333
11385
|
if (value) {
|
|
11334
11386
|
value._updateFlagManager.addListener(this._onSpriteChange);
|
|
11335
|
-
this._dirtyUpdateFlag |= 0x3;
|
|
11336
11387
|
this.shaderData.setTexture(SpriteMask._textureProperty, value.texture);
|
|
11337
11388
|
} else {
|
|
11338
11389
|
this.shaderData.setTexture(SpriteMask._textureProperty, null);
|
|
@@ -11372,10 +11423,16 @@ __decorate([
|
|
|
11372
11423
|
], SpriteMask.prototype, "_sprite", void 0);
|
|
11373
11424
|
__decorate([
|
|
11374
11425
|
ignoreClone
|
|
11375
|
-
], SpriteMask.prototype, "
|
|
11426
|
+
], SpriteMask.prototype, "_automaticWidth", void 0);
|
|
11376
11427
|
__decorate([
|
|
11377
11428
|
ignoreClone
|
|
11378
|
-
], SpriteMask.prototype, "
|
|
11429
|
+
], SpriteMask.prototype, "_automaticHeight", void 0);
|
|
11430
|
+
__decorate([
|
|
11431
|
+
assignmentClone
|
|
11432
|
+
], SpriteMask.prototype, "_customWidth", void 0);
|
|
11433
|
+
__decorate([
|
|
11434
|
+
assignmentClone
|
|
11435
|
+
], SpriteMask.prototype, "_customHeight", void 0);
|
|
11379
11436
|
__decorate([
|
|
11380
11437
|
assignmentClone
|
|
11381
11438
|
], SpriteMask.prototype, "_flipX", void 0);
|
|
@@ -11393,7 +11450,9 @@ var /**
|
|
|
11393
11450
|
*/ SpriteMaskUpdateFlags;
|
|
11394
11451
|
(function(SpriteMaskUpdateFlags) {
|
|
11395
11452
|
SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** UV. */ "UV"] = 0x2] = "UV";
|
|
11396
|
-
SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/**
|
|
11453
|
+
SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** WorldVolume and UV . */ "RenderData"] = 0x3] = "RenderData";
|
|
11454
|
+
SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** Automatic Size. */ "AutomaticSize"] = 0x4] = "AutomaticSize";
|
|
11455
|
+
SpriteMaskUpdateFlags[SpriteMaskUpdateFlags[/** All. */ "All"] = 0x7] = "All";
|
|
11397
11456
|
})(SpriteMaskUpdateFlags || (SpriteMaskUpdateFlags = {}));
|
|
11398
11457
|
|
|
11399
11458
|
/**
|
|
@@ -12200,6 +12259,7 @@ var MeshModifyFlags;
|
|
|
12200
12259
|
var subDataDirtyFlags = this._subDataDirtyFlags;
|
|
12201
12260
|
var blendShapeFloatStride = this._vertexElementCount * 3;
|
|
12202
12261
|
var blendShapeByteStride = blendShapeFloatStride * 4;
|
|
12262
|
+
var bufferOffset = this._bufferBindingOffset;
|
|
12203
12263
|
// @todo: should fix bug when dataChangedFlag is true
|
|
12204
12264
|
for(var i = 0, n = blendShapes.length; i < n; i++){
|
|
12205
12265
|
var dataChangedFlag = subDataDirtyFlags[i];
|
|
@@ -12217,7 +12277,7 @@ var MeshModifyFlags;
|
|
|
12217
12277
|
var offset = indexInBuffer * blendShapeFloatStride;
|
|
12218
12278
|
var storeInfo = storeInfos[i];
|
|
12219
12279
|
storeInfo || (storeInfos[i] = storeInfo = new miniprogram.Vector2());
|
|
12220
|
-
storeInfo.set(
|
|
12280
|
+
storeInfo.set(bufferOffset + bufferIndex, indexInBuffer * blendShapeByteStride); // BufferOffset is mesh vertexBuffer offset
|
|
12221
12281
|
var deltaPositions = endFrame.deltaPositions;
|
|
12222
12282
|
for(var j = 0; j < vertexCount; j++){
|
|
12223
12283
|
var start = offset + bufferFloatStride * j;
|
|
@@ -13494,6 +13554,7 @@ var VertexChangedFlags;
|
|
|
13494
13554
|
function MeshRenderer(entity) {
|
|
13495
13555
|
var _this;
|
|
13496
13556
|
_this = Renderer.call(this, entity) || this;
|
|
13557
|
+
_this._enableVertexColor = false;
|
|
13497
13558
|
_this._onMeshChanged = _this._onMeshChanged.bind(_assert_this_initialized(_this));
|
|
13498
13559
|
return _this;
|
|
13499
13560
|
}
|
|
@@ -13538,7 +13599,7 @@ var VertexChangedFlags;
|
|
|
13538
13599
|
shaderData.disableMacro(MeshRenderer._uv1Macro);
|
|
13539
13600
|
shaderData.disableMacro(MeshRenderer._normalMacro);
|
|
13540
13601
|
shaderData.disableMacro(MeshRenderer._tangentMacro);
|
|
13541
|
-
shaderData.disableMacro(MeshRenderer.
|
|
13602
|
+
shaderData.disableMacro(MeshRenderer._enableVertexColorMacro);
|
|
13542
13603
|
for(var i = 0, n = vertexElements.length; i < n; i++){
|
|
13543
13604
|
switch(vertexElements[i].semantic){
|
|
13544
13605
|
case "TEXCOORD_0":
|
|
@@ -13554,7 +13615,7 @@ var VertexChangedFlags;
|
|
|
13554
13615
|
shaderData.enableMacro(MeshRenderer._tangentMacro);
|
|
13555
13616
|
break;
|
|
13556
13617
|
case "COLOR_0":
|
|
13557
|
-
shaderData.enableMacro(MeshRenderer.
|
|
13618
|
+
this._enableVertexColor && shaderData.enableMacro(MeshRenderer._enableVertexColorMacro);
|
|
13558
13619
|
break;
|
|
13559
13620
|
}
|
|
13560
13621
|
}
|
|
@@ -13605,6 +13666,20 @@ var VertexChangedFlags;
|
|
|
13605
13666
|
this._setMesh(value);
|
|
13606
13667
|
}
|
|
13607
13668
|
}
|
|
13669
|
+
},
|
|
13670
|
+
{
|
|
13671
|
+
key: "enableVertexColor",
|
|
13672
|
+
get: /**
|
|
13673
|
+
* Whether enable vertex color.
|
|
13674
|
+
*/ function get() {
|
|
13675
|
+
return this._enableVertexColor;
|
|
13676
|
+
},
|
|
13677
|
+
set: function set(value) {
|
|
13678
|
+
if (value !== this._enableVertexColor) {
|
|
13679
|
+
this._dirtyUpdateFlag |= 0x2;
|
|
13680
|
+
this._enableVertexColor = value;
|
|
13681
|
+
}
|
|
13682
|
+
}
|
|
13608
13683
|
}
|
|
13609
13684
|
]);
|
|
13610
13685
|
return MeshRenderer;
|
|
@@ -13622,7 +13697,7 @@ var VertexChangedFlags;
|
|
|
13622
13697
|
MeshRenderer._tangentMacro = ShaderMacro.getByName("RENDERER_HAS_TANGENT");
|
|
13623
13698
|
})();
|
|
13624
13699
|
(function() {
|
|
13625
|
-
MeshRenderer.
|
|
13700
|
+
MeshRenderer._enableVertexColorMacro = ShaderMacro.getByName("RENDERER_ENABLE_VERTEXCOLOR");
|
|
13626
13701
|
})();
|
|
13627
13702
|
__decorate([
|
|
13628
13703
|
ignoreClone
|
|
@@ -16123,7 +16198,7 @@ var TextRenderData = /*#__PURE__*/ function(RenderData) {
|
|
|
16123
16198
|
var sunLightIndex = lightManager._getSunLightIndex();
|
|
16124
16199
|
if (sunLightIndex !== -1) {
|
|
16125
16200
|
var sunlight = lightManager._directLights.get(sunLightIndex);
|
|
16126
|
-
shaderData.setColor(Scene._sunlightColorProperty, sunlight.
|
|
16201
|
+
shaderData.setColor(Scene._sunlightColorProperty, sunlight._getLightIntensityColor());
|
|
16127
16202
|
shaderData.setVector3(Scene._sunlightDirectionProperty, sunlight.direction);
|
|
16128
16203
|
this._sunLight = sunlight;
|
|
16129
16204
|
}
|
|
@@ -20398,8 +20473,10 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20398
20473
|
if (name === void 0) name = null;
|
|
20399
20474
|
var _this;
|
|
20400
20475
|
_this = ReferResource.call(this, engine) || this;
|
|
20401
|
-
_this.
|
|
20402
|
-
_this.
|
|
20476
|
+
_this._automaticWidth = 0;
|
|
20477
|
+
_this._automaticHeight = 0;
|
|
20478
|
+
_this._customWidth = undefined;
|
|
20479
|
+
_this._customHeight = undefined;
|
|
20403
20480
|
_this._positions = [
|
|
20404
20481
|
new miniprogram.Vector2(),
|
|
20405
20482
|
new miniprogram.Vector2(),
|
|
@@ -20420,7 +20497,7 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20420
20497
|
_this._region = new miniprogram.Rect(0, 0, 1, 1);
|
|
20421
20498
|
_this._pivot = new miniprogram.Vector2(0.5, 0.5);
|
|
20422
20499
|
_this._border = new miniprogram.Vector4(0, 0, 0, 0);
|
|
20423
|
-
_this._dirtyUpdateFlag =
|
|
20500
|
+
_this._dirtyUpdateFlag = 0x7;
|
|
20424
20501
|
/** @internal */ _this._updateFlagManager = new UpdateFlagManager();
|
|
20425
20502
|
_this._texture = texture;
|
|
20426
20503
|
region && _this._region.copyFrom(region);
|
|
@@ -20468,9 +20545,12 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20468
20545
|
if (this._texture) {
|
|
20469
20546
|
var _this = this, _texture = _this._texture, _atlasRegion = _this._atlasRegion, _atlasRegionOffset = _this._atlasRegionOffset, _region = _this._region;
|
|
20470
20547
|
var pixelsPerUnitReciprocal = 1.0 / Engine._pixelsPerUnit;
|
|
20471
|
-
this.
|
|
20472
|
-
this.
|
|
20548
|
+
this._automaticWidth = _texture.width * _atlasRegion.width / (1 - _atlasRegionOffset.x - _atlasRegionOffset.z) * _region.width * pixelsPerUnitReciprocal;
|
|
20549
|
+
this._automaticHeight = _texture.height * _atlasRegion.height / (1 - _atlasRegionOffset.y - _atlasRegionOffset.w) * _region.height * pixelsPerUnitReciprocal;
|
|
20550
|
+
} else {
|
|
20551
|
+
this._automaticWidth = this._automaticHeight = 0;
|
|
20473
20552
|
}
|
|
20553
|
+
this._dirtyUpdateFlag &= ~0x4;
|
|
20474
20554
|
};
|
|
20475
20555
|
_proto._updatePositions = function _updatePositions() {
|
|
20476
20556
|
var blank = this._atlasRegionOffset;
|
|
@@ -20524,11 +20604,16 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20524
20604
|
};
|
|
20525
20605
|
_proto._dispatchSpriteChange = function _dispatchSpriteChange(type) {
|
|
20526
20606
|
switch(type){
|
|
20607
|
+
case SpriteModifyFlags.texture:
|
|
20608
|
+
this._dirtyUpdateFlag |= 0x4;
|
|
20609
|
+
break;
|
|
20527
20610
|
case SpriteModifyFlags.atlasRegionOffset:
|
|
20528
20611
|
case SpriteModifyFlags.region:
|
|
20529
|
-
this._dirtyUpdateFlag |=
|
|
20612
|
+
this._dirtyUpdateFlag |= 0x7;
|
|
20530
20613
|
break;
|
|
20531
20614
|
case SpriteModifyFlags.atlasRegion:
|
|
20615
|
+
this._dirtyUpdateFlag |= 0x4 | 0x2;
|
|
20616
|
+
break;
|
|
20532
20617
|
case SpriteModifyFlags.border:
|
|
20533
20618
|
this._dirtyUpdateFlag |= 0x2;
|
|
20534
20619
|
break;
|
|
@@ -20547,7 +20632,9 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20547
20632
|
if (this._texture !== value) {
|
|
20548
20633
|
this._texture = value;
|
|
20549
20634
|
this._dispatchSpriteChange(SpriteModifyFlags.texture);
|
|
20550
|
-
(this.
|
|
20635
|
+
if (this._customWidth === undefined || this._customHeight === undefined) {
|
|
20636
|
+
this._dispatchSpriteChange(SpriteModifyFlags.size);
|
|
20637
|
+
}
|
|
20551
20638
|
}
|
|
20552
20639
|
}
|
|
20553
20640
|
},
|
|
@@ -20555,13 +20642,21 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20555
20642
|
key: "width",
|
|
20556
20643
|
get: /**
|
|
20557
20644
|
* The width of the sprite (in world coordinates).
|
|
20645
|
+
*
|
|
20646
|
+
* @remarks
|
|
20647
|
+
* If width is set, return the set value,
|
|
20648
|
+
* otherwise return the width calculated according to `Texture.width`, `Sprite.region`, `Sprite.atlasRegion`, `Sprite.atlasRegionOffset` and `Engine._pixelsPerUnit`.
|
|
20558
20649
|
*/ function get() {
|
|
20559
|
-
this.
|
|
20560
|
-
|
|
20650
|
+
if (this._customWidth !== undefined) {
|
|
20651
|
+
return this._customWidth;
|
|
20652
|
+
} else {
|
|
20653
|
+
this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
|
|
20654
|
+
return this._automaticWidth;
|
|
20655
|
+
}
|
|
20561
20656
|
},
|
|
20562
20657
|
set: function set(value) {
|
|
20563
|
-
if (this.
|
|
20564
|
-
this.
|
|
20658
|
+
if (this._customWidth !== value) {
|
|
20659
|
+
this._customWidth = value;
|
|
20565
20660
|
this._dispatchSpriteChange(SpriteModifyFlags.size);
|
|
20566
20661
|
}
|
|
20567
20662
|
}
|
|
@@ -20570,13 +20665,21 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20570
20665
|
key: "height",
|
|
20571
20666
|
get: /**
|
|
20572
20667
|
* The height of the sprite (in world coordinates).
|
|
20668
|
+
*
|
|
20669
|
+
* @remarks
|
|
20670
|
+
* If height is set, return the set value,
|
|
20671
|
+
* otherwise return the height calculated according to `Texture.height`, `Sprite.region`, `Sprite.atlasRegion`, `Sprite.atlasRegionOffset` and `Engine._pixelsPerUnit`.
|
|
20573
20672
|
*/ function get() {
|
|
20574
|
-
this.
|
|
20575
|
-
|
|
20673
|
+
if (this._customHeight !== undefined) {
|
|
20674
|
+
return this._customHeight;
|
|
20675
|
+
} else {
|
|
20676
|
+
this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
|
|
20677
|
+
return this._automaticHeight;
|
|
20678
|
+
}
|
|
20576
20679
|
},
|
|
20577
20680
|
set: function set(value) {
|
|
20578
|
-
if (this.
|
|
20579
|
-
this.
|
|
20681
|
+
if (this._customHeight !== value) {
|
|
20682
|
+
this._customHeight = value;
|
|
20580
20683
|
this._dispatchSpriteChange(SpriteModifyFlags.size);
|
|
20581
20684
|
}
|
|
20582
20685
|
}
|
|
@@ -20606,7 +20709,9 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20606
20709
|
var y = miniprogram.MathUtil.clamp(value.y, 0, 1);
|
|
20607
20710
|
this._atlasRegion.set(x, y, miniprogram.MathUtil.clamp(value.width, 0, 1 - x), miniprogram.MathUtil.clamp(value.height, 0, 1 - y));
|
|
20608
20711
|
this._dispatchSpriteChange(SpriteModifyFlags.atlasRegion);
|
|
20609
|
-
(this.
|
|
20712
|
+
if (this._customWidth === undefined || this._customHeight === undefined) {
|
|
20713
|
+
this._dispatchSpriteChange(SpriteModifyFlags.size);
|
|
20714
|
+
}
|
|
20610
20715
|
}
|
|
20611
20716
|
},
|
|
20612
20717
|
{
|
|
@@ -20621,7 +20726,9 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20621
20726
|
var y = miniprogram.MathUtil.clamp(value.y, 0, 1);
|
|
20622
20727
|
this._atlasRegionOffset.set(x, y, miniprogram.MathUtil.clamp(value.z, 0, 1 - x), miniprogram.MathUtil.clamp(value.w, 0, 1 - y));
|
|
20623
20728
|
this._dispatchSpriteChange(SpriteModifyFlags.atlasRegionOffset);
|
|
20624
|
-
(this.
|
|
20729
|
+
if (this._customWidth === undefined || this._customHeight === undefined) {
|
|
20730
|
+
this._dispatchSpriteChange(SpriteModifyFlags.size);
|
|
20731
|
+
}
|
|
20625
20732
|
}
|
|
20626
20733
|
},
|
|
20627
20734
|
{
|
|
@@ -20637,7 +20744,9 @@ exports.TextVerticalAlignment = void 0;
|
|
|
20637
20744
|
var y = miniprogram.MathUtil.clamp(value.y, 0, 1);
|
|
20638
20745
|
region.set(x, y, miniprogram.MathUtil.clamp(value.width, 0, 1 - x), miniprogram.MathUtil.clamp(value.height, 0, 1 - y));
|
|
20639
20746
|
this._dispatchSpriteChange(SpriteModifyFlags.region);
|
|
20640
|
-
(this.
|
|
20747
|
+
if (this._customWidth === undefined || this._customHeight === undefined) {
|
|
20748
|
+
this._dispatchSpriteChange(SpriteModifyFlags.size);
|
|
20749
|
+
}
|
|
20641
20750
|
}
|
|
20642
20751
|
},
|
|
20643
20752
|
{
|
|
@@ -20687,7 +20796,8 @@ var SpriteUpdateFlags;
|
|
|
20687
20796
|
(function(SpriteUpdateFlags) {
|
|
20688
20797
|
SpriteUpdateFlags[SpriteUpdateFlags["positions"] = 0x1] = "positions";
|
|
20689
20798
|
SpriteUpdateFlags[SpriteUpdateFlags["uvs"] = 0x2] = "uvs";
|
|
20690
|
-
SpriteUpdateFlags[SpriteUpdateFlags["
|
|
20799
|
+
SpriteUpdateFlags[SpriteUpdateFlags["automaticSize"] = 0x4] = "automaticSize";
|
|
20800
|
+
SpriteUpdateFlags[SpriteUpdateFlags["all"] = 0x7] = "all";
|
|
20691
20801
|
})(SpriteUpdateFlags || (SpriteUpdateFlags = {}));
|
|
20692
20802
|
|
|
20693
20803
|
var _SlicedSpriteAssembler;
|
|
@@ -21179,8 +21289,10 @@ var TiledType;
|
|
|
21179
21289
|
_this._tiledAdaptiveThreshold = 0.5;
|
|
21180
21290
|
_this._color = new miniprogram.Color(1, 1, 1, 1);
|
|
21181
21291
|
_this._sprite = null;
|
|
21182
|
-
_this.
|
|
21183
|
-
_this.
|
|
21292
|
+
_this._automaticWidth = 0;
|
|
21293
|
+
_this._automaticHeight = 0;
|
|
21294
|
+
_this._customWidth = undefined;
|
|
21295
|
+
_this._customHeight = undefined;
|
|
21184
21296
|
_this._flipX = false;
|
|
21185
21297
|
_this._flipY = false;
|
|
21186
21298
|
_this._maskLayer = exports.SpriteMaskLayer.Layer0;
|
|
@@ -21197,6 +21309,7 @@ var TiledType;
|
|
|
21197
21309
|
*/ _proto._cloneTo = function _cloneTo(target) {
|
|
21198
21310
|
target._assembler.resetData(target);
|
|
21199
21311
|
target.sprite = this._sprite;
|
|
21312
|
+
target.drawMode = this._drawMode;
|
|
21200
21313
|
};
|
|
21201
21314
|
/**
|
|
21202
21315
|
* @internal
|
|
@@ -21207,12 +21320,11 @@ var TiledType;
|
|
|
21207
21320
|
/**
|
|
21208
21321
|
* @internal
|
|
21209
21322
|
*/ _proto._updateBounds = function _updateBounds(worldBounds) {
|
|
21210
|
-
|
|
21211
|
-
|
|
21323
|
+
if (this.sprite) {
|
|
21324
|
+
this._assembler.updatePositions(this);
|
|
21325
|
+
} else {
|
|
21212
21326
|
worldBounds.min.set(0, 0, 0);
|
|
21213
21327
|
worldBounds.max.set(0, 0, 0);
|
|
21214
|
-
} else {
|
|
21215
|
-
this._assembler.updatePositions(this);
|
|
21216
21328
|
}
|
|
21217
21329
|
};
|
|
21218
21330
|
/**
|
|
@@ -21222,17 +21334,17 @@ var TiledType;
|
|
|
21222
21334
|
if (!((_this_sprite = this.sprite) == null ? void 0 : _this_sprite.texture) || !this.width || !this.height) {
|
|
21223
21335
|
return;
|
|
21224
21336
|
}
|
|
21225
|
-
// Update position
|
|
21337
|
+
// Update position
|
|
21226
21338
|
if (this._dirtyUpdateFlag & RendererUpdateFlags.WorldVolume) {
|
|
21227
21339
|
this._assembler.updatePositions(this);
|
|
21228
21340
|
this._dirtyUpdateFlag &= ~RendererUpdateFlags.WorldVolume;
|
|
21229
21341
|
}
|
|
21230
|
-
// Update uv
|
|
21342
|
+
// Update uv
|
|
21231
21343
|
if (this._dirtyUpdateFlag & 0x2) {
|
|
21232
21344
|
this._assembler.updateUVs(this);
|
|
21233
21345
|
this._dirtyUpdateFlag &= ~0x2;
|
|
21234
21346
|
}
|
|
21235
|
-
// Push
|
|
21347
|
+
// Push primitive
|
|
21236
21348
|
var material = this.getMaterial();
|
|
21237
21349
|
var texture = this.sprite.texture;
|
|
21238
21350
|
var renderData = this._engine._spriteRenderDataPool.getFromPool();
|
|
@@ -21250,6 +21362,16 @@ var TiledType;
|
|
|
21250
21362
|
this._assembler = null;
|
|
21251
21363
|
this._verticesData = null;
|
|
21252
21364
|
};
|
|
21365
|
+
_proto._calDefaultSize = function _calDefaultSize() {
|
|
21366
|
+
var sprite = this._sprite;
|
|
21367
|
+
if (sprite) {
|
|
21368
|
+
this._automaticWidth = sprite.width;
|
|
21369
|
+
this._automaticHeight = sprite.height;
|
|
21370
|
+
} else {
|
|
21371
|
+
this._automaticWidth = this._automaticHeight = 0;
|
|
21372
|
+
}
|
|
21373
|
+
this._dirtyUpdateFlag &= ~0x4;
|
|
21374
|
+
};
|
|
21253
21375
|
_proto._updateStencilState = function _updateStencilState() {
|
|
21254
21376
|
// Update stencil.
|
|
21255
21377
|
var material = this.getInstanceMaterial();
|
|
@@ -21276,22 +21398,21 @@ var TiledType;
|
|
|
21276
21398
|
break;
|
|
21277
21399
|
case SpriteModifyFlags.size:
|
|
21278
21400
|
var _this = this, drawMode = _this._drawMode;
|
|
21279
|
-
|
|
21401
|
+
this._dirtyUpdateFlag |= 0x4;
|
|
21402
|
+
if (this._drawMode === exports.SpriteDrawMode.Sliced) {
|
|
21280
21403
|
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
|
|
21281
21404
|
} else if (drawMode === exports.SpriteDrawMode.Tiled) {
|
|
21282
21405
|
this._dirtyUpdateFlag |= 0x3;
|
|
21283
21406
|
} else {
|
|
21284
21407
|
// When the width and height of `SpriteRenderer` are `undefined`,
|
|
21285
21408
|
// the `size` of `Sprite` will affect the position of `SpriteRenderer`.
|
|
21286
|
-
if (this.
|
|
21409
|
+
if (this._customWidth === undefined || this._customHeight === undefined) {
|
|
21287
21410
|
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
|
|
21288
21411
|
}
|
|
21289
21412
|
}
|
|
21290
21413
|
break;
|
|
21291
21414
|
case SpriteModifyFlags.border:
|
|
21292
|
-
|
|
21293
|
-
this._dirtyUpdateFlag |= 0x3;
|
|
21294
|
-
}
|
|
21415
|
+
this._drawMode === exports.SpriteDrawMode.Sliced && (this._dirtyUpdateFlag |= 0x3);
|
|
21295
21416
|
break;
|
|
21296
21417
|
case SpriteModifyFlags.region:
|
|
21297
21418
|
case SpriteModifyFlags.atlasRegionOffset:
|
|
@@ -21376,9 +21497,9 @@ var TiledType;
|
|
|
21376
21497
|
var lastSprite = this._sprite;
|
|
21377
21498
|
if (lastSprite !== value) {
|
|
21378
21499
|
lastSprite && lastSprite._updateFlagManager.removeListener(this._onSpriteChange);
|
|
21500
|
+
this._dirtyUpdateFlag |= 0x7;
|
|
21379
21501
|
if (value) {
|
|
21380
21502
|
value._updateFlagManager.addListener(this._onSpriteChange);
|
|
21381
|
-
this._dirtyUpdateFlag |= 0x3;
|
|
21382
21503
|
this.shaderData.setTexture(SpriteRenderer._textureProperty, value.texture);
|
|
21383
21504
|
} else {
|
|
21384
21505
|
this.shaderData.setTexture(SpriteRenderer._textureProperty, null);
|
|
@@ -21403,16 +21524,22 @@ var TiledType;
|
|
|
21403
21524
|
{
|
|
21404
21525
|
key: "width",
|
|
21405
21526
|
get: /**
|
|
21406
|
-
* Render width.
|
|
21527
|
+
* Render width (in world coordinates).
|
|
21528
|
+
*
|
|
21529
|
+
* @remarks
|
|
21530
|
+
* If width is set, return the set value,
|
|
21531
|
+
* otherwise return `SpriteRenderer.sprite.width`.
|
|
21407
21532
|
*/ function get() {
|
|
21408
|
-
|
|
21409
|
-
|
|
21533
|
+
if (this._customWidth !== undefined) {
|
|
21534
|
+
return this._customWidth;
|
|
21535
|
+
} else {
|
|
21536
|
+
this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
|
|
21537
|
+
return this._automaticWidth;
|
|
21538
|
+
}
|
|
21410
21539
|
},
|
|
21411
21540
|
set: function set(value) {
|
|
21412
|
-
|
|
21413
|
-
|
|
21414
|
-
if (this._width !== value) {
|
|
21415
|
-
this._width = value;
|
|
21541
|
+
if (this._customWidth !== value) {
|
|
21542
|
+
this._customWidth = value;
|
|
21416
21543
|
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
|
|
21417
21544
|
}
|
|
21418
21545
|
}
|
|
@@ -21420,16 +21547,22 @@ var TiledType;
|
|
|
21420
21547
|
{
|
|
21421
21548
|
key: "height",
|
|
21422
21549
|
get: /**
|
|
21423
|
-
* Render height.
|
|
21550
|
+
* Render height (in world coordinates).
|
|
21551
|
+
*
|
|
21552
|
+
* @remarks
|
|
21553
|
+
* If height is set, return the set value,
|
|
21554
|
+
* otherwise return `SpriteRenderer.sprite.height`.
|
|
21424
21555
|
*/ function get() {
|
|
21425
|
-
|
|
21426
|
-
|
|
21556
|
+
if (this._customHeight !== undefined) {
|
|
21557
|
+
return this._customHeight;
|
|
21558
|
+
} else {
|
|
21559
|
+
this._dirtyUpdateFlag & 0x4 && this._calDefaultSize();
|
|
21560
|
+
return this._automaticHeight;
|
|
21561
|
+
}
|
|
21427
21562
|
},
|
|
21428
21563
|
set: function set(value) {
|
|
21429
|
-
|
|
21430
|
-
|
|
21431
|
-
if (this._height !== value) {
|
|
21432
|
-
this._height = value;
|
|
21564
|
+
if (this._customHeight !== value) {
|
|
21565
|
+
this._customHeight = value;
|
|
21433
21566
|
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
|
|
21434
21567
|
}
|
|
21435
21568
|
}
|
|
@@ -21516,10 +21649,16 @@ __decorate([
|
|
|
21516
21649
|
], SpriteRenderer.prototype, "_sprite", void 0);
|
|
21517
21650
|
__decorate([
|
|
21518
21651
|
ignoreClone
|
|
21519
|
-
], SpriteRenderer.prototype, "
|
|
21652
|
+
], SpriteRenderer.prototype, "_automaticWidth", void 0);
|
|
21520
21653
|
__decorate([
|
|
21521
21654
|
ignoreClone
|
|
21522
|
-
], SpriteRenderer.prototype, "
|
|
21655
|
+
], SpriteRenderer.prototype, "_automaticHeight", void 0);
|
|
21656
|
+
__decorate([
|
|
21657
|
+
assignmentClone
|
|
21658
|
+
], SpriteRenderer.prototype, "_customWidth", void 0);
|
|
21659
|
+
__decorate([
|
|
21660
|
+
assignmentClone
|
|
21661
|
+
], SpriteRenderer.prototype, "_customHeight", void 0);
|
|
21523
21662
|
__decorate([
|
|
21524
21663
|
assignmentClone
|
|
21525
21664
|
], SpriteRenderer.prototype, "_flipX", void 0);
|
|
@@ -21540,7 +21679,9 @@ var /**
|
|
|
21540
21679
|
*/ SpriteRendererUpdateFlags;
|
|
21541
21680
|
(function(SpriteRendererUpdateFlags) {
|
|
21542
21681
|
SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** UV. */ "UV"] = 0x2] = "UV";
|
|
21543
|
-
SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/**
|
|
21682
|
+
SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** WorldVolume and UV . */ "RenderData"] = 0x3] = "RenderData";
|
|
21683
|
+
SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** Automatic Size. */ "AutomaticSize"] = 0x4] = "AutomaticSize";
|
|
21684
|
+
SpriteRendererUpdateFlags[SpriteRendererUpdateFlags[/** All. */ "All"] = 0x7] = "All";
|
|
21544
21685
|
})(SpriteRendererUpdateFlags || (SpriteRendererUpdateFlags = {}));
|
|
21545
21686
|
|
|
21546
21687
|
/**
|