Merge pull request #506 from twpayne/refactor-webgl-shaders
Refactor WebGL shaders
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
//! NAMESPACE=ol.renderer.webgl.map
|
//! NAMESPACE=ol.renderer.webgl.map.shader.Color
|
||||||
|
//! CLASS=ol.renderer.webgl.map.shader.Color
|
||||||
|
|
||||||
|
|
||||||
//! COMMON
|
//! COMMON
|
||||||
97
src/ol/renderer/webgl/webglmapcolorshader.js
Normal file
97
src/ol/renderer/webgl/webglmapcolorshader.js
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
// 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}
|
||||||
|
*/
|
||||||
|
ol.renderer.webgl.map.shader.ColorFragment = function() {
|
||||||
|
goog.base(this, ol.renderer.webgl.map.shader.ColorFragment.SOURCE);
|
||||||
|
};
|
||||||
|
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';
|
||||||
|
/**
|
||||||
|
* @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;}';
|
||||||
|
/**
|
||||||
|
* @const
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
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}
|
||||||
|
*/
|
||||||
|
ol.renderer.webgl.map.shader.ColorVertex = function() {
|
||||||
|
goog.base(this, ol.renderer.webgl.map.shader.ColorVertex.SOURCE);
|
||||||
|
};
|
||||||
|
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';
|
||||||
|
/**
|
||||||
|
* @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;}';
|
||||||
|
/**
|
||||||
|
* @const
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
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');
|
||||||
|
/**
|
||||||
|
* @type {WebGLUniformLocation}
|
||||||
|
*/
|
||||||
|
this.u_opacity = gl.getUniformLocation(
|
||||||
|
program, goog.DEBUG ? 'u_opacity' : 'e');
|
||||||
|
/**
|
||||||
|
* @type {WebGLUniformLocation}
|
||||||
|
*/
|
||||||
|
this.u_texture = gl.getUniformLocation(
|
||||||
|
program, goog.DEBUG ? 'u_texture' : 'f');
|
||||||
|
/**
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.a_position = gl.getAttribLocation(
|
||||||
|
program, goog.DEBUG ? 'a_position' : 'd');
|
||||||
|
/**
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.a_texCoord = gl.getAttribLocation(
|
||||||
|
program, goog.DEBUG ? 'a_texCoord' : 'e');
|
||||||
|
};
|
||||||
30
src/ol/renderer/webgl/webglmapdefault.glsl
Normal file
30
src/ol/renderer/webgl/webglmapdefault.glsl
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
//! NAMESPACE=ol.renderer.webgl.map.shader.Default
|
||||||
|
//! CLASS=ol.renderer.webgl.map.shader.Default
|
||||||
|
|
||||||
|
|
||||||
|
//! 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
|
||||||
|
uniform float u_opacity;
|
||||||
|
uniform sampler2D u_texture;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
vec4 texColor = texture2D(u_texture, v_texCoord);
|
||||||
|
gl_FragColor.rgb = texColor.rgb;
|
||||||
|
gl_FragColor.a = texColor.a * u_opacity;
|
||||||
|
}
|
||||||
92
src/ol/renderer/webgl/webglmapdefaultshader.js
Normal file
92
src/ol/renderer/webgl/webglmapdefaultshader.js
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
// 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}
|
||||||
|
*/
|
||||||
|
ol.renderer.webgl.map.shader.DefaultFragment = function() {
|
||||||
|
goog.base(this, ol.renderer.webgl.map.shader.DefaultFragment.SOURCE);
|
||||||
|
};
|
||||||
|
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\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\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';
|
||||||
|
/**
|
||||||
|
* @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;}';
|
||||||
|
/**
|
||||||
|
* @const
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
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}
|
||||||
|
*/
|
||||||
|
ol.renderer.webgl.map.shader.DefaultVertex = function() {
|
||||||
|
goog.base(this, ol.renderer.webgl.map.shader.DefaultVertex.SOURCE);
|
||||||
|
};
|
||||||
|
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';
|
||||||
|
/**
|
||||||
|
* @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;}';
|
||||||
|
/**
|
||||||
|
* @const
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
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');
|
||||||
|
/**
|
||||||
|
* @type {WebGLUniformLocation}
|
||||||
|
*/
|
||||||
|
this.u_texture = gl.getUniformLocation(
|
||||||
|
program, goog.DEBUG ? 'u_texture' : 'e');
|
||||||
|
/**
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.a_position = gl.getAttribLocation(
|
||||||
|
program, goog.DEBUG ? 'a_position' : 'd');
|
||||||
|
/**
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.a_texCoord = gl.getAttribLocation(
|
||||||
|
program, goog.DEBUG ? 'a_texCoord' : 'e');
|
||||||
|
};
|
||||||
@@ -20,7 +20,8 @@ goog.require('ol.layer.TileLayer');
|
|||||||
goog.require('ol.renderer.Map');
|
goog.require('ol.renderer.Map');
|
||||||
goog.require('ol.renderer.webgl.ImageLayer');
|
goog.require('ol.renderer.webgl.ImageLayer');
|
||||||
goog.require('ol.renderer.webgl.TileLayer');
|
goog.require('ol.renderer.webgl.TileLayer');
|
||||||
goog.require('ol.renderer.webgl.map.shader');
|
goog.require('ol.renderer.webgl.map.shader.Color');
|
||||||
|
goog.require('ol.renderer.webgl.map.shader.Default');
|
||||||
goog.require('ol.structs.Buffer');
|
goog.require('ol.structs.Buffer');
|
||||||
goog.require('ol.structs.IntegerSet');
|
goog.require('ol.structs.IntegerSet');
|
||||||
goog.require('ol.structs.LRUCache');
|
goog.require('ol.structs.LRUCache');
|
||||||
@@ -103,15 +104,15 @@ ol.renderer.webgl.Map = function(container, map) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {{a_position: number,
|
* @type {ol.renderer.webgl.map.shader.Color.Locations}
|
||||||
* a_texCoord: number,
|
|
||||||
* u_colorMatrix: WebGLUniformLocation,
|
|
||||||
* u_opacity: WebGLUniformLocation,
|
|
||||||
* u_texture: WebGLUniformLocation,
|
|
||||||
* u_texCoordMatrix: WebGLUniformLocation,
|
|
||||||
* u_projectionMatrix: WebGLUniformLocation}|null}
|
|
||||||
*/
|
*/
|
||||||
this.locations_ = null;
|
this.colorLocations_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {ol.renderer.webgl.map.shader.Default.Locations}
|
||||||
|
*/
|
||||||
|
this.defaultLocations_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -200,18 +201,6 @@ ol.renderer.webgl.Map = function(container, map) {
|
|||||||
*/
|
*/
|
||||||
this.textureCacheFrameMarkerCount_ = 0;
|
this.textureCacheFrameMarkerCount_ = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {ol.webgl.shader.Fragment}
|
|
||||||
*/
|
|
||||||
this.fragmentShader_ = ol.renderer.webgl.map.shader.Fragment.getInstance();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {ol.webgl.shader.Vertex}
|
|
||||||
*/
|
|
||||||
this.vertexShader_ = ol.renderer.webgl.map.shader.Vertex.getInstance();
|
|
||||||
|
|
||||||
this.initializeGL_();
|
this.initializeGL_();
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -468,7 +457,8 @@ ol.renderer.webgl.Map.prototype.getTileTextureQueue = function() {
|
|||||||
*/
|
*/
|
||||||
ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) {
|
ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
this.locations_ = null;
|
this.colorLocations_ = null;
|
||||||
|
this.defaultLocations_ = null;
|
||||||
this.bufferCache_ = {};
|
this.bufferCache_ = {};
|
||||||
this.shaderCache_ = {};
|
this.shaderCache_ = {};
|
||||||
this.programCache_ = {};
|
this.programCache_ = {};
|
||||||
@@ -560,54 +550,79 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
|
|||||||
gl.enable(goog.webgl.BLEND);
|
gl.enable(goog.webgl.BLEND);
|
||||||
gl.viewport(0, 0, size.width, size.height);
|
gl.viewport(0, 0, size.width, size.height);
|
||||||
|
|
||||||
var program = this.getProgram(this.fragmentShader_, this.vertexShader_);
|
|
||||||
gl.useProgram(program);
|
|
||||||
if (goog.isNull(this.locations_)) {
|
|
||||||
this.locations_ = {
|
|
||||||
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)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
this.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_);
|
this.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_);
|
||||||
|
|
||||||
gl.enableVertexAttribArray(this.locations_.a_position);
|
var currentProgram = null;
|
||||||
gl.vertexAttribPointer(
|
var locations;
|
||||||
this.locations_.a_position, 2, goog.webgl.FLOAT, false, 16, 0);
|
|
||||||
gl.enableVertexAttribArray(this.locations_.a_texCoord);
|
|
||||||
gl.vertexAttribPointer(
|
|
||||||
this.locations_.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8);
|
|
||||||
gl.uniform1i(this.locations_.u_texture, 0);
|
|
||||||
|
|
||||||
goog.array.forEach(frameState.layersArray, function(layer) {
|
goog.array.forEach(frameState.layersArray, function(layer) {
|
||||||
|
|
||||||
var layerState = frameState.layerStates[goog.getUid(layer)];
|
var layerState = frameState.layerStates[goog.getUid(layer)];
|
||||||
if (!layerState.visible || !layerState.ready) {
|
if (!layerState.visible || !layerState.ready) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var useColor =
|
||||||
|
layerState.brightness ||
|
||||||
|
layerState.contrast != 1 ||
|
||||||
|
layerState.hue ||
|
||||||
|
layerState.saturation != 1;
|
||||||
|
|
||||||
|
var fragmentShader, vertexShader;
|
||||||
|
if (useColor) {
|
||||||
|
fragmentShader = ol.renderer.webgl.map.shader.ColorFragment.getInstance();
|
||||||
|
vertexShader = ol.renderer.webgl.map.shader.ColorVertex.getInstance();
|
||||||
|
} else {
|
||||||
|
fragmentShader =
|
||||||
|
ol.renderer.webgl.map.shader.DefaultFragment.getInstance();
|
||||||
|
vertexShader = ol.renderer.webgl.map.shader.DefaultVertex.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
var program = this.getProgram(fragmentShader, vertexShader);
|
||||||
|
if (program != currentProgram) {
|
||||||
|
|
||||||
|
gl.useProgram(program);
|
||||||
|
currentProgram = program;
|
||||||
|
|
||||||
|
if (useColor) {
|
||||||
|
if (goog.isNull(this.colorLocations_)) {
|
||||||
|
locations =
|
||||||
|
new ol.renderer.webgl.map.shader.Color.Locations(gl, program);
|
||||||
|
this.colorLocations_ = locations;
|
||||||
|
} else {
|
||||||
|
locations = this.colorLocations_;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (goog.isNull(this.defaultLocations_)) {
|
||||||
|
locations =
|
||||||
|
new ol.renderer.webgl.map.shader.Default.Locations(gl, program);
|
||||||
|
this.defaultLocations_ = locations;
|
||||||
|
} else {
|
||||||
|
locations = this.defaultLocations_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gl.enableVertexAttribArray(locations.a_position);
|
||||||
|
gl.vertexAttribPointer(
|
||||||
|
locations.a_position, 2, goog.webgl.FLOAT, false, 16, 0);
|
||||||
|
gl.enableVertexAttribArray(locations.a_texCoord);
|
||||||
|
gl.vertexAttribPointer(
|
||||||
|
locations.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8);
|
||||||
|
gl.uniform1i(locations.u_texture, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
var layerRenderer = this.getLayerRenderer(layer);
|
var layerRenderer = this.getLayerRenderer(layer);
|
||||||
gl.uniformMatrix4fv(
|
gl.uniformMatrix4fv(
|
||||||
this.locations_.u_texCoordMatrix, false,
|
locations.u_texCoordMatrix, false, layerRenderer.getTexCoordMatrix());
|
||||||
layerRenderer.getTexCoordMatrix());
|
gl.uniformMatrix4fv(locations.u_projectionMatrix, false,
|
||||||
gl.uniformMatrix4fv(
|
|
||||||
this.locations_.u_projectionMatrix, false,
|
|
||||||
layerRenderer.getProjectionMatrix());
|
layerRenderer.getProjectionMatrix());
|
||||||
gl.uniformMatrix4fv(
|
if (useColor) {
|
||||||
this.locations_.u_colorMatrix, false, layerRenderer.getColorMatrix());
|
gl.uniformMatrix4fv(locations.u_colorMatrix, false,
|
||||||
gl.uniform1f(this.locations_.u_opacity, layer.getOpacity());
|
layerRenderer.getColorMatrix());
|
||||||
|
}
|
||||||
|
gl.uniform1f(locations.u_opacity, layer.getOpacity());
|
||||||
gl.bindTexture(goog.webgl.TEXTURE_2D, layerRenderer.getTexture());
|
gl.bindTexture(goog.webgl.TEXTURE_2D, layerRenderer.getTexture());
|
||||||
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4);
|
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4);
|
||||||
|
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
if (!this.renderedVisible_) {
|
if (!this.renderedVisible_) {
|
||||||
|
|||||||
@@ -1,105 +0,0 @@
|
|||||||
// This file is automatically generated, do not edit
|
|
||||||
goog.provide('ol.renderer.webgl.map.shader');
|
|
||||||
goog.require('ol.webgl.shader');
|
|
||||||
/**
|
|
||||||
* @constructor
|
|
||||||
* @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.shader.Fragment);
|
|
||||||
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.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.shader.Vertex);
|
|
||||||
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';
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
//! NAMESPACE=ol.renderer.webgl.tilelayer
|
//! NAMESPACE=ol.renderer.webgl.tilelayer.shader
|
||||||
|
//! CLASS=ol.renderer.webgl.tilelayer.shader.
|
||||||
|
|
||||||
|
|
||||||
//! COMMON
|
//! COMMON
|
||||||
|
|||||||
@@ -46,10 +46,7 @@ ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {{a_position: number,
|
* @type {ol.renderer.webgl.tilelayer.shader.Locations}
|
||||||
* a_texCoord: number,
|
|
||||||
* u_tileOffset: WebGLUniformLocation,
|
|
||||||
* u_texture: WebGLUniformLocation}|null}
|
|
||||||
*/
|
*/
|
||||||
this.locations_ = null;
|
this.locations_ = null;
|
||||||
|
|
||||||
@@ -175,16 +172,8 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
|
|||||||
this.fragmentShader_, this.vertexShader_);
|
this.fragmentShader_, this.vertexShader_);
|
||||||
gl.useProgram(program);
|
gl.useProgram(program);
|
||||||
if (goog.isNull(this.locations_)) {
|
if (goog.isNull(this.locations_)) {
|
||||||
this.locations_ = {
|
this.locations_ =
|
||||||
a_position: gl.getAttribLocation(
|
new ol.renderer.webgl.tilelayer.shader.Locations(gl, program);
|
||||||
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)
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mapRenderer.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_);
|
mapRenderer.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_);
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment);
|
|||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @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';
|
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';
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @type {string}
|
||||||
@@ -40,7 +40,7 @@ goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex);
|
|||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @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';
|
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';
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @type {string}
|
||||||
@@ -55,33 +55,28 @@ ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE = goog.DEBUG ?
|
|||||||
ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE;
|
ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE;
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @param {WebGLRenderingContext} gl GL.
|
||||||
|
* @param {WebGLProgram} program Program.
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.tilelayer.shader.uniform = function() {};
|
ol.renderer.webgl.tilelayer.shader.Locations = function(gl, program) {
|
||||||
/**
|
/**
|
||||||
* @const
|
* @type {WebGLUniformLocation}
|
||||||
* @type {string}
|
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.tilelayer.shader.uniform.u_tileOffset =
|
this.u_tileOffset = gl.getUniformLocation(
|
||||||
goog.DEBUG ? 'u_tileOffset' : 'b';
|
program, goog.DEBUG ? 'u_tileOffset' : 'b');
|
||||||
/**
|
/**
|
||||||
* @const
|
* @type {WebGLUniformLocation}
|
||||||
* @type {string}
|
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.tilelayer.shader.uniform.u_texture =
|
this.u_texture = gl.getUniformLocation(
|
||||||
goog.DEBUG ? 'u_texture' : 'c';
|
program, goog.DEBUG ? 'u_texture' : 'c');
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.tilelayer.shader.attribute = function() {};
|
this.a_position = gl.getAttribLocation(
|
||||||
/**
|
program, goog.DEBUG ? 'a_position' : 'c');
|
||||||
* @const
|
/**
|
||||||
* @type {string}
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.tilelayer.shader.attribute.a_position =
|
this.a_texCoord = gl.getAttribLocation(
|
||||||
goog.DEBUG ? 'a_position' : 'c';
|
program, goog.DEBUG ? 'a_texCoord' : 'd');
|
||||||
/**
|
};
|
||||||
* @const
|
|
||||||
* @type {string}
|
|
||||||
*/
|
|
||||||
ol.renderer.webgl.tilelayer.shader.attribute.a_texCoord =
|
|
||||||
goog.DEBUG ? 'a_texCoord' : 'd';
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// This file is automatically generated, do not edit
|
// This file is automatically generated, do not edit
|
||||||
goog.provide('{{namespace}}.shader');
|
goog.provide('{{namespace}}');
|
||||||
|
|
||||||
goog.require('ol.webgl.shader');
|
goog.require('ol.webgl.shader');
|
||||||
|
|
||||||
@@ -9,34 +9,34 @@ goog.require('ol.webgl.shader');
|
|||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.webgl.shader.Fragment}
|
* @extends {ol.webgl.shader.Fragment}
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.Fragment = function() {
|
{{className}}Fragment = function() {
|
||||||
goog.base(this, {{namespace}}.shader.Fragment.SOURCE);
|
goog.base(this, {{className}}Fragment.SOURCE);
|
||||||
};
|
};
|
||||||
goog.inherits({{namespace}}.shader.Fragment, ol.webgl.shader.Fragment);
|
goog.inherits({{className}}Fragment, ol.webgl.shader.Fragment);
|
||||||
goog.addSingletonGetter({{namespace}}.shader.Fragment);
|
goog.addSingletonGetter({{className}}Fragment);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\n{{getOriginalFragmentSource}}';
|
{{className}}Fragment.DEBUG_SOURCE = 'precision mediump float;\n{{getOriginalFragmentSource}}';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;{{getFragmentSource}}';
|
{{className}}Fragment.OPTIMIZED_SOURCE = 'precision mediump float;{{getFragmentSource}}';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.Fragment.SOURCE = goog.DEBUG ?
|
{{className}}Fragment.SOURCE = goog.DEBUG ?
|
||||||
{{namespace}}.shader.Fragment.DEBUG_SOURCE :
|
{{className}}Fragment.DEBUG_SOURCE :
|
||||||
{{namespace}}.shader.Fragment.OPTIMIZED_SOURCE;
|
{{className}}Fragment.OPTIMIZED_SOURCE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -44,63 +44,57 @@ goog.addSingletonGetter({{namespace}}.shader.Fragment);
|
|||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.webgl.shader.Vertex}
|
* @extends {ol.webgl.shader.Vertex}
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.Vertex = function() {
|
{{className}}Vertex = function() {
|
||||||
goog.base(this, {{namespace}}.shader.Vertex.SOURCE);
|
goog.base(this, {{className}}Vertex.SOURCE);
|
||||||
};
|
};
|
||||||
goog.inherits({{namespace}}.shader.Vertex, ol.webgl.shader.Vertex);
|
goog.inherits({{className}}Vertex, ol.webgl.shader.Vertex);
|
||||||
goog.addSingletonGetter({{namespace}}.shader.Vertex);
|
goog.addSingletonGetter({{className}}Vertex);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.Vertex.DEBUG_SOURCE = '{{getOriginalVertexSource}}';
|
{{className}}Vertex.DEBUG_SOURCE = '{{getOriginalVertexSource}}';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.Vertex.OPTIMIZED_SOURCE = '{{getVertexSource}}';
|
{{className}}Vertex.OPTIMIZED_SOURCE = '{{getVertexSource}}';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.Vertex.SOURCE = goog.DEBUG ?
|
{{className}}Vertex.SOURCE = goog.DEBUG ?
|
||||||
{{namespace}}.shader.Vertex.DEBUG_SOURCE :
|
{{className}}Vertex.DEBUG_SOURCE :
|
||||||
{{namespace}}.shader.Vertex.OPTIMIZED_SOURCE;
|
{{className}}Vertex.OPTIMIZED_SOURCE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
|
* @param {WebGLRenderingContext} gl GL.
|
||||||
|
* @param {WebGLProgram} program Program.
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.uniform = function() {};
|
{{namespace}}.Locations = function(gl, program) {
|
||||||
{{#getUniforms}}
|
{{#getUniforms}}
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* @type {WebGLUniformLocation}
|
||||||
* @const
|
|
||||||
* @type {string}
|
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.uniform.{{originalName}} =
|
this.{{originalName}} = gl.getUniformLocation(
|
||||||
goog.DEBUG ? '{{originalName}}' : '{{shortName}}';
|
program, goog.DEBUG ? '{{originalName}}' : '{{shortName}}');
|
||||||
{{/getUniforms}}
|
{{/getUniforms}}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
{{namespace}}.shader.attribute = function() {};
|
|
||||||
{{#getAttributes}}
|
{{#getAttributes}}
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* @type {number}
|
||||||
* @const
|
|
||||||
* @type {string}
|
|
||||||
*/
|
*/
|
||||||
{{namespace}}.shader.attribute.{{originalName}} =
|
this.{{originalName}} = gl.getAttribLocation(
|
||||||
goog.DEBUG ? '{{originalName}}' : '{{shortName}}';
|
program, goog.DEBUG ? '{{originalName}}' : '{{shortName}}');
|
||||||
{{/getAttributes}}
|
{{/getAttributes}}
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user