@@ -193,6 +193,49 @@ defineSuite([
193
193
cache . destroy ( ) ;
194
194
} ) ;
195
195
196
+ it ( 'replaces derived shader program' , function ( ) {
197
+ var vs = 'attribute vec4 position; void main() { gl_Position = position; }' ;
198
+ var fs = 'void main() { gl_FragColor = vec4(1.0); }' ;
199
+
200
+ var cache = new ShaderCache ( context ) ;
201
+ var sp = cache . getShaderProgram ( {
202
+ vertexShaderSource : vs ,
203
+ fragmentShaderSource : fs ,
204
+ attributeLocations : {
205
+ position : 0
206
+ }
207
+ } ) ;
208
+ var derivedKeywords = sp . _cachedShader . derivedKeywords ;
209
+
210
+ var keyword = 'derived' ;
211
+ var fsDerived = 'void main() { gl_FragColor = vec4(vec3(1.0), 0.5); }' ;
212
+ var spDerived = cache . replaceDerivedShaderProgram ( sp , keyword , {
213
+ vertexShaderSource : vs ,
214
+ fragmentShaderSource : fsDerived ,
215
+ attributeLocations : {
216
+ position : 0
217
+ }
218
+ } ) ;
219
+
220
+ expect ( spDerived ) . toBeDefined ( ) ;
221
+ expect ( derivedKeywords . length ) . toBe ( 1 ) ;
222
+
223
+ var fsDerived2 = 'void main() { gl_FragColor = vec4(vec3(0.5), 0.5); }' ;
224
+ var spDerived2 = cache . replaceDerivedShaderProgram ( sp , keyword , {
225
+ vertexShaderSource : vs ,
226
+ fragmentShaderSource : fsDerived2 ,
227
+ attributeLocations : {
228
+ position : 0
229
+ }
230
+ } ) ;
231
+
232
+ expect ( spDerived . isDestroyed ( ) ) . toBe ( true ) ;
233
+ expect ( spDerived2 . isDestroyed ( ) ) . toBe ( false ) ;
234
+ expect ( derivedKeywords . length ) . toBe ( 1 ) ;
235
+
236
+ cache . destroy ( ) ;
237
+ } ) ;
238
+
196
239
it ( 'destroying a shader program destroys its derived shaders' , function ( ) {
197
240
var vs = 'attribute vec4 position; void main() { gl_Position = position; }' ;
198
241
var fs = 'void main() { gl_FragColor = vec4(1.0); }' ;
0 commit comments