defineSuite([ 'Renderer/ShaderSource' ], function( ShaderSource) { 'use strict'; var mockContext = { webgl2 : false }; it('combines #defines', function() { var source = new ShaderSource({ defines : ['A', 'B', ''] }); var shaderText = source.createCombinedVertexShader(mockContext); expect(shaderText).toContain('#define A'); expect(shaderText).toContain('#define B'); expect(shaderText.match(/#define/g).length).toEqual(2); }); it('combines sources', function() { var source = new ShaderSource({ sources : ['void func() {}', 'void main() {}'] }); var shaderText = source.createCombinedVertexShader(mockContext); expect(shaderText).toContain('#line 0\nvoid func() {}'); expect(shaderText).toContain('#line 0\nvoid main() {}'); }); it('combines #defines and sources', function() { var source = new ShaderSource({ defines : ['A', 'B', ''], sources : ['void func() {}', 'void main() {}'] }); var shaderText = source.createCombinedVertexShader(mockContext); expect(shaderText).toContain('#define A'); expect(shaderText).toContain('#define B'); expect(shaderText.match(/#define/g).length).toEqual(2); expect(shaderText).toContain('#line 0\nvoid func() {}'); expect(shaderText).toContain('#line 0\nvoid main() {}'); }); it('creates a pick shader with a uniform', function() { var source = new ShaderSource({ sources : ['void main() { gl_FragColor = vec4(1.0); }'], pickColorQualifier : 'uniform' }); var shaderText = source.createCombinedVertexShader(mockContext); expect(shaderText).toContain('uniform vec4 czm_pickColor;'); expect(shaderText).toContain('gl_FragColor = czm_pickColor;'); }); it('creates a pick shader with a varying', function() { var source = new ShaderSource({ sources : ['void main() { gl_FragColor = vec4(1.0); }'], pickColorQualifier : 'varying' }); var shaderText = source.createCombinedVertexShader(mockContext); expect(shaderText).toContain('varying vec4 czm_pickColor;'); expect(shaderText).toContain('gl_FragColor = czm_pickColor;'); }); it('throws with invalid qualifier', function() { expect(function() { return new ShaderSource({ pickColorQualifier : 'const' }); }).toThrowDeveloperError(); }); it('combines #version to shader', function() { var source = new ShaderSource({ sources : ['#version 300 es\nvoid main() {gl_FragColor = vec4(1.0); }'] }); var shaderText = source.createCombinedVertexShader(mockContext); expect(shaderText).toStartWith('#version 300 es\n'); }); it('clones', function() { var source = new ShaderSource({ defines : ['A'], sources : ['void main() { gl_FragColor = vec4(1.0); }'], pickColorQualifier : 'varying', includeBuiltIns : false }); var clone = source.clone(); expect(clone.defines).toBeDefined(); expect(clone.defines.length).toEqual(1); expect(clone.defines[0]).toEqual(source.defines[0]); expect(clone.sources).toBeDefined(); expect(clone.sources.length).toEqual(1); expect(clone.sources[0]).toEqual(source.sources[0]); expect(clone.pickColorQualifier).toEqual(source.pickColorQualifier); expect(clone.includeBuiltIns).toEqual(source.includeBuiltIns); }); });