Merge pull request #111 from twpayne/webgl-renderer-clean-ups
WebGL renderer clean ups
This commit is contained in:
@@ -1,7 +1,5 @@
|
|||||||
// FIXME clear textureCache
|
// FIXME clear textureCache
|
||||||
// FIXME defer texture loads until after render when animating
|
|
||||||
// FIXME generational tile texture garbage collector newFrame/get
|
// FIXME generational tile texture garbage collector newFrame/get
|
||||||
// FIXME defer cleanup until post-render
|
|
||||||
// FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE)
|
// FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE)
|
||||||
|
|
||||||
goog.provide('ol.renderer.webgl.Map');
|
goog.provide('ol.renderer.webgl.Map');
|
||||||
@@ -119,6 +117,12 @@ ol.renderer.webgl.Map = function(container, map) {
|
|||||||
this.canvas_.className = 'ol-unselectable';
|
this.canvas_.className = 'ol-unselectable';
|
||||||
goog.dom.insertChildAt(container, this.canvas_, 0);
|
goog.dom.insertChildAt(container, this.canvas_, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.renderedVisible_ = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {ol.Size}
|
* @type {ol.Size}
|
||||||
@@ -267,7 +271,6 @@ ol.renderer.webgl.Map.prototype.canRotate = goog.functions.TRUE;
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) {
|
ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) {
|
||||||
var gl = this.getGL();
|
|
||||||
if (layer instanceof ol.layer.TileLayer) {
|
if (layer instanceof ol.layer.TileLayer) {
|
||||||
return new ol.renderer.webgl.TileLayer(this, layer);
|
return new ol.renderer.webgl.TileLayer(this, layer);
|
||||||
} else {
|
} else {
|
||||||
@@ -495,9 +498,10 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
|
|||||||
var gl = this.getGL();
|
var gl = this.getGL();
|
||||||
|
|
||||||
if (goog.isNull(frameState)) {
|
if (goog.isNull(frameState)) {
|
||||||
gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, null);
|
if (this.renderedVisible_) {
|
||||||
gl.clearColor(0, 0, 0, 0);
|
goog.style.showElement(this.canvas_, false);
|
||||||
gl.clear(goog.webgl.COLOR_BUFFER_BIT);
|
this.renderedVisible_ = false;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,6 +579,11 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
|
|||||||
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4);
|
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4);
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
|
if (!this.renderedVisible_) {
|
||||||
|
goog.style.showElement(this.canvas_, true);
|
||||||
|
this.renderedVisible_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,6 @@ goog.provide('ol.renderer.webgl');
|
|||||||
goog.require('ol.webgl');
|
goog.require('ol.webgl');
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @define {boolean} Free resources immediately.
|
|
||||||
*/
|
|
||||||
ol.renderer.webgl.FREE_RESOURCES_IMMEDIATELY = false;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {boolean} Is supported.
|
* @return {boolean} Is supported.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ goog.provide('ol.renderer.webgl.tilelayerrenderer.shader.Vertex');
|
|||||||
|
|
||||||
goog.require('goog.array');
|
goog.require('goog.array');
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.debug.Logger');
|
|
||||||
goog.require('goog.events.EventType');
|
goog.require('goog.events.EventType');
|
||||||
goog.require('goog.object');
|
goog.require('goog.object');
|
||||||
goog.require('goog.structs.PriorityQueue');
|
goog.require('goog.structs.PriorityQueue');
|
||||||
@@ -88,14 +87,6 @@ ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {
|
|||||||
|
|
||||||
goog.base(this, mapRenderer, tileLayer);
|
goog.base(this, mapRenderer, tileLayer);
|
||||||
|
|
||||||
if (goog.DEBUG) {
|
|
||||||
/**
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
this.logger = goog.debug.Logger.getLogger(
|
|
||||||
'ol.renderer.webgl.tilelayerrenderer.' + goog.getUid(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {ol.renderer.webgl.FragmentShader}
|
* @type {ol.renderer.webgl.FragmentShader}
|
||||||
@@ -179,28 +170,14 @@ ol.renderer.webgl.TileLayer.prototype.bindFramebuffer_ =
|
|||||||
if (!goog.isDef(this.framebufferDimension_) ||
|
if (!goog.isDef(this.framebufferDimension_) ||
|
||||||
this.framebufferDimension_ != framebufferDimension) {
|
this.framebufferDimension_ != framebufferDimension) {
|
||||||
|
|
||||||
if (goog.DEBUG) {
|
var map = this.getMap();
|
||||||
this.logger.info('re-sizing framebuffer');
|
frameState.postRenderFunctions.push(
|
||||||
}
|
goog.partial(function(gl, framebuffer, texture) {
|
||||||
|
if (!gl.isContextLost()) {
|
||||||
if (ol.renderer.webgl.FREE_RESOURCES_IMMEDIATELY) {
|
gl.deleteFramebuffer(framebuffer);
|
||||||
if (goog.DEBUG) {
|
gl.deleteTexture(texture);
|
||||||
this.logger.info('freeing WebGL resources');
|
}
|
||||||
}
|
}, gl, this.framebuffer_, this.texture_));
|
||||||
if (!gl.isContextLost()) {
|
|
||||||
gl.deleteFramebuffer(this.framebuffer_);
|
|
||||||
gl.deleteTexture(this.texture_);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var map = this.getMap();
|
|
||||||
frameState.postRenderFunctions.push(
|
|
||||||
goog.partial(function(gl, framebuffer, texture) {
|
|
||||||
if (!gl.isContextLost()) {
|
|
||||||
gl.deleteFramebuffer(framebuffer);
|
|
||||||
gl.deleteTexture(texture);
|
|
||||||
}
|
|
||||||
}, gl, this.framebuffer_, this.texture_));
|
|
||||||
}
|
|
||||||
|
|
||||||
var texture = gl.createTexture();
|
var texture = gl.createTexture();
|
||||||
gl.bindTexture(goog.webgl.TEXTURE_2D, texture);
|
gl.bindTexture(goog.webgl.TEXTURE_2D, texture);
|
||||||
@@ -243,15 +220,6 @@ ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return {ol.layer.TileLayer} Layer.
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
ol.renderer.webgl.TileLayer.prototype.getLayer = function() {
|
|
||||||
return /** @type {ol.layer.TileLayer} */ (goog.base(this, 'getLayer'));
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
@@ -268,6 +236,14 @@ ol.renderer.webgl.TileLayer.prototype.getTexture = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {ol.layer.TileLayer} Tile layer.
|
||||||
|
*/
|
||||||
|
ol.renderer.webgl.TileLayer.prototype.getTileLayer = function() {
|
||||||
|
return /** @type {ol.layer.TileLayer} */ (this.getLayer());
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
@@ -292,7 +268,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
|
|||||||
var view2DState = frameState.view2DState;
|
var view2DState = frameState.view2DState;
|
||||||
var center = view2DState.center;
|
var center = view2DState.center;
|
||||||
|
|
||||||
var tileLayer = this.getLayer();
|
var tileLayer = this.getTileLayer();
|
||||||
var tileSource = tileLayer.getTileSource();
|
var tileSource = tileLayer.getTileSource();
|
||||||
var tileGrid = tileSource.getTileGrid();
|
var tileGrid = tileSource.getTileGrid();
|
||||||
var z = tileGrid.getZForResolution(view2DState.resolution);
|
var z = tileGrid.getZForResolution(view2DState.resolution);
|
||||||
|
|||||||
Reference in New Issue
Block a user