diff --git a/packages/core/src/filters/FilterSystem.js b/packages/core/src/filters/FilterSystem.js index 210a011..6f01b1e 100644 --- a/packages/core/src/filters/FilterSystem.js +++ b/packages/core/src/filters/FilterSystem.js @@ -423,16 +423,27 @@ /** * Gets extra render texture to use inside current filter + * To be compliant with older filters, you can use params in any order * - * @param {number} resolution resolution of the renderTexture + * @param {PIXI.RenderTexture} [input] renderTexture from which size and resolution will be copied + * @param {number} [resolution] override resolution of the renderTexture * @returns {PIXI.RenderTexture} */ - getFilterTexture(resolution) + getFilterTexture(input, resolution) { - const rt = this.activeState.renderTexture; - const filterTexture = this.texturePool.getOptimalTexture(rt.width, rt.height, resolution || rt.resolution); + if (typeof input === 'number') + { + const swap = input; - filterTexture.filterFrame = rt.filterFrame; + input = resolution; + resolution = swap; + } + + input = input || this.activeState.renderTexture; + + const filterTexture = this.texturePool.getOptimalTexture(input.width, input.height, resolution || input.resolution); + + filterTexture.filterFrame = input.filterFrame; return filterTexture; } diff --git a/packages/core/src/filters/FilterSystem.js b/packages/core/src/filters/FilterSystem.js index 210a011..6f01b1e 100644 --- a/packages/core/src/filters/FilterSystem.js +++ b/packages/core/src/filters/FilterSystem.js @@ -423,16 +423,27 @@ /** * Gets extra render texture to use inside current filter + * To be compliant with older filters, you can use params in any order * - * @param {number} resolution resolution of the renderTexture + * @param {PIXI.RenderTexture} [input] renderTexture from which size and resolution will be copied + * @param {number} [resolution] override resolution of the renderTexture * @returns {PIXI.RenderTexture} */ - getFilterTexture(resolution) + getFilterTexture(input, resolution) { - const rt = this.activeState.renderTexture; - const filterTexture = this.texturePool.getOptimalTexture(rt.width, rt.height, resolution || rt.resolution); + if (typeof input === 'number') + { + const swap = input; - filterTexture.filterFrame = rt.filterFrame; + input = resolution; + resolution = swap; + } + + input = input || this.activeState.renderTexture; + + const filterTexture = this.texturePool.getOptimalTexture(input.width, input.height, resolution || input.resolution); + + filterTexture.filterFrame = input.filterFrame; return filterTexture; } diff --git a/packages/core/src/renderTexture/RenderTexture.js b/packages/core/src/renderTexture/RenderTexture.js index ecf5080..245f96a 100644 --- a/packages/core/src/renderTexture/RenderTexture.js +++ b/packages/core/src/renderTexture/RenderTexture.js @@ -91,8 +91,10 @@ this.valid = true; /** - * FilterSystem temporary storage - * @protected + * Stores `sourceFrame` when this texture is inside current filter stack. + * You can read it inside filters. + * + * @readonly * @member {PIXI.Rectangle} */ this.filterFrame = null; diff --git a/packages/core/src/filters/FilterSystem.js b/packages/core/src/filters/FilterSystem.js index 210a011..6f01b1e 100644 --- a/packages/core/src/filters/FilterSystem.js +++ b/packages/core/src/filters/FilterSystem.js @@ -423,16 +423,27 @@ /** * Gets extra render texture to use inside current filter + * To be compliant with older filters, you can use params in any order * - * @param {number} resolution resolution of the renderTexture + * @param {PIXI.RenderTexture} [input] renderTexture from which size and resolution will be copied + * @param {number} [resolution] override resolution of the renderTexture * @returns {PIXI.RenderTexture} */ - getFilterTexture(resolution) + getFilterTexture(input, resolution) { - const rt = this.activeState.renderTexture; - const filterTexture = this.texturePool.getOptimalTexture(rt.width, rt.height, resolution || rt.resolution); + if (typeof input === 'number') + { + const swap = input; - filterTexture.filterFrame = rt.filterFrame; + input = resolution; + resolution = swap; + } + + input = input || this.activeState.renderTexture; + + const filterTexture = this.texturePool.getOptimalTexture(input.width, input.height, resolution || input.resolution); + + filterTexture.filterFrame = input.filterFrame; return filterTexture; } diff --git a/packages/core/src/renderTexture/RenderTexture.js b/packages/core/src/renderTexture/RenderTexture.js index ecf5080..245f96a 100644 --- a/packages/core/src/renderTexture/RenderTexture.js +++ b/packages/core/src/renderTexture/RenderTexture.js @@ -91,8 +91,10 @@ this.valid = true; /** - * FilterSystem temporary storage - * @protected + * Stores `sourceFrame` when this texture is inside current filter stack. + * You can read it inside filters. + * + * @readonly * @member {PIXI.Rectangle} */ this.filterFrame = null; diff --git a/packages/core/src/renderTexture/RenderTexturePool.js b/packages/core/src/renderTexture/RenderTexturePool.js index ce06ae1..436f5db 100644 --- a/packages/core/src/renderTexture/RenderTexturePool.js +++ b/packages/core/src/renderTexture/RenderTexturePool.js @@ -8,6 +8,9 @@ * Texture pool, used by FilterSystem and plugins * Stores collection of temporary pow2 or screen-sized renderTextures * + * If you use custom RenderTexturePool for your filters, you can use methods + * `getFilterTexture` and `returnFilterTexture` same as in + * * @class * @memberof PIXI */ @@ -95,18 +98,20 @@ } /** - * Gets extra texture of the same size as current renderTexture + * Gets extra texture of the same size as input renderTexture * - * @param {number} [resolution] resolution, by default its the same as in current renderTexture + * `getFilterTexture(input, 0.5)` or `getFilterTexture(0.5, input)` + * + * @param {PIXI.RenderTexture} input renderTexture from which size and resolution will be copied + * @param {number} [resolution] override resolution of the renderTexture + * It overrides, it does not multiply * @returns {PIXI.RenderTexture} */ - getFilterTexture(resolution) + getFilterTexture(input, resolution) { - const rt = this.renderer.renderTexture.current; + const filterTexture = this.getOptimalTexture(input.width, input.height, resolution || input.resolution); - const filterTexture = this.getOptimalTexture(rt.width, rt.height, resolution || rt.baseTexture.resolution); - - filterTexture.filterFrame = rt.filterFrame; + filterTexture.filterFrame = input.filterFrame; return filterTexture; } @@ -163,7 +168,7 @@ * If screen size was changed, drops all screen-sized textures, * sets new screen size, sets `enableFullScreen` to true * - * Size is measured in pixels, `renderer.view` can be passed here. + * Size is measured in pixels, `renderer.view` can be passed here, not `renderer.screen` * * @param {PIXI.ISize} size - Initial size of screen */ diff --git a/packages/core/src/filters/FilterSystem.js b/packages/core/src/filters/FilterSystem.js index 210a011..6f01b1e 100644 --- a/packages/core/src/filters/FilterSystem.js +++ b/packages/core/src/filters/FilterSystem.js @@ -423,16 +423,27 @@ /** * Gets extra render texture to use inside current filter + * To be compliant with older filters, you can use params in any order * - * @param {number} resolution resolution of the renderTexture + * @param {PIXI.RenderTexture} [input] renderTexture from which size and resolution will be copied + * @param {number} [resolution] override resolution of the renderTexture * @returns {PIXI.RenderTexture} */ - getFilterTexture(resolution) + getFilterTexture(input, resolution) { - const rt = this.activeState.renderTexture; - const filterTexture = this.texturePool.getOptimalTexture(rt.width, rt.height, resolution || rt.resolution); + if (typeof input === 'number') + { + const swap = input; - filterTexture.filterFrame = rt.filterFrame; + input = resolution; + resolution = swap; + } + + input = input || this.activeState.renderTexture; + + const filterTexture = this.texturePool.getOptimalTexture(input.width, input.height, resolution || input.resolution); + + filterTexture.filterFrame = input.filterFrame; return filterTexture; } diff --git a/packages/core/src/renderTexture/RenderTexture.js b/packages/core/src/renderTexture/RenderTexture.js index ecf5080..245f96a 100644 --- a/packages/core/src/renderTexture/RenderTexture.js +++ b/packages/core/src/renderTexture/RenderTexture.js @@ -91,8 +91,10 @@ this.valid = true; /** - * FilterSystem temporary storage - * @protected + * Stores `sourceFrame` when this texture is inside current filter stack. + * You can read it inside filters. + * + * @readonly * @member {PIXI.Rectangle} */ this.filterFrame = null; diff --git a/packages/core/src/renderTexture/RenderTexturePool.js b/packages/core/src/renderTexture/RenderTexturePool.js index ce06ae1..436f5db 100644 --- a/packages/core/src/renderTexture/RenderTexturePool.js +++ b/packages/core/src/renderTexture/RenderTexturePool.js @@ -8,6 +8,9 @@ * Texture pool, used by FilterSystem and plugins * Stores collection of temporary pow2 or screen-sized renderTextures * + * If you use custom RenderTexturePool for your filters, you can use methods + * `getFilterTexture` and `returnFilterTexture` same as in + * * @class * @memberof PIXI */ @@ -95,18 +98,20 @@ } /** - * Gets extra texture of the same size as current renderTexture + * Gets extra texture of the same size as input renderTexture * - * @param {number} [resolution] resolution, by default its the same as in current renderTexture + * `getFilterTexture(input, 0.5)` or `getFilterTexture(0.5, input)` + * + * @param {PIXI.RenderTexture} input renderTexture from which size and resolution will be copied + * @param {number} [resolution] override resolution of the renderTexture + * It overrides, it does not multiply * @returns {PIXI.RenderTexture} */ - getFilterTexture(resolution) + getFilterTexture(input, resolution) { - const rt = this.renderer.renderTexture.current; + const filterTexture = this.getOptimalTexture(input.width, input.height, resolution || input.resolution); - const filterTexture = this.getOptimalTexture(rt.width, rt.height, resolution || rt.baseTexture.resolution); - - filterTexture.filterFrame = rt.filterFrame; + filterTexture.filterFrame = input.filterFrame; return filterTexture; } @@ -163,7 +168,7 @@ * If screen size was changed, drops all screen-sized textures, * sets new screen size, sets `enableFullScreen` to true * - * Size is measured in pixels, `renderer.view` can be passed here. + * Size is measured in pixels, `renderer.view` can be passed here, not `renderer.screen` * * @param {PIXI.ISize} size - Initial size of screen */ diff --git a/packages/core/src/textures/Texture.js b/packages/core/src/textures/Texture.js index 3691cb3..6e9f4d3 100644 --- a/packages/core/src/textures/Texture.js +++ b/packages/core/src/textures/Texture.js @@ -496,6 +496,16 @@ } /** + * Returns resolution of baseTexture + * + * @readonly + */ + get resolution() + { + return this.baseTexture.resolution; + } + + /** * The frame specifies the region of the base texture that this texture uses. * Please call `updateUvs()` after you change coordinates of `frame` manually. *