mirror of
https://github.com/openseadragon/openseadragon.git
synced 2024-11-29 00:26:10 +03:00
Add fixes for working smoothing in the webgl renderer.
This commit is contained in:
parent
ce4b16616d
commit
f03f2a5d31
@ -128,6 +128,16 @@ OpenSeadragon.DrawerBase = class DrawerBase{
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve required data formats the data must be converted to.
|
||||||
|
* This list MUST BE A VALID SUBSET OF getSupportedDataFormats()
|
||||||
|
* @abstract
|
||||||
|
* @return {string[]}
|
||||||
|
*/
|
||||||
|
getRequiredDataFormats() {
|
||||||
|
return this.getSupportedDataFormats();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve data types
|
* Retrieve data types
|
||||||
* @abstract
|
* @abstract
|
||||||
|
@ -256,22 +256,29 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
internalCache = internalCache[drawerId];
|
internalCache = internalCache[drawerId];
|
||||||
if (internalCache) {
|
if (internalCache && supportedTypes.includes(internalCache.type)) {
|
||||||
// already done
|
// already done
|
||||||
return $.Promise.resolve(this);
|
return $.Promise.resolve(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
internalCache = this[DRAWER_INTERNAL_CACHE][drawerId] = new $.SimpleCacheRecord();
|
|
||||||
const conversionPath = $.convertor.getConversionPath(this.type, supportedTypes);
|
const conversionPath = $.convertor.getConversionPath(this.type, supportedTypes);
|
||||||
if (!conversionPath) {
|
if (!conversionPath) {
|
||||||
$.console.error(`[getDataForRendering] Conversion ${this.type} ---> ${supportedTypes} cannot be done!`);
|
$.console.error(`[getDataForRendering] Conversion ${this.type} ---> ${supportedTypes} cannot be done!`);
|
||||||
return $.Promise.resolve(this);
|
return $.Promise.resolve(this);
|
||||||
}
|
}
|
||||||
internalCache.withTileReference(this._tRef);
|
const newInternalCache = new $.SimpleCacheRecord();
|
||||||
|
|
||||||
|
newInternalCache.withTileReference(this._tRef);
|
||||||
const selectedFormat = conversionPath[conversionPath.length - 1].target.value;
|
const selectedFormat = conversionPath[conversionPath.length - 1].target.value;
|
||||||
return $.convertor.convert(this._tRef, this.data, this.type, selectedFormat).then(data => {
|
return $.convertor.convert(this._tRef, this.data, this.type, selectedFormat).then(data => {
|
||||||
internalCache.setDataAs(data, selectedFormat); // synchronous, SimpleCacheRecord call
|
newInternalCache.setDataAs(data, selectedFormat); // synchronous, SimpleCacheRecord call
|
||||||
return internalCache;
|
|
||||||
|
// if existed, delete
|
||||||
|
if (internalCache) {
|
||||||
|
internalCache.destroy();
|
||||||
|
}
|
||||||
|
this[DRAWER_INTERNAL_CACHE][drawerId] = newInternalCache;
|
||||||
|
return newInternalCache;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,9 +100,9 @@
|
|||||||
this._setupCanvases();
|
this._setupCanvases();
|
||||||
this._setupRenderer();
|
this._setupRenderer();
|
||||||
|
|
||||||
this._supportedFormats = [];
|
this._supportedFormats = this._setupTextureHandlers();
|
||||||
|
this._requiredFormats = this._supportedFormats;
|
||||||
this._setupCallCount = 1;
|
this._setupCallCount = 1;
|
||||||
this._setupTextureHandlers();
|
|
||||||
|
|
||||||
this.context = this._outputContext; // API required by tests
|
this.context = this._outputContext; // API required by tests
|
||||||
}
|
}
|
||||||
@ -468,6 +468,10 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getRequiredDataFormats() {
|
||||||
|
return this._requiredFormats;
|
||||||
|
}
|
||||||
|
|
||||||
// Public API required by all Drawer implementations
|
// Public API required by all Drawer implementations
|
||||||
/**
|
/**
|
||||||
* Sets whether image smoothing is enabled or disabled
|
* Sets whether image smoothing is enabled or disabled
|
||||||
@ -476,7 +480,12 @@
|
|||||||
setImageSmoothingEnabled(enabled){
|
setImageSmoothingEnabled(enabled){
|
||||||
if( this._imageSmoothingEnabled !== enabled ){
|
if( this._imageSmoothingEnabled !== enabled ){
|
||||||
this._imageSmoothingEnabled = enabled;
|
this._imageSmoothingEnabled = enabled;
|
||||||
this._setupTextureHandlers(); // re-sets the type to enforce re-initialization
|
|
||||||
|
// Todo consider removing old type handlers if _supportedFormats had already types defined,
|
||||||
|
// and remove support for rendering old types...
|
||||||
|
const newFormats = this._setupTextureHandlers(); // re-sets the type to enforce re-initialization
|
||||||
|
this._supportedFormats.push(...newFormats);
|
||||||
|
this._requiredFormats = newFormats;
|
||||||
return this.viewer.requestInvalidate();
|
return this.viewer.requestInvalidate();
|
||||||
}
|
}
|
||||||
return $.Promise.resolve();
|
return $.Promise.resolve();
|
||||||
@ -892,8 +901,8 @@
|
|||||||
// Set the parameters so we can render any size image.
|
// Set the parameters so we can render any size image.
|
||||||
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
||||||
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
||||||
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, _this._textureFilter());
|
||||||
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, _this._textureFilter());
|
||||||
|
|
||||||
try{
|
try{
|
||||||
// This depends on gl.TEXTURE_2D being bound to the texture
|
// This depends on gl.TEXTURE_2D being bound to the texture
|
||||||
@ -919,8 +928,6 @@
|
|||||||
// Differentiate type also based on type used to upload data: we can support bidirectional conversion.
|
// Differentiate type also based on type used to upload data: we can support bidirectional conversion.
|
||||||
const c2dTexType = thisType + ":context2d",
|
const c2dTexType = thisType + ":context2d",
|
||||||
imageTexType = thisType + ":image";
|
imageTexType = thisType + ":image";
|
||||||
// Todo consider removing old type handlers if _supportedFormats had already types defined
|
|
||||||
this._supportedFormats = [c2dTexType, imageTexType];
|
|
||||||
|
|
||||||
// We should be OK uploading any of these types. The complexity is selected to be O(3n), should be
|
// We should be OK uploading any of these types. The complexity is selected to be O(3n), should be
|
||||||
// more than linear pass over pixels
|
// more than linear pass over pixels
|
||||||
@ -929,6 +936,7 @@
|
|||||||
|
|
||||||
$.convertor.learnDestroy(c2dTexType, tex2DCompatibleDestructor);
|
$.convertor.learnDestroy(c2dTexType, tex2DCompatibleDestructor);
|
||||||
$.convertor.learnDestroy(imageTexType, tex2DCompatibleDestructor);
|
$.convertor.learnDestroy(imageTexType, tex2DCompatibleDestructor);
|
||||||
|
return [c2dTexType, imageTexType];
|
||||||
}
|
}
|
||||||
|
|
||||||
// private
|
// private
|
||||||
|
@ -303,7 +303,7 @@ $.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.W
|
|||||||
// We call the event on the parent viewer window no matter what
|
// We call the event on the parent viewer window no matter what
|
||||||
const eventTarget = this.viewer.viewer || this.viewer;
|
const eventTarget = this.viewer.viewer || this.viewer;
|
||||||
// However, we must pick the correct drawer reference (navigator VS viewer)
|
// However, we must pick the correct drawer reference (navigator VS viewer)
|
||||||
const supportedFormats = this.viewer.drawer.getSupportedDataFormats();
|
const supportedFormats = this.viewer.drawer.getRequiredDataFormats();
|
||||||
const keepInternalCacheCopy = this.viewer.drawer.options.usePrivateCache;
|
const keepInternalCacheCopy = this.viewer.drawer.options.usePrivateCache;
|
||||||
const drawerId = this.viewer.drawer.getId();
|
const drawerId = this.viewer.drawer.getId();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user