Immediate rendering for all vector contexts
This commit is contained in:
@@ -20,9 +20,6 @@ goog.require('ol.vec.Mat4');
|
|||||||
* new ol.geom.Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]]));
|
* new ol.geom.Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]]));
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* Note that {@link ol.render.canvas.Immediate#drawAsync} and
|
|
||||||
* {@link ol.render.canvas.Immediate#drawFeature} cannot be used.
|
|
||||||
*
|
|
||||||
* @param {CanvasRenderingContext2D} context Canvas context.
|
* @param {CanvasRenderingContext2D} context Canvas context.
|
||||||
* @param {olx.render.ToContextOptions=} opt_options Options.
|
* @param {olx.render.ToContextOptions=} opt_options Options.
|
||||||
* @return {ol.render.canvas.Immediate} Canvas Immediate.
|
* @return {ol.render.canvas.Immediate} Canvas Immediate.
|
||||||
|
|||||||
@@ -12,13 +12,6 @@ ol.render.VectorContext = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {number} zIndex Z index.
|
|
||||||
* @param {function(ol.render.VectorContext)} callback Callback.
|
|
||||||
*/
|
|
||||||
ol.render.VectorContext.prototype.drawAsync = goog.abstractMethod;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render a geometry.
|
* Render a geometry.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
goog.provide('ol.render.webgl.Immediate');
|
goog.provide('ol.render.webgl.Immediate');
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('ol.array');
|
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.geom.GeometryType');
|
goog.require('ol.geom.GeometryType');
|
||||||
goog.require('ol.render.VectorContext');
|
goog.require('ol.render.VectorContext');
|
||||||
@@ -64,52 +63,10 @@ ol.render.webgl.Immediate = function(context, center, resolution, rotation, size
|
|||||||
*/
|
*/
|
||||||
this.imageStyle_ = null;
|
this.imageStyle_ = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {!Object.<string,
|
|
||||||
* Array.<function(ol.render.webgl.Immediate)>>}
|
|
||||||
*/
|
|
||||||
this.callbacksByZIndex_ = {};
|
|
||||||
};
|
};
|
||||||
goog.inherits(ol.render.webgl.Immediate, ol.render.VectorContext);
|
goog.inherits(ol.render.webgl.Immediate, ol.render.VectorContext);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* FIXME: empty description for jsdoc
|
|
||||||
*/
|
|
||||||
ol.render.webgl.Immediate.prototype.flush = function() {
|
|
||||||
/** @type {Array.<number>} */
|
|
||||||
var zs = Object.keys(this.callbacksByZIndex_).map(Number);
|
|
||||||
zs.sort(ol.array.numberSafeCompareFunction);
|
|
||||||
var i, ii, callbacks, j, jj;
|
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
|
||||||
callbacks = this.callbacksByZIndex_[zs[i].toString()];
|
|
||||||
for (j = 0, jj = callbacks.length; j < jj; ++j) {
|
|
||||||
callbacks[j](this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a function to be called for rendering at a given zIndex. The
|
|
||||||
* function will be called asynchronously. The callback will receive a
|
|
||||||
* reference to {@link ol.render.canvas.Immediate} context for drawing.
|
|
||||||
* @param {number} zIndex Z index.
|
|
||||||
* @param {function(ol.render.webgl.Immediate)} callback Callback.
|
|
||||||
* @api
|
|
||||||
*/
|
|
||||||
ol.render.webgl.Immediate.prototype.drawAsync = function(zIndex, callback) {
|
|
||||||
var zIndexKey = zIndex.toString();
|
|
||||||
var callbacks = this.callbacksByZIndex_[zIndexKey];
|
|
||||||
if (callbacks !== undefined) {
|
|
||||||
callbacks.push(callback);
|
|
||||||
} else {
|
|
||||||
this.callbacksByZIndex_[zIndexKey] = [callback];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the rendering style. Note that since this is an immediate rendering API,
|
* Set the rendering style. Note that since this is an immediate rendering API,
|
||||||
* any `zIndex` on the provided style will be ignored.
|
* any `zIndex` on the provided style will be ignored.
|
||||||
@@ -157,15 +114,9 @@ ol.render.webgl.Immediate.prototype.drawFeature = function(feature, style) {
|
|||||||
!ol.extent.intersects(this.extent_, geometry.getExtent())) {
|
!ol.extent.intersects(this.extent_, geometry.getExtent())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var zIndex = style.getZIndex();
|
this.setStyle(style);
|
||||||
if (zIndex === undefined) {
|
goog.asserts.assert(geometry, 'geometry must be truthy');
|
||||||
zIndex = 0;
|
this.drawGeometry(geometry);
|
||||||
}
|
|
||||||
this.drawAsync(zIndex, function(render) {
|
|
||||||
render.setStyle(style);
|
|
||||||
goog.asserts.assert(geometry, 'geometry must be truthy');
|
|
||||||
render.drawGeometry(geometry);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -245,12 +245,6 @@ ol.render.webgl.ImageReplay.prototype.getDeleteResourcesFunction = function(cont
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
ol.render.webgl.ImageReplay.prototype.drawAsync = goog.abstractMethod;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Array.<number>} flatCoordinates Flat coordinates.
|
* @param {Array.<number>} flatCoordinates Flat coordinates.
|
||||||
* @param {number} offset Offset.
|
* @param {number} offset Offset.
|
||||||
|
|||||||
@@ -288,8 +288,6 @@ ol.renderer.webgl.Map.prototype.dispatchComposeEvent_ = function(type, frameStat
|
|||||||
var composeEvent = new ol.render.Event(type, map, vectorContext,
|
var composeEvent = new ol.render.Event(type, map, vectorContext,
|
||||||
frameState, null, context);
|
frameState, null, context);
|
||||||
map.dispatchEvent(composeEvent);
|
map.dispatchEvent(composeEvent);
|
||||||
|
|
||||||
vectorContext.flush();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user