Merge pull request #111 from twpayne/webgl-renderer-clean-ups

WebGL renderer clean ups
This commit is contained in:
Tom Payne
2013-01-14 03:33:04 -08:00
3 changed files with 32 additions and 53 deletions

View File

@@ -1,7 +1,5 @@
// FIXME clear textureCache
// FIXME defer texture loads until after render when animating
// FIXME generational tile texture garbage collector newFrame/get
// FIXME defer cleanup until post-render
// FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE)
goog.provide('ol.renderer.webgl.Map');
@@ -119,6 +117,12 @@ ol.renderer.webgl.Map = function(container, map) {
this.canvas_.className = 'ol-unselectable';
goog.dom.insertChildAt(container, this.canvas_, 0);
/**
* @private
* @type {boolean}
*/
this.renderedVisible_ = true;
/**
* @private
* @type {ol.Size}
@@ -267,7 +271,6 @@ ol.renderer.webgl.Map.prototype.canRotate = goog.functions.TRUE;
* @inheritDoc
*/
ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) {
var gl = this.getGL();
if (layer instanceof ol.layer.TileLayer) {
return new ol.renderer.webgl.TileLayer(this, layer);
} else {
@@ -495,9 +498,10 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
var gl = this.getGL();
if (goog.isNull(frameState)) {
gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, null);
gl.clearColor(0, 0, 0, 0);
gl.clear(goog.webgl.COLOR_BUFFER_BIT);
if (this.renderedVisible_) {
goog.style.showElement(this.canvas_, false);
this.renderedVisible_ = false;
}
return false;
}
@@ -575,6 +579,11 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4);
}, this);
if (!this.renderedVisible_) {
goog.style.showElement(this.canvas_, true);
this.renderedVisible_ = true;
}
};

View File

@@ -3,12 +3,6 @@ goog.provide('ol.renderer.webgl');
goog.require('ol.webgl');
/**
* @define {boolean} Free resources immediately.
*/
ol.renderer.webgl.FREE_RESOURCES_IMMEDIATELY = false;
/**
* @return {boolean} Is supported.
*/

View File

@@ -8,7 +8,6 @@ goog.provide('ol.renderer.webgl.tilelayerrenderer.shader.Vertex');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.debug.Logger');
goog.require('goog.events.EventType');
goog.require('goog.object');
goog.require('goog.structs.PriorityQueue');
@@ -88,14 +87,6 @@ ol.renderer.webgl.TileLayer = function(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
* @type {ol.renderer.webgl.FragmentShader}
@@ -179,28 +170,14 @@ ol.renderer.webgl.TileLayer.prototype.bindFramebuffer_ =
if (!goog.isDef(this.framebufferDimension_) ||
this.framebufferDimension_ != framebufferDimension) {
if (goog.DEBUG) {
this.logger.info('re-sizing framebuffer');
}
if (ol.renderer.webgl.FREE_RESOURCES_IMMEDIATELY) {
if (goog.DEBUG) {
this.logger.info('freeing WebGL resources');
}
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 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();
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
*/
@@ -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
*/
@@ -292,7 +268,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
var view2DState = frameState.view2DState;
var center = view2DState.center;
var tileLayer = this.getLayer();
var tileLayer = this.getTileLayer();
var tileSource = tileLayer.getTileSource();
var tileGrid = tileSource.getTileGrid();
var z = tileGrid.getZForResolution(view2DState.resolution);