@@ -355,9 +355,11 @@ class MaterialProgram_Base extends DeviceProgram {
355
355
public static ub_MeshFragParams = 1 ;
356
356
357
357
public static BindingDefinitions = `
358
+ ${ GfxShaderLibrary . MatrixLibrary }
359
+
358
360
// Expected to be constant across the entire scene.
359
- layout(std140, row_major ) uniform ub_SceneParams {
360
- mat4 u_ProjectionView;
361
+ layout(std140) uniform ub_SceneParams {
362
+ Mat4x4 u_ProjectionView;
361
363
vec4 u_CameraPosWorld; // DebugMode is in w
362
364
};
363
365
@@ -570,8 +572,8 @@ precision mediump float;
570
572
571
573
${ MaterialProgram_Base . BindingDefinitions }
572
574
573
- layout(std140, row_major ) uniform ub_MeshFragParams {
574
- mat4x3 u_WorldFromLocal[1];
575
+ layout(std140) uniform ub_MeshFragParams {
576
+ Mat3x4 u_WorldFromLocal[1];
575
577
vec4 u_DiffuseMapColor;
576
578
vec4 u_SpecularMapColor;
577
579
vec4 u_EnvDifColor;
@@ -651,18 +653,19 @@ layout(location = ${MaterialProgram_Base.a_Tangent1}) in vec4 a_Tangent1;
651
653
${ GfxShaderLibrary . MulNormalMatrix }
652
654
653
655
void main() {
654
- vec3 t_PositionWorld = u_WorldFromLocal[0] * vec4(a_Position, 1.0);
656
+ mat4x3 t_WorldFromLocal = UnpackMatrix(u_WorldFromLocal[0]);
657
+ vec3 t_PositionWorld = t_WorldFromLocal * vec4(a_Position, 1.0);
655
658
v_PositionWorld = t_PositionWorld.xyz;
656
- gl_Position = u_ProjectionView * vec4(t_PositionWorld, 1.0);
659
+ gl_Position = UnpackMatrix( u_ProjectionView) * vec4(t_PositionWorld, 1.0);
657
660
658
- vec3 t_NormalWorld = MulNormalMatrix(u_WorldFromLocal[0] , UNORM_TO_SNORM(a_Normal.xyz));
661
+ vec3 t_NormalWorld = MulNormalMatrix(t_WorldFromLocal , UNORM_TO_SNORM(a_Normal.xyz));
659
662
v_TangentSpaceBasisZ = t_NormalWorld;
660
663
661
- vec3 t_TangentWorld0 = normalize(u_WorldFromLocal[0] * vec4(UNORM_TO_SNORM(a_Tangent0.xyz), 0.0));
664
+ vec3 t_TangentWorld0 = normalize(t_WorldFromLocal * vec4(UNORM_TO_SNORM(a_Tangent0.xyz), 0.0));
662
665
v_TangentSpaceBasisY0 = vec4(t_TangentWorld0, UNORM_TO_SNORM(a_Tangent0.w));
663
666
664
667
#ifdef HAS_TANGENT1
665
- vec3 t_TangentWorld1 = normalize(u_WorldFromLocal[0] * vec4(UNORM_TO_SNORM(a_Tangent1.xyz), 0.0));
668
+ vec3 t_TangentWorld1 = normalize(t_WorldFromLocal * vec4(UNORM_TO_SNORM(a_Tangent1.xyz), 0.0));
666
669
v_TangentSpaceBasisY1 = vec4(t_TangentWorld1, UNORM_TO_SNORM(a_Tangent1.w));
667
670
#endif
668
671
@@ -1010,8 +1013,8 @@ ${MaterialProgram_Base.BindingDefinitions}
1010
1013
1011
1014
layout(binding = 8) uniform samplerCube u_TextureDummy;
1012
1015
1013
- layout(std140, row_major ) uniform ub_MeshFragParams {
1014
- mat4x3 u_WorldFromLocal[1];
1016
+ layout(std140) uniform ub_MeshFragParams {
1017
+ Mat3x4 u_WorldFromLocal[1];
1015
1018
DirectionalLight u_DirectionalLight;
1016
1019
FogParams u_FogParams;
1017
1020
vec4 u_Misc[7];
@@ -1037,9 +1040,10 @@ layout(location = ${MaterialProgram_Base.a_Position}) in vec3 a_Position;
1037
1040
layout(location = ${ MaterialProgram_Base . a_TexCoord0 } ) in vec4 a_TexCoord0;
1038
1041
1039
1042
void main() {
1040
- vec3 t_PositionWorld = u_WorldFromLocal[0] * vec4(a_Position, 1.0);
1043
+ mat4x3 t_WorldFromLocal = UnpackMatrix(u_WorldFromLocal[0]);
1044
+ vec3 t_PositionWorld = t_WorldFromLocal * vec4(a_Position, 1.0);
1041
1045
v_PositionWorld = t_PositionWorld.xyz;
1042
- gl_Position = u_ProjectionView * vec4(t_PositionWorld, 1.0);
1046
+ gl_Position = UnpackMatrix( u_ProjectionView) * vec4(t_PositionWorld, 1.0);
1043
1047
1044
1048
v_TexCoord0.xy = DecodeTexCoord(a_TexCoord0.xy) * u_TileScale.xx + u_TexScroll0.xy;
1045
1049
v_TexCoord1.xy = DecodeTexCoord(a_TexCoord0.xy) * u_TileScale.yy + u_TexScroll1.xy;
@@ -1076,8 +1080,8 @@ ${MaterialProgram_Base.BindingDefinitions}
1076
1080
1077
1081
layout(binding = 8) uniform samplerCube u_TextureDummy;
1078
1082
1079
- layout(std140, row_major ) uniform ub_MeshFragParams {
1080
- mat4x3 u_WorldFromLocal[1];
1083
+ layout(std140) uniform ub_MeshFragParams {
1084
+ Mat3x4 u_WorldFromLocal[1];
1081
1085
DirectionalLight u_DirectionalLight;
1082
1086
FogParams u_FogParams;
1083
1087
vec4 u_Misc[7];
@@ -1129,20 +1133,21 @@ layout(location = ${MaterialProgram_Base.a_Tangent1}) in vec4 a_Tangent1;
1129
1133
${ GfxShaderLibrary . MulNormalMatrix }
1130
1134
1131
1135
void main() {
1132
- vec3 t_PositionWorld = u_WorldFromLocal[0] * vec4(a_Position, 1.0);
1136
+ mat4x3 t_WorldFromLocal = UnpackMatrix(u_WorldFromLocal[0]);
1137
+ vec3 t_PositionWorld = t_WorldFromLocal * vec4(a_Position, 1.0);
1133
1138
v_PositionWorld = t_PositionWorld.xyz;
1134
- gl_Position = u_ProjectionView * vec4(t_PositionWorld, 1.0);
1139
+ gl_Position = UnpackMatrix( u_ProjectionView) * vec4(t_PositionWorld, 1.0);
1135
1140
1136
1141
v_Color = a_Color;
1137
1142
v_TexCoord0 = a_TexCoord0.xy;
1138
1143
v_TexCoordProj.xyz = gl_Position.xyw;
1139
1144
1140
- v_TangentSpaceBasisZ = MulNormalMatrix(u_WorldFromLocal[0] , UNORM_TO_SNORM(a_Normal.xyz));
1141
- v_TangentSpaceBasisY = normalize(u_WorldFromLocal[0] * vec4(UNORM_TO_SNORM(a_Tangent0.xyz), 0.0));
1145
+ v_TangentSpaceBasisZ = MulNormalMatrix(t_WorldFromLocal , UNORM_TO_SNORM(a_Normal.xyz));
1146
+ v_TangentSpaceBasisY = normalize(t_WorldFromLocal * vec4(UNORM_TO_SNORM(a_Tangent0.xyz), 0.0));
1142
1147
v_TangentSpaceBasisX = normalize(cross(v_TangentSpaceBasisZ, v_TangentSpaceBasisY) * UNORM_TO_SNORM(a_Tangent0.w));
1143
1148
1144
- v_TexCoordProjX = (u_ProjectionView * vec4(t_PositionWorld + v_TangentSpaceBasisX, 0.0)).xyw;
1145
- v_TexCoordProjY = (u_ProjectionView * vec4(t_PositionWorld + v_TangentSpaceBasisY, 0.0)).xyw;
1149
+ v_TexCoordProjX = (UnpackMatrix( u_ProjectionView) * vec4(t_PositionWorld + v_TangentSpaceBasisX, 0.0)).xyw;
1150
+ v_TexCoordProjY = (UnpackMatrix( u_ProjectionView) * vec4(t_PositionWorld + v_TangentSpaceBasisY, 0.0)).xyw;
1146
1151
}
1147
1152
` ;
1148
1153
@@ -1996,7 +2001,7 @@ class DepthOfFieldBlurProgram extends DeviceProgram {
1996
2001
uniform sampler2D u_TextureColor;
1997
2002
uniform sampler2D u_Texture2;
1998
2003
1999
- layout(std140, row_major ) uniform ub_Params {
2004
+ layout(std140) uniform ub_Params {
2000
2005
vec4 u_Misc[1];
2001
2006
};
2002
2007
#define u_DispersionSq (u_Misc[0].x)
@@ -2063,7 +2068,7 @@ class DepthOfFieldCombineProgram extends DeviceProgram {
2063
2068
uniform sampler2D u_TextureColor;
2064
2069
uniform sampler2D u_TextureFramebufferDepth;
2065
2070
2066
- layout(std140, row_major ) uniform ub_Params {
2071
+ layout(std140) uniform ub_Params {
2067
2072
vec4 u_Misc[3];
2068
2073
};
2069
2074
#define u_NearParam (u_Misc[1].xyz)
@@ -2269,7 +2274,7 @@ class BloomFilterProgram extends DeviceProgram {
2269
2274
uniform sampler2D u_TextureColor;
2270
2275
uniform sampler2D u_TextureFramebufferDepth;
2271
2276
2272
- layout(std140, row_major ) uniform ub_Params {
2277
+ layout(std140) uniform ub_Params {
2273
2278
vec4 u_Misc[3];
2274
2279
};
2275
2280
#define u_NearParam (u_Misc[0].xyz)
@@ -2456,7 +2461,7 @@ class BloomCombineProgram extends DeviceProgram {
2456
2461
uniform sampler2D u_TextureColor;
2457
2462
uniform sampler2D u_Texture2;
2458
2463
2459
- layout(std140, row_major ) uniform ub_Params {
2464
+ layout(std140) uniform ub_Params {
2460
2465
vec4 u_Misc[3];
2461
2466
};
2462
2467
#define u_NearParam (u_Misc[0].xyz)
@@ -2720,11 +2725,13 @@ class Bloom {
2720
2725
2721
2726
class ToneCorrectProgram extends DeviceProgram {
2722
2727
public static Common = `
2728
+ ${ GfxShaderLibrary . MatrixLibrary }
2729
+
2723
2730
uniform sampler2D u_TextureColor;
2724
2731
uniform sampler2D u_Texture2;
2725
2732
2726
- layout(std140, row_major ) uniform ub_Params {
2727
- mat4x3 u_ToneCorrectMatrix;
2733
+ layout(std140) uniform ub_Params {
2734
+ Mat3x4 u_ToneCorrectMatrix;
2728
2735
vec4 u_Misc[1];
2729
2736
};
2730
2737
` ;
@@ -2747,7 +2754,7 @@ void main() {
2747
2754
t_Color.rgb *= t_Exposure;
2748
2755
t_Color.rgb /= (t_Color.rgb + vec3(1.0));
2749
2756
2750
- t_Color.rgb = u_ToneCorrectMatrix * vec4(t_Color.rgb, 1.0);
2757
+ t_Color.rgb = UnpackMatrix( u_ToneCorrectMatrix) * vec4(t_Color.rgb, 1.0);
2751
2758
gl_FragColor = t_Color;
2752
2759
}
2753
2760
` ;
0 commit comments