@@ -22,6 +22,10 @@ const fShader = `
22
22
23
23
class ShaderGeneratorShader extends ShaderGenerator {
24
24
generateKey ( options ) {
25
+
26
+ // Note: options.chunks are not included in the key as currently shader variants are removed
27
+ // from the material when its chunks are modified.
28
+
25
29
const desc = options . shaderDesc ;
26
30
const vsHash = desc . vertexCode ? hashCode ( desc . vertexCode ) : 0 ;
27
31
const fsHash = desc . fragmentCode ? hashCode ( desc . fragmentCode ) : 0 ;
@@ -66,7 +70,7 @@ class ShaderGeneratorShader extends ShaderGenerator {
66
70
defines . set ( 'GAMMA' , gammaNames [ options . gamma ] ) ;
67
71
}
68
72
69
- createVertexDefinition ( definitionOptions , options , shaderPassInfo ) {
73
+ createVertexDefinition ( definitionOptions , options , shaderPassInfo , sharedIncludes ) {
70
74
71
75
const desc = options . shaderDesc ;
72
76
@@ -77,10 +81,7 @@ class ShaderGeneratorShader extends ShaderGenerator {
77
81
definitionOptions . vertexCode = desc . vertexCode ;
78
82
79
83
} else {
80
- const includes = new Map ( Object . entries ( {
81
- ...shaderChunks ,
82
- ...options . chunks
83
- } ) ) ;
84
+ const includes = new Map ( sharedIncludes ) ;
84
85
const defines = new Map ( options . defines ) ;
85
86
this . addSharedDefines ( defines , options ) ;
86
87
@@ -103,7 +104,7 @@ class ShaderGeneratorShader extends ShaderGenerator {
103
104
}
104
105
}
105
106
106
- createFragmentDefinition ( definitionOptions , options , shaderPassInfo ) {
107
+ createFragmentDefinition ( definitionOptions , options , shaderPassInfo , sharedIncludes ) {
107
108
108
109
const desc = options . shaderDesc ;
109
110
@@ -114,11 +115,7 @@ class ShaderGeneratorShader extends ShaderGenerator {
114
115
definitionOptions . fragmentCode = desc . fragmentCode ;
115
116
116
117
} else {
117
- const includes = new Map ( Object . entries ( {
118
- ...shaderChunks ,
119
- ...options . chunks
120
- } ) ) ;
121
-
118
+ const includes = new Map ( sharedIncludes ) ;
122
119
includes . set ( 'shaderPassDefines' , shaderPassInfo . shaderDefines ) ;
123
120
includes . set ( 'gamma' , ShaderGenerator . gammaCode ( options . gamma ) ) ;
124
121
includes . set ( 'fog' , ShaderGenerator . fogCode ( options . fog ) ) ;
@@ -146,9 +143,14 @@ class ShaderGeneratorShader extends ShaderGenerator {
146
143
meshBindGroupFormat : desc . meshBindGroupFormat
147
144
} ;
148
145
146
+ const sharedIncludes = new Map ( Object . entries ( {
147
+ ...shaderChunks , // default chunks
148
+ ...options . chunks // material override chunks
149
+ } ) ) ;
150
+
149
151
this . createAttributesDefinition ( definitionOptions , options ) ;
150
- this . createVertexDefinition ( definitionOptions , options , shaderPassInfo ) ;
151
- this . createFragmentDefinition ( definitionOptions , options , shaderPassInfo ) ;
152
+ this . createVertexDefinition ( definitionOptions , options , shaderPassInfo , sharedIncludes ) ;
153
+ this . createFragmentDefinition ( definitionOptions , options , shaderPassInfo , sharedIncludes ) ;
152
154
153
155
return ShaderUtils . createDefinition ( device , definitionOptions ) ;
154
156
}
0 commit comments