Deal with null images

This commit is contained in:
Éric Lemoine
2013-02-17 23:07:58 +01:00
parent be6c1a1a27
commit d713c9b8ed
3 changed files with 36 additions and 31 deletions
@@ -79,15 +79,16 @@ ol.renderer.canvas.ImageLayer.prototype.renderFrame =
var hints = frameState.viewHints; var hints = frameState.viewHints;
if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.PANNING]) { if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.PANNING]) {
image = imageSource.getImage( image = imageSource.getImage(frameState.extent, viewResolution);
frameState.extent, viewResolution); if (!goog.isNull(image)) {
var imageState = image.getState(); var imageState = image.getState();
if (imageState == ol.ImageState.IDLE) { if (imageState == ol.ImageState.IDLE) {
goog.events.listenOnce(image, goog.events.EventType.CHANGE, goog.events.listenOnce(image, goog.events.EventType.CHANGE,
this.handleImageChange, false, this); this.handleImageChange, false, this);
image.load(); image.load();
} else if (imageState == ol.ImageState.LOADED) { } else if (imageState == ol.ImageState.LOADED) {
this.image_ = image; this.image_ = image;
}
} }
} }
+9 -7
View File
@@ -68,13 +68,15 @@ ol.renderer.dom.ImageLayer.prototype.renderFrame =
if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.PANNING]) { if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.PANNING]) {
var image_ = imageSource.getImage(frameState.extent, viewResolution); var image_ = imageSource.getImage(frameState.extent, viewResolution);
var imageState = image_.getState(); if (!goog.isNull(image_)) {
if (imageState == ol.ImageState.IDLE) { var imageState = image_.getState();
goog.events.listenOnce(image_, goog.events.EventType.CHANGE, if (imageState == ol.ImageState.IDLE) {
this.handleImageChange, false, this); goog.events.listenOnce(image_, goog.events.EventType.CHANGE,
image_.load(); this.handleImageChange, false, this);
} else if (imageState == ol.ImageState.LOADED) { image_.load();
image = image_; } else if (imageState == ol.ImageState.LOADED) {
image = image_;
}
} }
} }
@@ -161,21 +161,23 @@ ol.renderer.webgl.ImageLayer.prototype.renderFrame =
if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.PANNING]) { if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.PANNING]) {
var image_ = imageSource.getImage(frameState.extent, viewResolution); var image_ = imageSource.getImage(frameState.extent, viewResolution);
var imageState = image_.getState(); if (!goog.isNull(image_)) {
if (imageState == ol.ImageState.IDLE) { var imageState = image_.getState();
goog.events.listenOnce(image_, goog.events.EventType.CHANGE, if (imageState == ol.ImageState.IDLE) {
this.handleImageChange, false, this); goog.events.listenOnce(image_, goog.events.EventType.CHANGE,
image_.load(); this.handleImageChange, false, this);
} else if (imageState == ol.ImageState.LOADED) { image_.load();
image = image_; } else if (imageState == ol.ImageState.LOADED) {
texture = this.createTexture_(image_); image = image_;
if (!goog.isNull(this.texture_)) { texture = this.createTexture_(image_);
frameState.postRenderFunctions.push( if (!goog.isNull(this.texture_)) {
goog.partial(function(gl, texture) { frameState.postRenderFunctions.push(
if (!gl.isContextLost()) { goog.partial(function(gl, texture) {
gl.deleteTexture(texture); if (!gl.isContextLost()) {
} gl.deleteTexture(texture);
}, gl, this.texture_)); }
}, gl, this.texture_));
}
} }
} }
} }