From aa5ce41cb5e79bfb9f98be81d4393368aa46cb50 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 8 Apr 2013 15:49:33 +0200 Subject: [PATCH] Automatically generate uniform and attribute locations --- src/ol/renderer/webgl/webglmapshader.js | 42 +++++++++++++++++++ src/ol/renderer/webgl/webgltilelayershader.js | 27 ++++++++++++ src/ol/webgl/shader.mustache | 25 +++++++++++ 3 files changed, 94 insertions(+) diff --git a/src/ol/renderer/webgl/webglmapshader.js b/src/ol/renderer/webgl/webglmapshader.js index 06f6d94b31..18e6fe7f3a 100644 --- a/src/ol/renderer/webgl/webglmapshader.js +++ b/src/ol/renderer/webgl/webglmapshader.js @@ -103,3 +103,45 @@ ol.renderer.webgl.map.shader.attribute.a_position = */ ol.renderer.webgl.map.shader.attribute.a_texCoord = goog.DEBUG ? 'a_texCoord' : 'e'; +/** + * @constructor + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLProgram} program Program. + */ +ol.renderer.webgl.map.shader.Locations = function(gl, program) { + /** + * @type {WebGLUniformLocation} + */ + this.u_texCoordMatrix = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.uniform.u_texCoordMatrix); + /** + * @type {WebGLUniformLocation} + */ + this.u_projectionMatrix = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.uniform.u_projectionMatrix); + /** + * @type {WebGLUniformLocation} + */ + this.u_colorMatrix = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.uniform.u_colorMatrix); + /** + * @type {WebGLUniformLocation} + */ + this.u_opacity = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.uniform.u_opacity); + /** + * @type {WebGLUniformLocation} + */ + this.u_texture = gl.getUniformLocation(program, + ol.renderer.webgl.map.shader.uniform.u_texture); + /** + * @type {number} + */ + this.a_position = gl.getAttribLocation(program, + ol.renderer.webgl.map.shader.attribute.a_position); + /** + * @type {number} + */ + this.a_texCoord = gl.getAttribLocation(program, + ol.renderer.webgl.map.shader.attribute.a_texCoord); +}; diff --git a/src/ol/renderer/webgl/webgltilelayershader.js b/src/ol/renderer/webgl/webgltilelayershader.js index e612338600..f8ade9fa02 100644 --- a/src/ol/renderer/webgl/webgltilelayershader.js +++ b/src/ol/renderer/webgl/webgltilelayershader.js @@ -85,3 +85,30 @@ ol.renderer.webgl.tilelayer.shader.attribute.a_position = */ ol.renderer.webgl.tilelayer.shader.attribute.a_texCoord = goog.DEBUG ? 'a_texCoord' : 'd'; +/** + * @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, + ol.renderer.webgl.tilelayer.shader.uniform.u_tileOffset); + /** + * @type {WebGLUniformLocation} + */ + this.u_texture = gl.getUniformLocation(program, + ol.renderer.webgl.tilelayer.shader.uniform.u_texture); + /** + * @type {number} + */ + this.a_position = gl.getAttribLocation(program, + ol.renderer.webgl.tilelayer.shader.attribute.a_position); + /** + * @type {number} + */ + this.a_texCoord = gl.getAttribLocation(program, + ol.renderer.webgl.tilelayer.shader.attribute.a_texCoord); +}; diff --git a/src/ol/webgl/shader.mustache b/src/ol/webgl/shader.mustache index 5c7071f84f..318461a474 100644 --- a/src/ol/webgl/shader.mustache +++ b/src/ol/webgl/shader.mustache @@ -104,3 +104,28 @@ goog.addSingletonGetter({{className}}Vertex); {{namespace}}.attribute.{{originalName}} = goog.DEBUG ? '{{originalName}}' : '{{shortName}}'; {{/getAttributes}} + + +/** + * @constructor + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLProgram} program Program. + */ +{{namespace}}.Locations = function(gl, program) { +{{#getUniforms}} + + /** + * @type {WebGLUniformLocation} + */ + this.{{originalName}} = gl.getUniformLocation(program, + {{namespace}}.uniform.{{originalName}}); +{{/getUniforms}} +{{#getAttributes}} + + /** + * @type {number} + */ + this.{{originalName}} = gl.getAttribLocation(program, + {{namespace}}.attribute.{{originalName}}); +{{/getAttributes}} +};