From c48df12a337b66d1d6f2bbc8e89d8f72aef06243 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sat, 23 Mar 2013 17:45:44 +0100 Subject: [PATCH 1/8] Add infrastructure for glsl-unit --- build.py | 50 ++++++++---- src/ol/renderer/webgl/shader.mustache | 106 ++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 13 deletions(-) create mode 100644 src/ol/renderer/webgl/shader.mustache diff --git a/build.py b/build.py index 0e582118eb..645126d6c5 100755 --- a/build.py +++ b/build.py @@ -21,6 +21,7 @@ if sys.platform == 'win32': variables.JAVA = os.path.join( ProgramFiles, 'Java', 'jre7', 'bin', 'java.exe') variables.JSDOC = 'jsdoc' # FIXME + variables.NODE = 'node' variables.PYTHON = os.path.join(Python27, 'python.exe') PHANTOMJS_WINDOWS_ZIP = 'build/phantomjs-1.8.1-windows.zip' # FIXME we should not need both a pake variable and a Python constant here @@ -34,9 +35,12 @@ else: variables.JAVA = 'java' variables.JAR = 'jar' variables.JSDOC = 'jsdoc' + variables.NODE = 'node' variables.PYTHON = 'python' variables.PHANTOMJS = 'phantomjs' +TEMPLATE_GLSL_COMPILER_JS = '../glsl-unit/bin/template_glsl_compiler.js' + variables.BRANCH = output( '%(GIT)s', 'rev-parse', '--abbrev-ref', 'HEAD').strip() @@ -73,13 +77,21 @@ INTERNAL_SRC = [ 'build/src/internal/src/requireall.js', 'build/src/internal/src/types.js'] +GLSL_SRC = [path + for path in ifind('src') + if path.endswith('.glsl')] + +SHADER_SRC = [path.replace('.glsl', 'shader.js') + for path in GLSL_SRC] + SPEC = [path for path in ifind('test/spec') if path.endswith('.js')] SRC = [path for path in ifind('src/ol') - if path.endswith('.js')] + if path.endswith('.js') + if path not in SHADER_SRC] PLOVR_JAR = 'bin/plovr-eba786b34df9.jar' PLOVR_JAR_MD5 = '20eac8ccc4578676511cf7ccbfc65100' @@ -121,22 +133,22 @@ def build_ol_css(t): t.touch() -@target('build/ol.js', PLOVR_JAR, SRC, EXTERNAL_SRC, 'base.json', - 'build/ol.json') +@target('build/ol.js', PLOVR_JAR, SRC, EXTERNAL_SRC, SHADER_SRC, + 'base.json', 'build/ol.json') def build_ol_js(t): t.output('%(JAVA)s', '-jar', PLOVR_JAR, 'build', 'build/ol.json') report_sizes(t) -@target('build/ol-simple.js', PLOVR_JAR, SRC, INTERNAL_SRC, 'base.json', - 'build/ol.json', 'build/ol-simple.json') +@target('build/ol-simple.js', PLOVR_JAR, SRC, INTERNAL_SRC, SHADER_SRC, + 'base.json', 'build/ol.json', 'build/ol-simple.json') def build_ol_simple_js(t): t.output('%(JAVA)s', '-jar', PLOVR_JAR, 'build', 'build/ol-simple.json') report_sizes(t) -@target('build/ol-whitespace.js', PLOVR_JAR, SRC, INTERNAL_SRC, 'base.json', - 'build/ol.json', 'build/ol-whitespace.json') +@target('build/ol-whitespace.js', PLOVR_JAR, SRC, INTERNAL_SRC, SHADER_SRC, + 'base.json', 'build/ol.json', 'build/ol-whitespace.json') def build_ol_whitespace_js(t): t.output('%(JAVA)s', '-jar', PLOVR_JAR, 'build', 'build/ol-whitespace.json') @@ -146,8 +158,8 @@ def build_ol_whitespace_js(t): virtual('build-all', 'build/ol-all.js') -@target('build/ol-all.js', PLOVR_JAR, SRC, INTERNAL_SRC, 'base.json', - 'build/ol-all.json') +@target('build/ol-all.js', PLOVR_JAR, SRC, INTERNAL_SRC, SHADER_SRC, + 'base.json', 'build/ol-all.json') def build_ol_all_js(t): t.output('%(JAVA)s', '-jar', PLOVR_JAR, 'build', 'build/ol-all.json') @@ -173,6 +185,18 @@ def build_src_external_src_types_js(t): '--typedef', 'src/objectliterals.exports') +for glsl_src in GLSL_SRC: + def shader_src_helper(glsl_src): + @target(glsl_src.replace('.glsl', 'shader.js'), glsl_src, + 'src/ol/renderer/webgl/shader.mustache') + def shader_src(t): + t.run('%(NODE)s', TEMPLATE_GLSL_COMPILER_JS, + '--input', glsl_src, + '--template', 'src/ol/renderer/webgl/shader.mustache', + '--output', t.name) + shader_src_helper(glsl_src) + + def _build_require_list(dependencies, output_file_name): requires = set() for dependency in dependencies: @@ -185,7 +209,7 @@ def _build_require_list(dependencies, output_file_name): f.write('goog.require(\'%s\');\n' % (require,)) -@target('build/src/internal/src/requireall.js', SRC) +@target('build/src/internal/src/requireall.js', SRC, SHADER_SRC) def build_src_internal_src_requireall_js(t): _build_require_list(t.dependencies, t.name) @@ -252,7 +276,7 @@ def examples_star_combined_js(name, match): t.output('%(JAVA)s', '-jar', PLOVR_JAR, 'build', 'examples/%(id)s.json' % match.groupdict()) report_sizes(t) - dependencies = [PLOVR_JAR, SRC, INTERNAL_SRC, 'base.json', + dependencies = [PLOVR_JAR, SRC, INTERNAL_SRC, SHADER_SRC, 'base.json', 'examples/%(id)s.js' % match.groupdict(), 'examples/%(id)s.json' % match.groupdict()] return Target(name, action=action, dependencies=dependencies) @@ -309,7 +333,7 @@ def _strip_comments(lines): @target('build/check-requires-timestamp', SRC, INTERNAL_SRC, EXTERNAL_SRC, - EXAMPLES_SRC, SPEC) + EXAMPLES_SRC, SHADER_SRC, SPEC) def build_check_requires_timestamp(t): unused_count = 0 all_provides = set() @@ -408,7 +432,7 @@ def gh_pages(t): virtual('doc', 'build/jsdoc-%(BRANCH)s-timestamp' % vars(variables)) -@target('build/jsdoc-%(BRANCH)s-timestamp' % vars(variables), SRC, +@target('build/jsdoc-%(BRANCH)s-timestamp' % vars(variables), SRC, SHADER_SRC, ifind('doc/template')) def jsdoc_BRANCH_timestamp(t): t.run('%(JSDOC)s', '-t', 'doc/template', '-r', diff --git a/src/ol/renderer/webgl/shader.mustache b/src/ol/renderer/webgl/shader.mustache new file mode 100644 index 0000000000..296822fb6c --- /dev/null +++ b/src/ol/renderer/webgl/shader.mustache @@ -0,0 +1,106 @@ +goog.provide('{{namespace}}.shader'); + +goog.require('ol.renderer.webgl.FragmentShader'); +goog.require('ol.renderer.webgl.VertexShader'); + + + +/** + * @constructor + * @extends {ol.renderer.webgl.FragmentShader} + */ +{{namespace}}.shader.Fragment = function() { + goog.base(this, {{namespace}}.shader.Fragment.SOURCE); +}; +goog.inherits({{namespace}}.shader.Fragment, ol.renderer.webgl.FragmentShader); +goog.addSingletonGetter({{namespace}}.shader.Fragment); + + +/** + * @const + * @type {string} + */ +{{namespace}}.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\n{{getOriginalFragmentSource}}'; + + +/** + * @const + * @type {string} + */ +{{namespace}}.shader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;{{getFragmentSource}}'; + + +/** + * @const + * @type {string} + */ +{{namespace}}.shader.Fragment.SOURCE = goog.DEBUG ? + {{namespace}}.shader.Fragment.DEBUG_SOURCE : + {{namespace}}.shader.Fragment.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @extends {ol.renderer.webgl.VertexShader} + */ +{{namespace}}.shader.Vertex = function() { + goog.base(this, {{namespace}}.shader.Vertex.SOURCE); +}; +goog.inherits({{namespace}}.shader.Vertex, ol.renderer.webgl.VertexShader); +goog.addSingletonGetter({{namespace}}.shader.Vertex); + + +/** + * @const + * @type {string} + */ +{{namespace}}.shader.Vertex.DEBUG_SOURCE = '{{getOriginalVertexSource}}'; + + +/** + * @const + * @type {string} + */ +{{namespace}}.shader.Vertex.OPTIMIZED_SOURCE = '{{getVertexSource}}'; + + +/** + * @const + * @type {string} + */ +{{namespace}}.shader.Vertex.SOURCE = goog.DEBUG ? + {{namespace}}.shader.Vertex.DEBUG_SOURCE : + {{namespace}}.shader.Vertex.OPTIMIZED_SOURCE; + + +/** + * @constructor + */ +{{namespace}}.shader.uniform = function() {}; +{{#getUniforms}} + + +/** + * @const + * @type {string} + */ +{{namespace}}.shader.uniform.{{originalName}} = + goog.DEBUG ? '{{originalName}}' : '{{shortName}}'; +{{/getUniforms}} + + +/** + * @constructor + */ +{{namespace}}.shader.attribute = function() {}; +{{#getAttributes}} + + +/** + * @const + * @type {string} + */ +{{namespace}}.shader.attribute.{{originalName}} = + goog.DEBUG ? '{{originalName}}' : '{{shortName}}'; +{{/getAttributes}} From 7300051b69048eb65cbe4abd4f6e08fcf65462d2 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sat, 23 Mar 2013 17:46:38 +0100 Subject: [PATCH 2/8] Use glsl-unit in WebGL map renderer --- src/ol/renderer/webgl/webglmap.glsl | 31 +++++++ src/ol/renderer/webgl/webglmaprenderer.js | 81 ++++------------- src/ol/renderer/webgl/webglmapshader.js | 105 ++++++++++++++++++++++ 3 files changed, 151 insertions(+), 66 deletions(-) create mode 100644 src/ol/renderer/webgl/webglmap.glsl create mode 100644 src/ol/renderer/webgl/webglmapshader.js diff --git a/src/ol/renderer/webgl/webglmap.glsl b/src/ol/renderer/webgl/webglmap.glsl new file mode 100644 index 0000000000..3c1304efd6 --- /dev/null +++ b/src/ol/renderer/webgl/webglmap.glsl @@ -0,0 +1,31 @@ +//! NAMESPACE=ol.renderer.webgl.map + + +//! COMMON +varying vec2 v_texCoord; + + +//! VERTEX +attribute vec2 a_position; +attribute vec2 a_texCoord; + +uniform mat4 u_texCoordMatrix; +uniform mat4 u_projectionMatrix; + +void main(void) { + gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.); + v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st; +} + + +//! FRAGMENT +// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp +uniform mat4 u_colorMatrix; +uniform float u_opacity; +uniform sampler2D u_texture; + +void main(void) { + vec4 texColor = texture2D(u_texture, v_texCoord); + gl_FragColor.rgb = (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb; + gl_FragColor.a = texColor.a * u_opacity; +} diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 11ff3b5a08..3d56eca6e0 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -1,7 +1,6 @@ // FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE) goog.provide('ol.renderer.webgl.Map'); -goog.provide('ol.renderer.webgl.map.shader'); goog.require('goog.array'); goog.require('goog.debug.Logger'); @@ -22,6 +21,7 @@ goog.require('ol.renderer.webgl.FragmentShader'); goog.require('ol.renderer.webgl.ImageLayer'); goog.require('ol.renderer.webgl.TileLayer'); goog.require('ol.renderer.webgl.VertexShader'); +goog.require('ol.renderer.webgl.map.shader'); goog.require('ol.structs.Buffer'); goog.require('ol.structs.IntegerSet'); goog.require('ol.structs.LRUCache'); @@ -50,64 +50,6 @@ ol.renderer.webgl.TextureCacheEntry; -/** - * @constructor - * @extends {ol.renderer.webgl.FragmentShader} - * @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp - */ -ol.renderer.webgl.map.shader.Fragment = function() { - goog.base(this, [ - 'precision mediump float;', - '', - 'uniform mat4 u_colorMatrix;', - 'uniform float u_opacity;', - 'uniform sampler2D u_texture;', - '', - 'varying vec2 v_texCoord;', - '', - 'void main(void) {', - '', - ' vec4 texColor = texture2D(u_texture, v_texCoord);', - ' vec4 color = u_colorMatrix * vec4(texColor.rgb, 1.);', - ' color.a = texColor.a * u_opacity;', - '', - ' gl_FragColor = color;', - '', - '}' - ].join('\n')); -}; -goog.inherits( - ol.renderer.webgl.map.shader.Fragment, ol.renderer.webgl.FragmentShader); -goog.addSingletonGetter(ol.renderer.webgl.map.shader.Fragment); - - - -/** - * @constructor - * @extends {ol.renderer.webgl.VertexShader} - */ -ol.renderer.webgl.map.shader.Vertex = function() { - goog.base(this, [ - 'attribute vec2 a_position;', - 'attribute vec2 a_texCoord;', - '', - 'uniform mat4 u_texCoordMatrix;', - 'uniform mat4 u_projectionMatrix;', - '', - 'varying vec2 v_texCoord;', - '', - 'void main(void) {', - ' gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);', - ' v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;', - '}' - ].join('\n')); -}; -goog.inherits( - ol.renderer.webgl.map.shader.Vertex, ol.renderer.webgl.VertexShader); -goog.addSingletonGetter(ol.renderer.webgl.map.shader.Vertex); - - - /** * @constructor * @extends {ol.renderer.Map} @@ -586,13 +528,20 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { gl.useProgram(program); if (goog.isNull(this.locations_)) { this.locations_ = { - a_position: gl.getAttribLocation(program, 'a_position'), - a_texCoord: gl.getAttribLocation(program, 'a_texCoord'), - u_colorMatrix: gl.getUniformLocation(program, 'u_colorMatrix'), - u_texCoordMatrix: gl.getUniformLocation(program, 'u_texCoordMatrix'), - u_projectionMatrix: gl.getUniformLocation(program, 'u_projectionMatrix'), - u_opacity: gl.getUniformLocation(program, 'u_opacity'), - u_texture: gl.getUniformLocation(program, 'u_texture') + a_position: gl.getAttribLocation( + program, ol.renderer.webgl.map.shader.attribute.a_position), + a_texCoord: gl.getAttribLocation( + program, ol.renderer.webgl.map.shader.attribute.a_texCoord), + u_colorMatrix: gl.getUniformLocation( + program, ol.renderer.webgl.map.shader.uniform.u_colorMatrix), + u_texCoordMatrix: gl.getUniformLocation( + program, ol.renderer.webgl.map.shader.uniform.u_texCoordMatrix), + u_projectionMatrix: gl.getUniformLocation( + program, ol.renderer.webgl.map.shader.uniform.u_projectionMatrix), + u_opacity: gl.getUniformLocation( + program, ol.renderer.webgl.map.shader.uniform.u_opacity), + u_texture: gl.getUniformLocation( + program, ol.renderer.webgl.map.shader.uniform.u_texture) }; } diff --git a/src/ol/renderer/webgl/webglmapshader.js b/src/ol/renderer/webgl/webglmapshader.js new file mode 100644 index 0000000000..29afc21c04 --- /dev/null +++ b/src/ol/renderer/webgl/webglmapshader.js @@ -0,0 +1,105 @@ +goog.provide('ol.renderer.webgl.map.shader'); +goog.require('ol.renderer.webgl.FragmentShader'); +goog.require('ol.renderer.webgl.VertexShader'); +/** + * @constructor + * @extends {ol.renderer.webgl.FragmentShader} + */ +ol.renderer.webgl.map.shader.Fragment = function() { + goog.base(this, ol.renderer.webgl.map.shader.Fragment.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.Fragment, ol.renderer.webgl.FragmentShader); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.Fragment); +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\n//! NAMESPACE=ol.renderer.webgl.map\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'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Fragment.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;}'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Fragment.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.Fragment.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.Fragment.OPTIMIZED_SOURCE; +/** + * @constructor + * @extends {ol.renderer.webgl.VertexShader} + */ +ol.renderer.webgl.map.shader.Vertex = function() { + goog.base(this, ol.renderer.webgl.map.shader.Vertex.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.Vertex, ol.renderer.webgl.VertexShader); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.Vertex); +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Vertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.map\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'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Vertex.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;}'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.Vertex.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.Vertex.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.Vertex.OPTIMIZED_SOURCE; +/** + * @constructor + */ +ol.renderer.webgl.map.shader.uniform = function() {}; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.uniform.u_texCoordMatrix = + goog.DEBUG ? 'u_texCoordMatrix' : 'b'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.uniform.u_projectionMatrix = + goog.DEBUG ? 'u_projectionMatrix' : 'c'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.uniform.u_colorMatrix = + goog.DEBUG ? 'u_colorMatrix' : 'd'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.uniform.u_opacity = + goog.DEBUG ? 'u_opacity' : 'e'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.uniform.u_texture = + goog.DEBUG ? 'u_texture' : 'f'; +/** + * @constructor + */ +ol.renderer.webgl.map.shader.attribute = function() {}; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.attribute.a_position = + goog.DEBUG ? 'a_position' : 'd'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.attribute.a_texCoord = + goog.DEBUG ? 'a_texCoord' : 'e'; From 711e4be19ef0e36c9d5b71d39dce335ad644364d Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sat, 23 Mar 2013 17:47:02 +0100 Subject: [PATCH 3/8] Use glsl-unit in WebGL tile layer renderer --- src/ol/renderer/webgl/webgltilelayer.glsl | 24 +++++ .../renderer/webgl/webgltilelayerrenderer.js | 68 ++------------- src/ol/renderer/webgl/webgltilelayershader.js | 87 +++++++++++++++++++ 3 files changed, 120 insertions(+), 59 deletions(-) create mode 100644 src/ol/renderer/webgl/webgltilelayer.glsl create mode 100644 src/ol/renderer/webgl/webgltilelayershader.js diff --git a/src/ol/renderer/webgl/webgltilelayer.glsl b/src/ol/renderer/webgl/webgltilelayer.glsl new file mode 100644 index 0000000000..4424dd2085 --- /dev/null +++ b/src/ol/renderer/webgl/webgltilelayer.glsl @@ -0,0 +1,24 @@ +//! NAMESPACE=ol.renderer.webgl.tilelayer + + +//! COMMON +varying vec2 v_texCoord; + + +//! VERTEX +attribute vec2 a_position; +attribute vec2 a_texCoord; +uniform vec4 u_tileOffset; + +void main(void) { + gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.); + v_texCoord = a_texCoord; +} + + +//! FRAGMENT +uniform sampler2D u_texture; + +void main(void) { + gl_FragColor = texture2D(u_texture, v_texCoord); +} diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index c9b0f69bfb..8bb2cb202a 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -2,7 +2,6 @@ // FIXME animated shaders! check in redraw goog.provide('ol.renderer.webgl.TileLayer'); -goog.provide('ol.renderer.webgl.tilelayer.shader'); goog.require('goog.array'); goog.require('goog.object'); @@ -18,65 +17,12 @@ goog.require('ol.TileRange'); goog.require('ol.TileState'); goog.require('ol.layer.TileLayer'); goog.require('ol.math'); -goog.require('ol.renderer.webgl.FragmentShader'); goog.require('ol.renderer.webgl.Layer'); -goog.require('ol.renderer.webgl.VertexShader'); +goog.require('ol.renderer.webgl.tilelayer.shader'); goog.require('ol.structs.Buffer'); -/** - * @constructor - * @extends {ol.renderer.webgl.FragmentShader} - */ -ol.renderer.webgl.tilelayer.shader.Fragment = function() { - goog.base(this, [ - 'precision mediump float;', - '', - 'uniform sampler2D u_texture;', - '', - 'varying vec2 v_texCoord;', - '', - 'void main(void) {', - ' gl_FragColor = texture2D(u_texture, v_texCoord);', - '}' - ].join('\n')); -}; -goog.inherits( - ol.renderer.webgl.tilelayer.shader.Fragment, - ol.renderer.webgl.FragmentShader); -goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment); - - - -/** - * @constructor - * @extends {ol.renderer.webgl.VertexShader} - */ -ol.renderer.webgl.tilelayer.shader.Vertex = function() { - goog.base(this, [ - 'attribute vec2 a_position;', - 'attribute vec2 a_texCoord;', - '', - 'varying vec2 v_texCoord;', - '', - 'uniform vec4 u_tileOffset;', - '', - 'void main(void) {', - ' gl_Position.xy = a_position * u_tileOffset.xy + u_tileOffset.zw;', - ' gl_Position.z = 0.;', - ' gl_Position.w = 1.;', - ' v_texCoord = a_texCoord;', - '}' - ].join('\n')); -}; -goog.inherits( - ol.renderer.webgl.tilelayer.shader.Vertex, - ol.renderer.webgl.VertexShader); -goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex); - - - /** * @constructor * @extends {ol.renderer.webgl.Layer} @@ -232,10 +178,14 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = gl.useProgram(program); if (goog.isNull(this.locations_)) { this.locations_ = { - a_position: gl.getAttribLocation(program, 'a_position'), - a_texCoord: gl.getAttribLocation(program, 'a_texCoord'), - u_tileOffset: gl.getUniformLocation(program, 'u_tileOffset'), - u_texture: gl.getUniformLocation(program, 'u_texture') + a_position: gl.getAttribLocation( + program, ol.renderer.webgl.tilelayer.shader.attribute.a_position), + a_texCoord: gl.getAttribLocation( + program, ol.renderer.webgl.tilelayer.shader.attribute.a_texCoord), + u_tileOffset: gl.getUniformLocation( + program, ol.renderer.webgl.tilelayer.shader.uniform.u_tileOffset), + u_texture: gl.getUniformLocation( + program, ol.renderer.webgl.tilelayer.shader.uniform.u_texture) }; } diff --git a/src/ol/renderer/webgl/webgltilelayershader.js b/src/ol/renderer/webgl/webgltilelayershader.js new file mode 100644 index 0000000000..18e3cd507a --- /dev/null +++ b/src/ol/renderer/webgl/webgltilelayershader.js @@ -0,0 +1,87 @@ +goog.provide('ol.renderer.webgl.tilelayer.shader'); +goog.require('ol.renderer.webgl.FragmentShader'); +goog.require('ol.renderer.webgl.VertexShader'); +/** + * @constructor + * @extends {ol.renderer.webgl.FragmentShader} + */ +ol.renderer.webgl.tilelayer.shader.Fragment = function() { + goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE); +}; +goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.renderer.webgl.FragmentShader); +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\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'; +/** + * @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);}'; +/** + * @const + * @type {string} + */ +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.renderer.webgl.VertexShader} + */ +ol.renderer.webgl.tilelayer.shader.Vertex = function() { + goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE); +}; +goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.renderer.webgl.VertexShader); +goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex); +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE = '//! NAMESPACE=ol.renderer.webgl.tilelayer\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'; +/** + * @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;}'; +/** + * @const + * @type {string} + */ +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 + */ +ol.renderer.webgl.tilelayer.shader.uniform = function() {}; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.uniform.u_tileOffset = + goog.DEBUG ? 'u_tileOffset' : 'b'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.uniform.u_texture = + goog.DEBUG ? 'u_texture' : 'c'; +/** + * @constructor + */ +ol.renderer.webgl.tilelayer.shader.attribute = function() {}; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.attribute.a_position = + goog.DEBUG ? 'a_position' : 'c'; +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.attribute.a_texCoord = + goog.DEBUG ? 'a_texCoord' : 'd'; From 4ec8bf2360fdb98b0cf54cb51a7ee8b30344186a Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sat, 23 Mar 2013 18:15:55 +0100 Subject: [PATCH 4/8] Configure Travis to build shaders with glsl-unit --- .gitignore | 1 + .travis.yml | 2 ++ build.py | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ae9e23ecc0..d458fc1282 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /bin/plovr*.jar /build/gh-pages /build/check-requires-timestamp +/build/glsl-unit /build/jsdoc-*-timestamp /build/lint-timestamp /build/ol.css diff --git a/.travis.yml b/.travis.yml index fcb325ca2c..29e2a17663 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,12 @@ before_install: - "sudo pip install http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz" - "git clone https://github.com/jsdoc3/jsdoc && (cd jsdoc && git checkout master)" + - "git clone https://code.google.com/p/glsl-unit/ build/glsl-unit" before_script: - "./build.py plovr" - "./build.py serve-integration-test &" + - "rm src/ol/renderer/webgl/webgl*shader.js" - "sleep 3" script: "./build.py JSDOC=jsdoc/jsdoc integration-test" diff --git a/build.py b/build.py index 645126d6c5..9e03cf6466 100755 --- a/build.py +++ b/build.py @@ -39,7 +39,7 @@ else: variables.PYTHON = 'python' variables.PHANTOMJS = 'phantomjs' -TEMPLATE_GLSL_COMPILER_JS = '../glsl-unit/bin/template_glsl_compiler.js' +TEMPLATE_GLSL_COMPILER_JS = 'build/glsl-unit/bin/template_glsl_compiler.js' variables.BRANCH = output( '%(GIT)s', 'rev-parse', '--abbrev-ref', 'HEAD').strip() From 731fcd3d176539f7ff0a3fed59838cc861da3efc Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sat, 23 Mar 2013 18:29:26 +0100 Subject: [PATCH 5/8] Move shader support code into ol.webgl --- .travis.yml | 2 +- build.py | 4 +- src/ol/renderer/webgl/shader.js | 81 ------------------- src/ol/renderer/webgl/webglmaprenderer.js | 15 ++-- src/ol/renderer/webgl/webglmapshader.js | 12 +-- .../renderer/webgl/webgltilelayerrenderer.js | 4 +- src/ol/renderer/webgl/webgltilelayershader.js | 12 +-- src/ol/webgl/shader.js | 81 +++++++++++++++++++ src/ol/{renderer => }/webgl/shader.mustache | 12 +-- 9 files changed, 111 insertions(+), 112 deletions(-) delete mode 100644 src/ol/renderer/webgl/shader.js create mode 100644 src/ol/webgl/shader.js rename src/ol/{renderer => }/webgl/shader.mustache (83%) diff --git a/.travis.yml b/.travis.yml index 29e2a17663..12b0ddc923 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ before_install: before_script: - "./build.py plovr" - "./build.py serve-integration-test &" - - "rm src/ol/renderer/webgl/webgl*shader.js" + - "rm src/ol/renderer/webgl/*shader.js" - "sleep 3" script: "./build.py JSDOC=jsdoc/jsdoc integration-test" diff --git a/build.py b/build.py index 9e03cf6466..bed89464e3 100755 --- a/build.py +++ b/build.py @@ -188,11 +188,11 @@ def build_src_external_src_types_js(t): for glsl_src in GLSL_SRC: def shader_src_helper(glsl_src): @target(glsl_src.replace('.glsl', 'shader.js'), glsl_src, - 'src/ol/renderer/webgl/shader.mustache') + 'src/ol/webgl/shader.mustache') def shader_src(t): t.run('%(NODE)s', TEMPLATE_GLSL_COMPILER_JS, '--input', glsl_src, - '--template', 'src/ol/renderer/webgl/shader.mustache', + '--template', 'src/ol/webgl/shader.mustache', '--output', t.name) shader_src_helper(glsl_src) diff --git a/src/ol/renderer/webgl/shader.js b/src/ol/renderer/webgl/shader.js deleted file mode 100644 index e425155641..0000000000 --- a/src/ol/renderer/webgl/shader.js +++ /dev/null @@ -1,81 +0,0 @@ -goog.provide('ol.renderer.webgl.FragmentShader'); -goog.provide('ol.renderer.webgl.VertexShader'); - -goog.require('goog.functions'); -goog.require('goog.webgl'); - - - -/** - * @constructor - * @param {string} source Source. - */ -ol.renderer.webgl.Shader = function(source) { - - /** - * @private - * @type {string} - */ - this.source_ = source; - -}; - - -/** - * @return {number} Type. - */ -ol.renderer.webgl.Shader.prototype.getType = goog.abstractMethod; - - -/** - * @return {string} Source. - */ -ol.renderer.webgl.Shader.prototype.getSource = function() { - return this.source_; -}; - - -/** - * @return {boolean} Is animated? - */ -ol.renderer.webgl.Shader.prototype.isAnimated = goog.functions.FALSE; - - - -/** - * @constructor - * @extends {ol.renderer.webgl.Shader} - * @param {string} source Source. - */ -ol.renderer.webgl.FragmentShader = function(source) { - goog.base(this, source); -}; -goog.inherits(ol.renderer.webgl.FragmentShader, ol.renderer.webgl.Shader); - - -/** - * @inheritDoc - */ -ol.renderer.webgl.FragmentShader.prototype.getType = function() { - return goog.webgl.FRAGMENT_SHADER; -}; - - - -/** - * @constructor - * @extends {ol.renderer.webgl.Shader} - * @param {string} source Source. - */ -ol.renderer.webgl.VertexShader = function(source) { - goog.base(this, source); -}; -goog.inherits(ol.renderer.webgl.VertexShader, ol.renderer.webgl.Shader); - - -/** - * @inheritDoc - */ -ol.renderer.webgl.VertexShader.prototype.getType = function() { - return goog.webgl.VERTEX_SHADER; -}; diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 3d56eca6e0..2507bab7a6 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -17,15 +17,15 @@ goog.require('ol.Tile'); goog.require('ol.layer.ImageLayer'); goog.require('ol.layer.TileLayer'); goog.require('ol.renderer.Map'); -goog.require('ol.renderer.webgl.FragmentShader'); goog.require('ol.renderer.webgl.ImageLayer'); goog.require('ol.renderer.webgl.TileLayer'); -goog.require('ol.renderer.webgl.VertexShader'); goog.require('ol.renderer.webgl.map.shader'); goog.require('ol.structs.Buffer'); goog.require('ol.structs.IntegerSet'); goog.require('ol.structs.LRUCache'); goog.require('ol.webgl'); +goog.require('ol.webgl.FragmentShader'); +goog.require('ol.webgl.VertexShader'); goog.require('ol.webgl.WebGLContextEventType'); @@ -163,13 +163,13 @@ ol.renderer.webgl.Map = function(container, map) { /** * @private - * @type {ol.renderer.webgl.FragmentShader} + * @type {ol.webgl.FragmentShader} */ this.fragmentShader_ = ol.renderer.webgl.map.shader.Fragment.getInstance(); /** * @private - * @type {ol.renderer.webgl.VertexShader} + * @type {ol.webgl.VertexShader} */ this.vertexShader_ = ol.renderer.webgl.map.shader.Vertex.getInstance(); @@ -368,9 +368,8 @@ ol.renderer.webgl.Map.prototype.getGL = function() { /** - * @param {ol.renderer.webgl.FragmentShader} fragmentShaderObject - * Fragment shader. - * @param {ol.renderer.webgl.VertexShader} vertexShaderObject Vertex shader. + * @param {ol.webgl.FragmentShader} fragmentShaderObject Fragment shader. + * @param {ol.webgl.VertexShader} vertexShaderObject Vertex shader. * @return {WebGLProgram} Program. */ ol.renderer.webgl.Map.prototype.getProgram = function( @@ -400,7 +399,7 @@ ol.renderer.webgl.Map.prototype.getProgram = function( /** - * @param {ol.renderer.webgl.Shader} shaderObject Shader object. + * @param {ol.webgl.Shader} shaderObject Shader object. * @return {WebGLShader} Shader. */ ol.renderer.webgl.Map.prototype.getShader = function(shaderObject) { diff --git a/src/ol/renderer/webgl/webglmapshader.js b/src/ol/renderer/webgl/webglmapshader.js index 29afc21c04..ce22cb06b2 100644 --- a/src/ol/renderer/webgl/webglmapshader.js +++ b/src/ol/renderer/webgl/webglmapshader.js @@ -1,14 +1,14 @@ goog.provide('ol.renderer.webgl.map.shader'); -goog.require('ol.renderer.webgl.FragmentShader'); -goog.require('ol.renderer.webgl.VertexShader'); +goog.require('ol.webgl.FragmentShader'); +goog.require('ol.webgl.VertexShader'); /** * @constructor - * @extends {ol.renderer.webgl.FragmentShader} + * @extends {ol.webgl.FragmentShader} */ ol.renderer.webgl.map.shader.Fragment = function() { goog.base(this, ol.renderer.webgl.map.shader.Fragment.SOURCE); }; -goog.inherits(ol.renderer.webgl.map.shader.Fragment, ol.renderer.webgl.FragmentShader); +goog.inherits(ol.renderer.webgl.map.shader.Fragment, ol.webgl.FragmentShader); goog.addSingletonGetter(ol.renderer.webgl.map.shader.Fragment); /** * @const @@ -29,12 +29,12 @@ ol.renderer.webgl.map.shader.Fragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.Fragment.OPTIMIZED_SOURCE; /** * @constructor - * @extends {ol.renderer.webgl.VertexShader} + * @extends {ol.webgl.VertexShader} */ ol.renderer.webgl.map.shader.Vertex = function() { goog.base(this, ol.renderer.webgl.map.shader.Vertex.SOURCE); }; -goog.inherits(ol.renderer.webgl.map.shader.Vertex, ol.renderer.webgl.VertexShader); +goog.inherits(ol.renderer.webgl.map.shader.Vertex, ol.webgl.VertexShader); goog.addSingletonGetter(ol.renderer.webgl.map.shader.Vertex); /** * @const diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index 8bb2cb202a..cfae0295ec 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -35,14 +35,14 @@ ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) { /** * @private - * @type {ol.renderer.webgl.FragmentShader} + * @type {ol.webgl.FragmentShader} */ this.fragmentShader_ = ol.renderer.webgl.tilelayer.shader.Fragment.getInstance(); /** * @private - * @type {ol.renderer.webgl.VertexShader} + * @type {ol.webgl.VertexShader} */ this.vertexShader_ = ol.renderer.webgl.tilelayer.shader.Vertex.getInstance(); diff --git a/src/ol/renderer/webgl/webgltilelayershader.js b/src/ol/renderer/webgl/webgltilelayershader.js index 18e3cd507a..6e609ac3b0 100644 --- a/src/ol/renderer/webgl/webgltilelayershader.js +++ b/src/ol/renderer/webgl/webgltilelayershader.js @@ -1,14 +1,14 @@ goog.provide('ol.renderer.webgl.tilelayer.shader'); -goog.require('ol.renderer.webgl.FragmentShader'); -goog.require('ol.renderer.webgl.VertexShader'); +goog.require('ol.webgl.FragmentShader'); +goog.require('ol.webgl.VertexShader'); /** * @constructor - * @extends {ol.renderer.webgl.FragmentShader} + * @extends {ol.webgl.FragmentShader} */ ol.renderer.webgl.tilelayer.shader.Fragment = function() { goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE); }; -goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.renderer.webgl.FragmentShader); +goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.FragmentShader); goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment); /** * @const @@ -29,12 +29,12 @@ ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE; /** * @constructor - * @extends {ol.renderer.webgl.VertexShader} + * @extends {ol.webgl.VertexShader} */ ol.renderer.webgl.tilelayer.shader.Vertex = function() { goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE); }; -goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.renderer.webgl.VertexShader); +goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.VertexShader); goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex); /** * @const diff --git a/src/ol/webgl/shader.js b/src/ol/webgl/shader.js new file mode 100644 index 0000000000..8550ccf7f2 --- /dev/null +++ b/src/ol/webgl/shader.js @@ -0,0 +1,81 @@ +goog.provide('ol.webgl.FragmentShader'); +goog.provide('ol.webgl.VertexShader'); + +goog.require('goog.functions'); +goog.require('goog.webgl'); + + + +/** + * @constructor + * @param {string} source Source. + */ +ol.webgl.Shader = function(source) { + + /** + * @private + * @type {string} + */ + this.source_ = source; + +}; + + +/** + * @return {number} Type. + */ +ol.webgl.Shader.prototype.getType = goog.abstractMethod; + + +/** + * @return {string} Source. + */ +ol.webgl.Shader.prototype.getSource = function() { + return this.source_; +}; + + +/** + * @return {boolean} Is animated? + */ +ol.webgl.Shader.prototype.isAnimated = goog.functions.FALSE; + + + +/** + * @constructor + * @extends {ol.webgl.Shader} + * @param {string} source Source. + */ +ol.webgl.FragmentShader = function(source) { + goog.base(this, source); +}; +goog.inherits(ol.webgl.FragmentShader, ol.webgl.Shader); + + +/** + * @inheritDoc + */ +ol.webgl.FragmentShader.prototype.getType = function() { + return goog.webgl.FRAGMENT_SHADER; +}; + + + +/** + * @constructor + * @extends {ol.webgl.Shader} + * @param {string} source Source. + */ +ol.webgl.VertexShader = function(source) { + goog.base(this, source); +}; +goog.inherits(ol.webgl.VertexShader, ol.webgl.Shader); + + +/** + * @inheritDoc + */ +ol.webgl.VertexShader.prototype.getType = function() { + return goog.webgl.VERTEX_SHADER; +}; diff --git a/src/ol/renderer/webgl/shader.mustache b/src/ol/webgl/shader.mustache similarity index 83% rename from src/ol/renderer/webgl/shader.mustache rename to src/ol/webgl/shader.mustache index 296822fb6c..5178ea8f8c 100644 --- a/src/ol/renderer/webgl/shader.mustache +++ b/src/ol/webgl/shader.mustache @@ -1,18 +1,18 @@ goog.provide('{{namespace}}.shader'); -goog.require('ol.renderer.webgl.FragmentShader'); -goog.require('ol.renderer.webgl.VertexShader'); +goog.require('ol.webgl.FragmentShader'); +goog.require('ol.webgl.VertexShader'); /** * @constructor - * @extends {ol.renderer.webgl.FragmentShader} + * @extends {ol.webgl.FragmentShader} */ {{namespace}}.shader.Fragment = function() { goog.base(this, {{namespace}}.shader.Fragment.SOURCE); }; -goog.inherits({{namespace}}.shader.Fragment, ol.renderer.webgl.FragmentShader); +goog.inherits({{namespace}}.shader.Fragment, ol.webgl.FragmentShader); goog.addSingletonGetter({{namespace}}.shader.Fragment); @@ -42,12 +42,12 @@ goog.addSingletonGetter({{namespace}}.shader.Fragment); /** * @constructor - * @extends {ol.renderer.webgl.VertexShader} + * @extends {ol.webgl.VertexShader} */ {{namespace}}.shader.Vertex = function() { goog.base(this, {{namespace}}.shader.Vertex.SOURCE); }; -goog.inherits({{namespace}}.shader.Vertex, ol.renderer.webgl.VertexShader); +goog.inherits({{namespace}}.shader.Vertex, ol.webgl.VertexShader); goog.addSingletonGetter({{namespace}}.shader.Vertex); From 3a4ef83e79e60a011a955ac613969d5276dd64d7 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sat, 23 Mar 2013 18:34:12 +0100 Subject: [PATCH 6/8] Tidy up ol.webgl namespace --- src/ol/renderer/webgl/webglmaprenderer.js | 11 +++++------ src/ol/renderer/webgl/webglmapshader.js | 11 +++++------ src/ol/renderer/webgl/webgltilelayerrenderer.js | 4 ++-- src/ol/renderer/webgl/webgltilelayershader.js | 11 +++++------ src/ol/webgl/shader.js | 16 ++++++++-------- src/ol/webgl/shader.mustache | 11 +++++------ 6 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 2507bab7a6..655350d6f9 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -24,9 +24,8 @@ goog.require('ol.structs.Buffer'); goog.require('ol.structs.IntegerSet'); goog.require('ol.structs.LRUCache'); goog.require('ol.webgl'); -goog.require('ol.webgl.FragmentShader'); -goog.require('ol.webgl.VertexShader'); goog.require('ol.webgl.WebGLContextEventType'); +goog.require('ol.webgl.shader'); /** @@ -163,13 +162,13 @@ ol.renderer.webgl.Map = function(container, map) { /** * @private - * @type {ol.webgl.FragmentShader} + * @type {ol.webgl.shader.Fragment} */ this.fragmentShader_ = ol.renderer.webgl.map.shader.Fragment.getInstance(); /** * @private - * @type {ol.webgl.VertexShader} + * @type {ol.webgl.shader.Vertex} */ this.vertexShader_ = ol.renderer.webgl.map.shader.Vertex.getInstance(); @@ -368,8 +367,8 @@ ol.renderer.webgl.Map.prototype.getGL = function() { /** - * @param {ol.webgl.FragmentShader} fragmentShaderObject Fragment shader. - * @param {ol.webgl.VertexShader} vertexShaderObject Vertex shader. + * @param {ol.webgl.shader.Fragment} fragmentShaderObject Fragment shader. + * @param {ol.webgl.shader.Vertex} vertexShaderObject Vertex shader. * @return {WebGLProgram} Program. */ ol.renderer.webgl.Map.prototype.getProgram = function( diff --git a/src/ol/renderer/webgl/webglmapshader.js b/src/ol/renderer/webgl/webglmapshader.js index ce22cb06b2..af88a01080 100644 --- a/src/ol/renderer/webgl/webglmapshader.js +++ b/src/ol/renderer/webgl/webglmapshader.js @@ -1,14 +1,13 @@ goog.provide('ol.renderer.webgl.map.shader'); -goog.require('ol.webgl.FragmentShader'); -goog.require('ol.webgl.VertexShader'); +goog.require('ol.webgl.shader'); /** * @constructor - * @extends {ol.webgl.FragmentShader} + * @extends {ol.webgl.shader.Fragment} */ ol.renderer.webgl.map.shader.Fragment = function() { goog.base(this, ol.renderer.webgl.map.shader.Fragment.SOURCE); }; -goog.inherits(ol.renderer.webgl.map.shader.Fragment, ol.webgl.FragmentShader); +goog.inherits(ol.renderer.webgl.map.shader.Fragment, ol.webgl.shader.Fragment); goog.addSingletonGetter(ol.renderer.webgl.map.shader.Fragment); /** * @const @@ -29,12 +28,12 @@ ol.renderer.webgl.map.shader.Fragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.Fragment.OPTIMIZED_SOURCE; /** * @constructor - * @extends {ol.webgl.VertexShader} + * @extends {ol.webgl.shader.Vertex} */ ol.renderer.webgl.map.shader.Vertex = function() { goog.base(this, ol.renderer.webgl.map.shader.Vertex.SOURCE); }; -goog.inherits(ol.renderer.webgl.map.shader.Vertex, ol.webgl.VertexShader); +goog.inherits(ol.renderer.webgl.map.shader.Vertex, ol.webgl.shader.Vertex); goog.addSingletonGetter(ol.renderer.webgl.map.shader.Vertex); /** * @const diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index cfae0295ec..2ed3e595cd 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -35,14 +35,14 @@ ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) { /** * @private - * @type {ol.webgl.FragmentShader} + * @type {ol.webgl.shader.Fragment} */ this.fragmentShader_ = ol.renderer.webgl.tilelayer.shader.Fragment.getInstance(); /** * @private - * @type {ol.webgl.VertexShader} + * @type {ol.webgl.shader.Vertex} */ this.vertexShader_ = ol.renderer.webgl.tilelayer.shader.Vertex.getInstance(); diff --git a/src/ol/renderer/webgl/webgltilelayershader.js b/src/ol/renderer/webgl/webgltilelayershader.js index 6e609ac3b0..ad3148456f 100644 --- a/src/ol/renderer/webgl/webgltilelayershader.js +++ b/src/ol/renderer/webgl/webgltilelayershader.js @@ -1,14 +1,13 @@ goog.provide('ol.renderer.webgl.tilelayer.shader'); -goog.require('ol.webgl.FragmentShader'); -goog.require('ol.webgl.VertexShader'); +goog.require('ol.webgl.shader'); /** * @constructor - * @extends {ol.webgl.FragmentShader} + * @extends {ol.webgl.shader.Fragment} */ ol.renderer.webgl.tilelayer.shader.Fragment = function() { goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE); }; -goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.FragmentShader); +goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.shader.Fragment); goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment); /** * @const @@ -29,12 +28,12 @@ ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE; /** * @constructor - * @extends {ol.webgl.VertexShader} + * @extends {ol.webgl.shader.Vertex} */ ol.renderer.webgl.tilelayer.shader.Vertex = function() { goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE); }; -goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.VertexShader); +goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.shader.Vertex); goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex); /** * @const diff --git a/src/ol/webgl/shader.js b/src/ol/webgl/shader.js index 8550ccf7f2..a06fd5c401 100644 --- a/src/ol/webgl/shader.js +++ b/src/ol/webgl/shader.js @@ -1,8 +1,8 @@ -goog.provide('ol.webgl.FragmentShader'); -goog.provide('ol.webgl.VertexShader'); +goog.provide('ol.webgl.shader'); goog.require('goog.functions'); goog.require('goog.webgl'); +goog.require('ol.webgl'); @@ -47,16 +47,16 @@ ol.webgl.Shader.prototype.isAnimated = goog.functions.FALSE; * @extends {ol.webgl.Shader} * @param {string} source Source. */ -ol.webgl.FragmentShader = function(source) { +ol.webgl.shader.Fragment = function(source) { goog.base(this, source); }; -goog.inherits(ol.webgl.FragmentShader, ol.webgl.Shader); +goog.inherits(ol.webgl.shader.Fragment, ol.webgl.Shader); /** * @inheritDoc */ -ol.webgl.FragmentShader.prototype.getType = function() { +ol.webgl.shader.Fragment.prototype.getType = function() { return goog.webgl.FRAGMENT_SHADER; }; @@ -67,15 +67,15 @@ ol.webgl.FragmentShader.prototype.getType = function() { * @extends {ol.webgl.Shader} * @param {string} source Source. */ -ol.webgl.VertexShader = function(source) { +ol.webgl.shader.Vertex = function(source) { goog.base(this, source); }; -goog.inherits(ol.webgl.VertexShader, ol.webgl.Shader); +goog.inherits(ol.webgl.shader.Vertex, ol.webgl.Shader); /** * @inheritDoc */ -ol.webgl.VertexShader.prototype.getType = function() { +ol.webgl.shader.Vertex.prototype.getType = function() { return goog.webgl.VERTEX_SHADER; }; diff --git a/src/ol/webgl/shader.mustache b/src/ol/webgl/shader.mustache index 5178ea8f8c..5c8531bb1f 100644 --- a/src/ol/webgl/shader.mustache +++ b/src/ol/webgl/shader.mustache @@ -1,18 +1,17 @@ goog.provide('{{namespace}}.shader'); -goog.require('ol.webgl.FragmentShader'); -goog.require('ol.webgl.VertexShader'); +goog.require('ol.webgl.shader'); /** * @constructor - * @extends {ol.webgl.FragmentShader} + * @extends {ol.webgl.shader.Fragment} */ {{namespace}}.shader.Fragment = function() { goog.base(this, {{namespace}}.shader.Fragment.SOURCE); }; -goog.inherits({{namespace}}.shader.Fragment, ol.webgl.FragmentShader); +goog.inherits({{namespace}}.shader.Fragment, ol.webgl.shader.Fragment); goog.addSingletonGetter({{namespace}}.shader.Fragment); @@ -42,12 +41,12 @@ goog.addSingletonGetter({{namespace}}.shader.Fragment); /** * @constructor - * @extends {ol.webgl.VertexShader} + * @extends {ol.webgl.shader.Vertex} */ {{namespace}}.shader.Vertex = function() { goog.base(this, {{namespace}}.shader.Vertex.SOURCE); }; -goog.inherits({{namespace}}.shader.Vertex, ol.webgl.VertexShader); +goog.inherits({{namespace}}.shader.Vertex, ol.webgl.shader.Vertex); goog.addSingletonGetter({{namespace}}.shader.Vertex); From 685f2b6f5fdbba28b563fd06861d824fb924804e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sun, 24 Mar 2013 16:14:04 +0100 Subject: [PATCH 7/8] Make time-sensitive test less sensitive --- test/spec/ol/map.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec/ol/map.test.js b/test/spec/ol/map.test.js index e1d4ab9b90..e982c3390a 100644 --- a/test/spec/ol/map.test.js +++ b/test/spec/ol/map.test.js @@ -214,7 +214,7 @@ describe('ol.Map', function() { expect(loc.x).to.eql(destination.x); expect(loc.y).to.eql(destination.y); done(); - }, duration + goog.async.AnimationDelay.TIMEOUT); + }, duration + 2 * goog.async.AnimationDelay.TIMEOUT); }); From 69d06a6e184fbffb7a7d3e87ef9ba4ee66aa1e7d Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 25 Mar 2013 10:04:32 +0100 Subject: [PATCH 8/8] Add comment about automatically generated files --- src/ol/renderer/webgl/webglmapshader.js | 1 + src/ol/renderer/webgl/webgltilelayershader.js | 1 + src/ol/webgl/shader.mustache | 1 + 3 files changed, 3 insertions(+) diff --git a/src/ol/renderer/webgl/webglmapshader.js b/src/ol/renderer/webgl/webglmapshader.js index af88a01080..ff19c00ae5 100644 --- a/src/ol/renderer/webgl/webglmapshader.js +++ b/src/ol/renderer/webgl/webglmapshader.js @@ -1,3 +1,4 @@ +// This file is automatically generated, do not edit goog.provide('ol.renderer.webgl.map.shader'); goog.require('ol.webgl.shader'); /** diff --git a/src/ol/renderer/webgl/webgltilelayershader.js b/src/ol/renderer/webgl/webgltilelayershader.js index ad3148456f..3b577cd491 100644 --- a/src/ol/renderer/webgl/webgltilelayershader.js +++ b/src/ol/renderer/webgl/webgltilelayershader.js @@ -1,3 +1,4 @@ +// This file is automatically generated, do not edit goog.provide('ol.renderer.webgl.tilelayer.shader'); goog.require('ol.webgl.shader'); /** diff --git a/src/ol/webgl/shader.mustache b/src/ol/webgl/shader.mustache index 5c8531bb1f..d2ad5ff367 100644 --- a/src/ol/webgl/shader.mustache +++ b/src/ol/webgl/shader.mustache @@ -1,3 +1,4 @@ +// This file is automatically generated, do not edit goog.provide('{{namespace}}.shader'); goog.require('ol.webgl.shader');