diff --git a/.travis.yml b/.travis.yml index a28b0e5f5a..1f3f7a0b7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,7 @@ before_install: - "sudo pip install http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz" - - "sudo pip install regex" + - "sudo pip install -r requirements.txt" - "git clone --depth=50 https://github.com/jsdoc3/jsdoc build/jsdoc" - - "git clone https://code.google.com/p/glsl-unit/ build/glsl-unit" before_script: - "./build.py plovr" diff --git a/bin/pyglslunit.py b/bin/pyglslunit.py new file mode 100644 index 0000000000..47be9c7fdc --- /dev/null +++ b/bin/pyglslunit.py @@ -0,0 +1,121 @@ +#!/usr/bin/python + +from optparse import OptionParser +import re +import sys + +import pystache + + +ESCAPE_SEQUENCE = { + '\\': '\\\\', + '\n': '\\n', + '\t': '\\t' + } + + +def js_escape(s): + return ''.join(ESCAPE_SEQUENCE.get(c, c) for c in s) + + +def glsl_compress(s, shortNames): + # strip leading whitespace + s = re.sub(r'\A\s+', '', s) + # strip trailing whitespace + s = re.sub(r'\s+\Z', '', s) + # strip multi-line comments + s = re.sub(r'/\*.*?\*/', '', s) + # strip single line comments + s = re.sub(r'//.*?\n', '', s) + # replace multiple whitespace with a single space + s = re.sub(r'\s+', ' ', s) + # remove whitespace between non-word tokens + s = re.sub(r'(\S)\s+([^\w])', r'\1\2', s) + s = re.sub(r'([^\w])\s+(\S)', r'\1\2', s) + # replace original names with short names + for originalName, shortName in shortNames.items(): + s = s.replace(originalName, shortName) + return s + + +def main(argv): + option_parser = OptionParser() + option_parser.add_option('--input') + option_parser.add_option('--output') + option_parser.add_option('--template') + options, args = option_parser.parse_args(argv[1:]) + + context = {} + nextShortName = ord('a') + shortNames = {} + + common, vertex, fragment = [], [], [] + attributes, uniforms, varyings = {}, {}, {} + block = None + for line in open(options.input): + if line.startswith('//!'): + m = re.match(r'//!\s+NAMESPACE=(\S+)\s*\Z', line) + if m: + context['namespace'] = m.group(1) + continue + m = re.match(r'//!\s+CLASS=(\S+)\s*\Z', line) + if m: + context['className'] = m.group(1) + continue + m = re.match(r'//!\s+COMMON\s*\Z', line) + if m: + block = common + continue + m = re.match(r'//!\s+VERTEX\s*\Z', line) + if m: + block = vertex + continue + m = re.match(r'//!\s+FRAGMENT\s*\Z', line) + if m: + block = fragment + continue + else: + if block is None: + assert line.rstrip() == '' + else: + block.append(line) + m = re.match(r'attribute\s+\S+\s+(\S+);\s*\Z', line) + if m: + attribute = m.group(1) + if attribute not in attributes: + shortName = chr(nextShortName) + nextShortName += 1 + attributes[attribute] = {'originalName': attribute, 'shortName': shortName} + shortNames[attribute] = shortName + m = re.match(r'uniform\s+\S+\s+(\S+);\s*\Z', line) + if m: + uniform = m.group(1) + if uniform not in uniforms: + shortName = chr(nextShortName) + nextShortName += 1 + uniforms[uniform] = {'originalName': uniform, 'shortName': shortName} + shortNames[uniform] = shortName + m = re.match(r'varying\s+\S+\s+(\S+);\s*\Z', line) + if m: + varying = m.group(1) + if varying not in varyings: + shortName = chr(nextShortName) + nextShortName += 1 + shortNames[varying] = shortName + + context['getOriginalFragmentSource'] = js_escape(''.join(common + fragment)) + context['getOriginalVertexSource'] = js_escape(''.join(common + vertex)) + context['getFragmentSource'] = glsl_compress(''.join(common + fragment), shortNames) + context['getVertexSource'] = glsl_compress(''.join(common + vertex), shortNames) + context['getAttributes'] = [attributes[a] for a in sorted(attributes.keys())] + context['getUniforms'] = [uniforms[u] for u in sorted(uniforms.keys())] + + if options.output and options.output != '-': + output = open(options.output, 'w') + else: + output = sys.stdout + output.write(pystache.render(open(options.template).read(), context)) + + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/build.py b/build.py index ec727edf57..4ababe5b05 100755 --- a/build.py +++ b/build.py @@ -82,8 +82,6 @@ else: variables.PYTHON = 'python' variables.PHANTOMJS = 'phantomjs' -TEMPLATE_GLSL_COMPILER_JS = 'build/glsl-unit/bin/template_glsl_compiler.js' - variables.BRANCH = output( '%(GIT)s', 'rev-parse', '--abbrev-ref', 'HEAD').strip() @@ -243,17 +241,16 @@ def build_src_external_src_types_js(t): '--typedef', 'src/objectliterals.jsdoc') -if os.path.exists(TEMPLATE_GLSL_COMPILER_JS): - for glsl_src in GLSL_SRC: - def shader_src_helper(glsl_src): - @target(glsl_src.replace('.glsl', 'shader.js'), glsl_src, - 'src/ol/webgl/shader.mustache') - def shader_src(t): - t.run('%(NODE)s', TEMPLATE_GLSL_COMPILER_JS, - '--input', glsl_src, - '--template', 'src/ol/webgl/shader.mustache', - '--output', t.name) - shader_src_helper(glsl_src) +for glsl_src in GLSL_SRC: + def shader_src_helper(glsl_src): + @target(glsl_src.replace('.glsl', 'shader.js'), glsl_src, + 'src/ol/webgl/shader.mustache', 'bin/pyglslunit.py') + def shader_src(t): + t.run('%(PYTHON)s', 'bin/pyglslunit.py', + '--input', glsl_src, + '--template', 'src/ol/webgl/shader.mustache', + '--output', t.name) + shader_src_helper(glsl_src) def _build_require_list(dependencies, output_file_name): diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..159e4edbb3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pystache +regex diff --git a/src/ol/renderer/webgl/webglmapcolorshader.js b/src/ol/renderer/webgl/webglmapcolorshader.js index eaadc5e6b8..44bc6f212e 100644 --- a/src/ol/renderer/webgl/webglmapcolorshader.js +++ b/src/ol/renderer/webgl/webglmapcolorshader.js @@ -1,6 +1,10 @@ // This file is automatically generated, do not edit goog.provide('ol.renderer.webgl.map.shader.Color'); + goog.require('ol.webgl.shader'); + + + /** * @constructor * @extends {ol.webgl.shader.Fragment} @@ -10,16 +14,22 @@ ol.renderer.webgl.map.shader.ColorFragment = function() { }; goog.inherits(ol.renderer.webgl.map.shader.ColorFragment, ol.webgl.shader.Fragment); goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorFragment); + + /** * @const * @type {string} */ -ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.map.shader.Color\n//! CLASS=ol.renderer.webgl.map.shader.Color\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform mat4 u_colorMatrix;\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n\n'; +ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\n\n\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform mat4 u_colorMatrix;\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform mat4 d;uniform float e;uniform sampler2D f;void main(){vec4 g=texture2D(f,a);gl_FragColor.rgb=(d*vec4(g.rgb,1)).rgb;gl_FragColor.a=g.a*e;}'; +ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform mat4 f;uniform float g;uniform sampler2D h;void main(void){vec4 texColor=texture2D(h,a);gl_FragColor.rgb=(f*vec4(texColor.rgb,1.)).rgb;gl_FragColor.a=texColor.a*g;}'; + + /** * @const * @type {string} @@ -27,6 +37,9 @@ ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE = 'precision mediump ol.renderer.webgl.map.shader.ColorFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE : ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE; + + + /** * @constructor * @extends {ol.webgl.shader.Vertex} @@ -36,16 +49,22 @@ ol.renderer.webgl.map.shader.ColorVertex = function() { }; goog.inherits(ol.renderer.webgl.map.shader.ColorVertex, ol.webgl.shader.Vertex); goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorVertex); + + /** * @const * @type {string} */ -ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.map.shader.Color\n//! CLASS=ol.renderer.webgl.map.shader.Color\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; +ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 d,e;uniform mat4 b,c;void main(){gl_Position=c*vec4(d,0,1);a=(b*vec4(e,0,1)).st;}'; +ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}'; + + /** * @const * @type {string} @@ -53,45 +72,55 @@ ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attr ol.renderer.webgl.map.shader.ColorVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE : ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE; + + + /** * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. */ ol.renderer.webgl.map.shader.Color.Locations = function(gl, program) { - /** - * @type {WebGLUniformLocation} - */ - this.u_texCoordMatrix = gl.getUniformLocation( - program, goog.DEBUG ? 'u_texCoordMatrix' : 'b'); - /** - * @type {WebGLUniformLocation} - */ - this.u_projectionMatrix = gl.getUniformLocation( - program, goog.DEBUG ? 'u_projectionMatrix' : 'c'); + /** * @type {WebGLUniformLocation} */ this.u_colorMatrix = gl.getUniformLocation( - program, goog.DEBUG ? 'u_colorMatrix' : 'd'); + program, goog.DEBUG ? 'u_colorMatrix' : 'f'); + /** * @type {WebGLUniformLocation} */ this.u_opacity = gl.getUniformLocation( - program, goog.DEBUG ? 'u_opacity' : 'e'); + program, goog.DEBUG ? 'u_opacity' : 'g'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_projectionMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_projectionMatrix' : 'e'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_texCoordMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_texCoordMatrix' : 'd'); + /** * @type {WebGLUniformLocation} */ this.u_texture = gl.getUniformLocation( - program, goog.DEBUG ? 'u_texture' : 'f'); + program, goog.DEBUG ? 'u_texture' : 'h'); + /** * @type {number} */ this.a_position = gl.getAttribLocation( - program, goog.DEBUG ? 'a_position' : 'd'); + program, goog.DEBUG ? 'a_position' : 'b'); + /** * @type {number} */ this.a_texCoord = gl.getAttribLocation( - program, goog.DEBUG ? 'a_texCoord' : 'e'); + program, goog.DEBUG ? 'a_texCoord' : 'c'); }; diff --git a/src/ol/renderer/webgl/webglmapdefaultshader.js b/src/ol/renderer/webgl/webglmapdefaultshader.js index e571cee55f..8cf05e438f 100644 --- a/src/ol/renderer/webgl/webglmapdefaultshader.js +++ b/src/ol/renderer/webgl/webglmapdefaultshader.js @@ -1,6 +1,10 @@ // This file is automatically generated, do not edit goog.provide('ol.renderer.webgl.map.shader.Default'); + goog.require('ol.webgl.shader'); + + + /** * @constructor * @extends {ol.webgl.shader.Fragment} @@ -10,16 +14,22 @@ ol.renderer.webgl.map.shader.DefaultFragment = function() { }; goog.inherits(ol.renderer.webgl.map.shader.DefaultFragment, ol.webgl.shader.Fragment); goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultFragment); + + /** * @const * @type {string} */ -ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.map.shader.Default\n//! CLASS=ol.renderer.webgl.map.shader.Default\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = texColor.rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n\n'; +ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = texColor.rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform float d;uniform sampler2D e;void main(){vec4 f=texture2D(e,a);gl_FragColor.rgb=f.rgb;gl_FragColor.a=f.a*d;}'; +ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}'; + + /** * @const * @type {string} @@ -27,6 +37,9 @@ ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE = 'precision mediu ol.renderer.webgl.map.shader.DefaultFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE : ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE; + + + /** * @constructor * @extends {ol.webgl.shader.Vertex} @@ -36,16 +49,22 @@ ol.renderer.webgl.map.shader.DefaultVertex = function() { }; goog.inherits(ol.renderer.webgl.map.shader.DefaultVertex, ol.webgl.shader.Vertex); goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultVertex); + + /** * @const * @type {string} */ -ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.map.shader.Default\n//! CLASS=ol.renderer.webgl.map.shader.Default\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; +ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 d,e;uniform mat4 b,c;void main(){gl_Position=c*vec4(d,0,1);a=(b*vec4(e,0,1)).st;}'; +ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}'; + + /** * @const * @type {string} @@ -53,40 +72,49 @@ ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE = 'varying vec2 a;at ol.renderer.webgl.map.shader.DefaultVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE : ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE; + + + /** * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. */ ol.renderer.webgl.map.shader.Default.Locations = function(gl, program) { - /** - * @type {WebGLUniformLocation} - */ - this.u_texCoordMatrix = gl.getUniformLocation( - program, goog.DEBUG ? 'u_texCoordMatrix' : 'b'); - /** - * @type {WebGLUniformLocation} - */ - this.u_projectionMatrix = gl.getUniformLocation( - program, goog.DEBUG ? 'u_projectionMatrix' : 'c'); + /** * @type {WebGLUniformLocation} */ this.u_opacity = gl.getUniformLocation( - program, goog.DEBUG ? 'u_opacity' : 'd'); + program, goog.DEBUG ? 'u_opacity' : 'f'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_projectionMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_projectionMatrix' : 'e'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_texCoordMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_texCoordMatrix' : 'd'); + /** * @type {WebGLUniformLocation} */ this.u_texture = gl.getUniformLocation( - program, goog.DEBUG ? 'u_texture' : 'e'); + program, goog.DEBUG ? 'u_texture' : 'g'); + /** * @type {number} */ this.a_position = gl.getAttribLocation( - program, goog.DEBUG ? 'a_position' : 'd'); + program, goog.DEBUG ? 'a_position' : 'b'); + /** * @type {number} */ this.a_texCoord = gl.getAttribLocation( - program, goog.DEBUG ? 'a_texCoord' : 'e'); + program, goog.DEBUG ? 'a_texCoord' : 'c'); }; diff --git a/src/ol/renderer/webgl/webgltilelayershader.js b/src/ol/renderer/webgl/webgltilelayershader.js index a626e76a11..8d8169042c 100644 --- a/src/ol/renderer/webgl/webgltilelayershader.js +++ b/src/ol/renderer/webgl/webgltilelayershader.js @@ -1,6 +1,10 @@ // This file is automatically generated, do not edit goog.provide('ol.renderer.webgl.tilelayer.shader'); + goog.require('ol.webgl.shader'); + + + /** * @constructor * @extends {ol.webgl.shader.Fragment} @@ -10,16 +14,22 @@ ol.renderer.webgl.tilelayer.shader.Fragment = function() { }; goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.shader.Fragment); goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment); + + /** * @const * @type {string} */ -ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.tilelayer.shader\n//! CLASS=ol.renderer.webgl.tilelayer.shader.\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\nuniform sampler2D u_texture;\n\nvoid main(void) {\n gl_FragColor = texture2D(u_texture, v_texCoord);\n}\n\n'; +ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform sampler2D u_texture;\n\nvoid main(void) {\n gl_FragColor = texture2D(u_texture, v_texCoord);\n}\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform sampler2D c;void main(){gl_FragColor=texture2D(c,a);}'; +ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}'; + + /** * @const * @type {string} @@ -27,6 +37,9 @@ ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE = 'precision medium ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE : ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE; + + + /** * @constructor * @extends {ol.webgl.shader.Vertex} @@ -36,16 +49,22 @@ ol.renderer.webgl.tilelayer.shader.Vertex = function() { }; goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.shader.Vertex); goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex); + + /** * @const * @type {string} */ -ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.tilelayer.shader\n//! CLASS=ol.renderer.webgl.tilelayer.shader.\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n v_texCoord = a_texCoord;\n}\n\n\n'; +ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n v_texCoord = a_texCoord;\n}\n\n\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 c,d;uniform vec4 b;void main(){gl_Position=vec4(c*b.xy+b.zw,0,1);a=d;}'; +ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}'; + + /** * @const * @type {string} @@ -53,30 +72,37 @@ ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;att ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE : ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE; + + + /** * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. */ ol.renderer.webgl.tilelayer.shader.Locations = function(gl, program) { - /** - * @type {WebGLUniformLocation} - */ - this.u_tileOffset = gl.getUniformLocation( - program, goog.DEBUG ? 'u_tileOffset' : 'b'); + /** * @type {WebGLUniformLocation} */ this.u_texture = gl.getUniformLocation( - program, goog.DEBUG ? 'u_texture' : 'c'); + program, goog.DEBUG ? 'u_texture' : 'e'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_tileOffset = gl.getUniformLocation( + program, goog.DEBUG ? 'u_tileOffset' : 'd'); + /** * @type {number} */ this.a_position = gl.getAttribLocation( - program, goog.DEBUG ? 'a_position' : 'c'); + program, goog.DEBUG ? 'a_position' : 'b'); + /** * @type {number} */ this.a_texCoord = gl.getAttribLocation( - program, goog.DEBUG ? 'a_texCoord' : 'd'); + program, goog.DEBUG ? 'a_texCoord' : 'c'); }; diff --git a/src/ol/renderer/webgl/webglvectorlayer2linestringcollectionshader.js b/src/ol/renderer/webgl/webglvectorlayer2linestringcollectionshader.js index 209412877e..9f08d99191 100644 --- a/src/ol/renderer/webgl/webglvectorlayer2linestringcollectionshader.js +++ b/src/ol/renderer/webgl/webglvectorlayer2linestringcollectionshader.js @@ -1,6 +1,10 @@ // This file is automatically generated, do not edit goog.provide('ol.renderer.webgl.vectorlayer2.shader.LineStringCollection'); + goog.require('ol.webgl.shader'); + + + /** * @constructor * @extends {ol.webgl.shader.Fragment} @@ -10,16 +14,22 @@ ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment = function() }; goog.inherits(ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment, ol.webgl.shader.Fragment); goog.addSingletonGetter(ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment); + + /** * @const * @type {string} */ -ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.vectorlayer2.shader.LineStringCollection\n//! CLASS=ol.renderer.webgl.vectorlayer2.shader.LineStringCollection\n\n\n//! FRAGMENT\nuniform vec4 u_color;\n\nvoid main(void) {\n gl_FragColor = u_color;\n}\n\n'; +ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.DEBUG_SOURCE = 'precision mediump float;\nuniform vec4 u_color;\n\nvoid main(void) {\n gl_FragColor = u_color;\n}\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.OPTIMIZED_SOURCE = 'precision mediump float;uniform vec4 b;void main(){gl_FragColor=b;}'; +ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.OPTIMIZED_SOURCE = 'precision mediump float;uniform vec4 c;void main(void){gl_FragColor=c;}'; + + /** * @const * @type {string} @@ -27,6 +37,9 @@ ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.OPTIMIZED_SOU ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.DEBUG_SOURCE : ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.OPTIMIZED_SOURCE; + + + /** * @constructor * @extends {ol.webgl.shader.Vertex} @@ -36,16 +49,22 @@ ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex = function() { }; goog.inherits(ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex, ol.webgl.shader.Vertex); goog.addSingletonGetter(ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex); + + /** * @const * @type {string} */ -ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.vectorlayer2.shader.LineStringCollection\n//! CLASS=ol.renderer.webgl.vectorlayer2.shader.LineStringCollection\n\n\n//! VERTEX\nattribute vec2 a_position;\nuniform mat4 u_modelViewMatrix;\n\nvoid main(void) {\n gl_Position = u_modelViewMatrix * vec4(a_position, 0., 1.);\n}\n\n\n'; +ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.DEBUG_SOURCE = 'attribute vec2 a_position;\nuniform mat4 u_modelViewMatrix;\n\nvoid main(void) {\n gl_Position = u_modelViewMatrix * vec4(a_position, 0., 1.);\n}\n\n\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.OPTIMIZED_SOURCE = 'attribute vec2 b;uniform mat4 a;void main(){gl_Position=a*vec4(b,0,1);}'; +ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.OPTIMIZED_SOURCE = 'attribute vec2 a;uniform mat4 b;void main(void){gl_Position=b*vec4(a,0.,1.);}'; + + /** * @const * @type {string} @@ -53,25 +72,31 @@ ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.OPTIMIZED_SOURC ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.DEBUG_SOURCE : ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.OPTIMIZED_SOURCE; + + + /** * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. */ ol.renderer.webgl.vectorlayer2.shader.LineStringCollection.Locations = function(gl, program) { - /** - * @type {WebGLUniformLocation} - */ - this.u_modelViewMatrix = gl.getUniformLocation( - program, goog.DEBUG ? 'u_modelViewMatrix' : 'a'); + /** * @type {WebGLUniformLocation} */ this.u_color = gl.getUniformLocation( - program, goog.DEBUG ? 'u_color' : 'b'); + program, goog.DEBUG ? 'u_color' : 'c'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_modelViewMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_modelViewMatrix' : 'b'); + /** * @type {number} */ this.a_position = gl.getAttribLocation( - program, goog.DEBUG ? 'a_position' : 'b'); + program, goog.DEBUG ? 'a_position' : 'a'); }; diff --git a/src/ol/renderer/webgl/webglvectorlayer2pointcollectionshader.js b/src/ol/renderer/webgl/webglvectorlayer2pointcollectionshader.js index 825697a28f..fb8a9f953f 100644 --- a/src/ol/renderer/webgl/webglvectorlayer2pointcollectionshader.js +++ b/src/ol/renderer/webgl/webglvectorlayer2pointcollectionshader.js @@ -1,6 +1,10 @@ // This file is automatically generated, do not edit goog.provide('ol.renderer.webgl.vectorlayer2.shader.PointCollection'); + goog.require('ol.webgl.shader'); + + + /** * @constructor * @extends {ol.webgl.shader.Fragment} @@ -10,16 +14,22 @@ ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment = function() { }; goog.inherits(ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment, ol.webgl.shader.Fragment); goog.addSingletonGetter(ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment); + + /** * @const * @type {string} */ -ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.vectorlayer2.shader.PointCollection\n//! CLASS=ol.renderer.webgl.vectorlayer2.shader.PointCollection\n\n\n//! FRAGMENT\nuniform vec4 u_color;\n\nvoid main(void) {\n gl_FragColor = u_color;\n}\n\n'; +ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.DEBUG_SOURCE = 'precision mediump float;\nuniform vec4 u_color;\n\nvoid main(void) {\n gl_FragColor = u_color;\n}\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.OPTIMIZED_SOURCE = 'precision mediump float;uniform vec4 c;void main(){gl_FragColor=c;}'; +ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.OPTIMIZED_SOURCE = 'precision mediump float;uniform vec4 d;void main(void){gl_FragColor=d;}'; + + /** * @const * @type {string} @@ -27,6 +37,9 @@ ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.OPTIMIZED_SOURCE = ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.DEBUG_SOURCE : ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.OPTIMIZED_SOURCE; + + + /** * @constructor * @extends {ol.webgl.shader.Vertex} @@ -36,16 +49,22 @@ ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex = function() { }; goog.inherits(ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex, ol.webgl.shader.Vertex); goog.addSingletonGetter(ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex); + + /** * @const * @type {string} */ -ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.vectorlayer2.shader.PointCollection\n//! CLASS=ol.renderer.webgl.vectorlayer2.shader.PointCollection\n\n\n//! VERTEX\nattribute vec2 a_position;\nuniform float u_pointSize;\nuniform mat4 u_modelViewMatrix;\n\nvoid main(void) {\n gl_Position = u_modelViewMatrix * vec4(a_position, 0., 1.);\n gl_PointSize = u_pointSize;\n}\n\n\n'; +ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.DEBUG_SOURCE = 'attribute vec2 a_position;\nuniform float u_pointSize;\nuniform mat4 u_modelViewMatrix;\n\nvoid main(void) {\n gl_Position = u_modelViewMatrix * vec4(a_position, 0., 1.);\n gl_PointSize = u_pointSize;\n}\n\n\n'; + + /** * @const * @type {string} */ -ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.OPTIMIZED_SOURCE = 'attribute vec2 c;uniform float a;uniform mat4 b;void main(){gl_Position=b*vec4(c,0,1);gl_PointSize=a;}'; +ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.OPTIMIZED_SOURCE = 'attribute vec2 a;uniform float b;uniform mat4 c;void main(void){gl_Position=c*vec4(a,0.,1.);gl_PointSize=b;}'; + + /** * @const * @type {string} @@ -53,30 +72,37 @@ ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.OPTIMIZED_SOURCE = ' ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.DEBUG_SOURCE : ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.OPTIMIZED_SOURCE; + + + /** * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. */ ol.renderer.webgl.vectorlayer2.shader.PointCollection.Locations = function(gl, program) { - /** - * @type {WebGLUniformLocation} - */ - this.u_pointSize = gl.getUniformLocation( - program, goog.DEBUG ? 'u_pointSize' : 'a'); - /** - * @type {WebGLUniformLocation} - */ - this.u_modelViewMatrix = gl.getUniformLocation( - program, goog.DEBUG ? 'u_modelViewMatrix' : 'b'); + /** * @type {WebGLUniformLocation} */ this.u_color = gl.getUniformLocation( - program, goog.DEBUG ? 'u_color' : 'c'); + program, goog.DEBUG ? 'u_color' : 'd'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_modelViewMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_modelViewMatrix' : 'c'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_pointSize = gl.getUniformLocation( + program, goog.DEBUG ? 'u_pointSize' : 'b'); + /** * @type {number} */ this.a_position = gl.getAttribLocation( - program, goog.DEBUG ? 'a_position' : 'c'); + program, goog.DEBUG ? 'a_position' : 'a'); };