diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 13eb08d..cc03236 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -18,7 +18,7 @@ * * @static * @param {HTMLCanvasElement|OffscreenCanvas} source - The source object - * @return {boolean} `true` if + * @return {boolean} `true` if source is HTMLCanvasElement or OffscreenCanvas */ static test(source) { diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 13eb08d..cc03236 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -18,7 +18,7 @@ * * @static * @param {HTMLCanvasElement|OffscreenCanvas} source - The source object - * @return {boolean} `true` if + * @return {boolean} `true` if source is HTMLCanvasElement or OffscreenCanvas */ static test(source) { diff --git a/packages/core/src/textures/resources/ImageBitmapResource.js b/packages/core/src/textures/resources/ImageBitmapResource.js new file mode 100644 index 0000000..6c91799 --- /dev/null +++ b/packages/core/src/textures/resources/ImageBitmapResource.js @@ -0,0 +1,23 @@ +import BaseImageResource from './BaseImageResource'; + +/** + * Resource type for ImageBitmap. + * @class + * @extends PIXI.resources.BaseImageResource + * @memberof PIXI.resources + * @param {ImageBitmap} source - Image element to use + */ +export default class ImageBitmapResource extends BaseImageResource +{ + /** + * Used to auto-detect the type of resource. + * + * @static + * @param {ImageBitmap} source - The source object + * @return {boolean} `true` if source is an ImageBitmap + */ + static test(source) + { + return !!window.createImageBitmap && source instanceof ImageBitmap; + } +} diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 13eb08d..cc03236 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -18,7 +18,7 @@ * * @static * @param {HTMLCanvasElement|OffscreenCanvas} source - The source object - * @return {boolean} `true` if + * @return {boolean} `true` if source is HTMLCanvasElement or OffscreenCanvas */ static test(source) { diff --git a/packages/core/src/textures/resources/ImageBitmapResource.js b/packages/core/src/textures/resources/ImageBitmapResource.js new file mode 100644 index 0000000..6c91799 --- /dev/null +++ b/packages/core/src/textures/resources/ImageBitmapResource.js @@ -0,0 +1,23 @@ +import BaseImageResource from './BaseImageResource'; + +/** + * Resource type for ImageBitmap. + * @class + * @extends PIXI.resources.BaseImageResource + * @memberof PIXI.resources + * @param {ImageBitmap} source - Image element to use + */ +export default class ImageBitmapResource extends BaseImageResource +{ + /** + * Used to auto-detect the type of resource. + * + * @static + * @param {ImageBitmap} source - The source object + * @return {boolean} `true` if source is an ImageBitmap + */ + static test(source) + { + return !!window.createImageBitmap && source instanceof ImageBitmap; + } +} diff --git a/packages/core/src/textures/resources/index.js b/packages/core/src/textures/resources/index.js index b847ba1..491085b 100644 --- a/packages/core/src/textures/resources/index.js +++ b/packages/core/src/textures/resources/index.js @@ -6,6 +6,7 @@ import ImageResource from './ImageResource'; import SVGResource from './SVGResource'; import VideoResource from './VideoResource'; +import ImageBitmapResource from './ImageBitmapResource'; /** * Collection of base resource types supported by PixiJS. @@ -23,6 +24,7 @@ INSTALLED.push( ImageResource, + ImageBitmapResource, CanvasResource, VideoResource, SVGResource, @@ -39,5 +41,6 @@ CanvasResource, CubeResource, ImageResource, + ImageBitmapResource, SVGResource, VideoResource }; diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 13eb08d..cc03236 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -18,7 +18,7 @@ * * @static * @param {HTMLCanvasElement|OffscreenCanvas} source - The source object - * @return {boolean} `true` if + * @return {boolean} `true` if source is HTMLCanvasElement or OffscreenCanvas */ static test(source) { diff --git a/packages/core/src/textures/resources/ImageBitmapResource.js b/packages/core/src/textures/resources/ImageBitmapResource.js new file mode 100644 index 0000000..6c91799 --- /dev/null +++ b/packages/core/src/textures/resources/ImageBitmapResource.js @@ -0,0 +1,23 @@ +import BaseImageResource from './BaseImageResource'; + +/** + * Resource type for ImageBitmap. + * @class + * @extends PIXI.resources.BaseImageResource + * @memberof PIXI.resources + * @param {ImageBitmap} source - Image element to use + */ +export default class ImageBitmapResource extends BaseImageResource +{ + /** + * Used to auto-detect the type of resource. + * + * @static + * @param {ImageBitmap} source - The source object + * @return {boolean} `true` if source is an ImageBitmap + */ + static test(source) + { + return !!window.createImageBitmap && source instanceof ImageBitmap; + } +} diff --git a/packages/core/src/textures/resources/index.js b/packages/core/src/textures/resources/index.js index b847ba1..491085b 100644 --- a/packages/core/src/textures/resources/index.js +++ b/packages/core/src/textures/resources/index.js @@ -6,6 +6,7 @@ import ImageResource from './ImageResource'; import SVGResource from './SVGResource'; import VideoResource from './VideoResource'; +import ImageBitmapResource from './ImageBitmapResource'; /** * Collection of base resource types supported by PixiJS. @@ -23,6 +24,7 @@ INSTALLED.push( ImageResource, + ImageBitmapResource, CanvasResource, VideoResource, SVGResource, @@ -39,5 +41,6 @@ CanvasResource, CubeResource, ImageResource, + ImageBitmapResource, SVGResource, VideoResource }; diff --git a/packages/core/test/ImageBitmapResource.js b/packages/core/test/ImageBitmapResource.js new file mode 100644 index 0000000..f986f2c --- /dev/null +++ b/packages/core/test/ImageBitmapResource.js @@ -0,0 +1,70 @@ +const { resources } = require('../'); +const { ImageBitmapResource } = resources; + +describe('PIXI.resources.ImageBitmapResource', function () +{ + it('should create new dimension-less resource', async function () + { + const canvas = document.createElement('canvas'); + + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + + expect(resource.width).to.equal(canvas.width); + expect(resource.height).to.equal(canvas.height); + expect(resource.valid).to.be.true; + + resource.destroy(); + }); + + it('should create new valid resource', async function () + { + const canvas = document.createElement('canvas'); + + canvas.width = 100; + canvas.height = 200; + + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + + expect(resource.width).to.equal(100); + expect(resource.height).to.equal(200); + expect(resource.valid).to.be.true; + + resource.destroy(); + }); + + it('should fire resize event on bind', async function () + { + const canvas = document.createElement('canvas'); + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + const baseTexture = { setRealSize: sinon.stub() }; + + resource.bind(baseTexture); + + expect(baseTexture.setRealSize.calledOnce).to.be.true; + + resource.unbind(baseTexture); + resource.destroy(); + }); + + it('should fire manual update event', async function () + { + const canvas = document.createElement('canvas'); + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + const baseTexture = { update: sinon.stub() }; + + resource.bind(baseTexture); + + expect(baseTexture.update.called).to.be.false; + + resource.update(); + + expect(baseTexture.update.calledOnce).to.be.true; + + resource.unbind(baseTexture); + resource.destroy(); + }); +}); diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 13eb08d..cc03236 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -18,7 +18,7 @@ * * @static * @param {HTMLCanvasElement|OffscreenCanvas} source - The source object - * @return {boolean} `true` if + * @return {boolean} `true` if source is HTMLCanvasElement or OffscreenCanvas */ static test(source) { diff --git a/packages/core/src/textures/resources/ImageBitmapResource.js b/packages/core/src/textures/resources/ImageBitmapResource.js new file mode 100644 index 0000000..6c91799 --- /dev/null +++ b/packages/core/src/textures/resources/ImageBitmapResource.js @@ -0,0 +1,23 @@ +import BaseImageResource from './BaseImageResource'; + +/** + * Resource type for ImageBitmap. + * @class + * @extends PIXI.resources.BaseImageResource + * @memberof PIXI.resources + * @param {ImageBitmap} source - Image element to use + */ +export default class ImageBitmapResource extends BaseImageResource +{ + /** + * Used to auto-detect the type of resource. + * + * @static + * @param {ImageBitmap} source - The source object + * @return {boolean} `true` if source is an ImageBitmap + */ + static test(source) + { + return !!window.createImageBitmap && source instanceof ImageBitmap; + } +} diff --git a/packages/core/src/textures/resources/index.js b/packages/core/src/textures/resources/index.js index b847ba1..491085b 100644 --- a/packages/core/src/textures/resources/index.js +++ b/packages/core/src/textures/resources/index.js @@ -6,6 +6,7 @@ import ImageResource from './ImageResource'; import SVGResource from './SVGResource'; import VideoResource from './VideoResource'; +import ImageBitmapResource from './ImageBitmapResource'; /** * Collection of base resource types supported by PixiJS. @@ -23,6 +24,7 @@ INSTALLED.push( ImageResource, + ImageBitmapResource, CanvasResource, VideoResource, SVGResource, @@ -39,5 +41,6 @@ CanvasResource, CubeResource, ImageResource, + ImageBitmapResource, SVGResource, VideoResource }; diff --git a/packages/core/test/ImageBitmapResource.js b/packages/core/test/ImageBitmapResource.js new file mode 100644 index 0000000..f986f2c --- /dev/null +++ b/packages/core/test/ImageBitmapResource.js @@ -0,0 +1,70 @@ +const { resources } = require('../'); +const { ImageBitmapResource } = resources; + +describe('PIXI.resources.ImageBitmapResource', function () +{ + it('should create new dimension-less resource', async function () + { + const canvas = document.createElement('canvas'); + + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + + expect(resource.width).to.equal(canvas.width); + expect(resource.height).to.equal(canvas.height); + expect(resource.valid).to.be.true; + + resource.destroy(); + }); + + it('should create new valid resource', async function () + { + const canvas = document.createElement('canvas'); + + canvas.width = 100; + canvas.height = 200; + + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + + expect(resource.width).to.equal(100); + expect(resource.height).to.equal(200); + expect(resource.valid).to.be.true; + + resource.destroy(); + }); + + it('should fire resize event on bind', async function () + { + const canvas = document.createElement('canvas'); + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + const baseTexture = { setRealSize: sinon.stub() }; + + resource.bind(baseTexture); + + expect(baseTexture.setRealSize.calledOnce).to.be.true; + + resource.unbind(baseTexture); + resource.destroy(); + }); + + it('should fire manual update event', async function () + { + const canvas = document.createElement('canvas'); + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + const baseTexture = { update: sinon.stub() }; + + resource.bind(baseTexture); + + expect(baseTexture.update.called).to.be.false; + + resource.update(); + + expect(baseTexture.update.calledOnce).to.be.true; + + resource.unbind(baseTexture); + resource.destroy(); + }); +}); diff --git a/packages/core/test/autoDetectResource.js b/packages/core/test/autoDetectResource.js index d11e3fe..56c410d 100644 --- a/packages/core/test/autoDetectResource.js +++ b/packages/core/test/autoDetectResource.js @@ -17,7 +17,7 @@ it('should have installed resources', function () { expect(INSTALLED).to.be.an.array; - expect(INSTALLED.length).to.equal(7); + expect(INSTALLED.length).to.equal(8); }); it('should auto-detect canvas element', function () diff --git a/packages/core/src/textures/resources/CanvasResource.js b/packages/core/src/textures/resources/CanvasResource.js index 13eb08d..cc03236 100644 --- a/packages/core/src/textures/resources/CanvasResource.js +++ b/packages/core/src/textures/resources/CanvasResource.js @@ -18,7 +18,7 @@ * * @static * @param {HTMLCanvasElement|OffscreenCanvas} source - The source object - * @return {boolean} `true` if + * @return {boolean} `true` if source is HTMLCanvasElement or OffscreenCanvas */ static test(source) { diff --git a/packages/core/src/textures/resources/ImageBitmapResource.js b/packages/core/src/textures/resources/ImageBitmapResource.js new file mode 100644 index 0000000..6c91799 --- /dev/null +++ b/packages/core/src/textures/resources/ImageBitmapResource.js @@ -0,0 +1,23 @@ +import BaseImageResource from './BaseImageResource'; + +/** + * Resource type for ImageBitmap. + * @class + * @extends PIXI.resources.BaseImageResource + * @memberof PIXI.resources + * @param {ImageBitmap} source - Image element to use + */ +export default class ImageBitmapResource extends BaseImageResource +{ + /** + * Used to auto-detect the type of resource. + * + * @static + * @param {ImageBitmap} source - The source object + * @return {boolean} `true` if source is an ImageBitmap + */ + static test(source) + { + return !!window.createImageBitmap && source instanceof ImageBitmap; + } +} diff --git a/packages/core/src/textures/resources/index.js b/packages/core/src/textures/resources/index.js index b847ba1..491085b 100644 --- a/packages/core/src/textures/resources/index.js +++ b/packages/core/src/textures/resources/index.js @@ -6,6 +6,7 @@ import ImageResource from './ImageResource'; import SVGResource from './SVGResource'; import VideoResource from './VideoResource'; +import ImageBitmapResource from './ImageBitmapResource'; /** * Collection of base resource types supported by PixiJS. @@ -23,6 +24,7 @@ INSTALLED.push( ImageResource, + ImageBitmapResource, CanvasResource, VideoResource, SVGResource, @@ -39,5 +41,6 @@ CanvasResource, CubeResource, ImageResource, + ImageBitmapResource, SVGResource, VideoResource }; diff --git a/packages/core/test/ImageBitmapResource.js b/packages/core/test/ImageBitmapResource.js new file mode 100644 index 0000000..f986f2c --- /dev/null +++ b/packages/core/test/ImageBitmapResource.js @@ -0,0 +1,70 @@ +const { resources } = require('../'); +const { ImageBitmapResource } = resources; + +describe('PIXI.resources.ImageBitmapResource', function () +{ + it('should create new dimension-less resource', async function () + { + const canvas = document.createElement('canvas'); + + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + + expect(resource.width).to.equal(canvas.width); + expect(resource.height).to.equal(canvas.height); + expect(resource.valid).to.be.true; + + resource.destroy(); + }); + + it('should create new valid resource', async function () + { + const canvas = document.createElement('canvas'); + + canvas.width = 100; + canvas.height = 200; + + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + + expect(resource.width).to.equal(100); + expect(resource.height).to.equal(200); + expect(resource.valid).to.be.true; + + resource.destroy(); + }); + + it('should fire resize event on bind', async function () + { + const canvas = document.createElement('canvas'); + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + const baseTexture = { setRealSize: sinon.stub() }; + + resource.bind(baseTexture); + + expect(baseTexture.setRealSize.calledOnce).to.be.true; + + resource.unbind(baseTexture); + resource.destroy(); + }); + + it('should fire manual update event', async function () + { + const canvas = document.createElement('canvas'); + const bitmap = await createImageBitmap(canvas); + const resource = new ImageBitmapResource(bitmap); + const baseTexture = { update: sinon.stub() }; + + resource.bind(baseTexture); + + expect(baseTexture.update.called).to.be.false; + + resource.update(); + + expect(baseTexture.update.calledOnce).to.be.true; + + resource.unbind(baseTexture); + resource.destroy(); + }); +}); diff --git a/packages/core/test/autoDetectResource.js b/packages/core/test/autoDetectResource.js index d11e3fe..56c410d 100644 --- a/packages/core/test/autoDetectResource.js +++ b/packages/core/test/autoDetectResource.js @@ -17,7 +17,7 @@ it('should have installed resources', function () { expect(INSTALLED).to.be.an.array; - expect(INSTALLED.length).to.equal(7); + expect(INSTALLED.length).to.equal(8); }); it('should auto-detect canvas element', function () diff --git a/packages/core/test/index.js b/packages/core/test/index.js index 4268251..fa11f1c 100644 --- a/packages/core/test/index.js +++ b/packages/core/test/index.js @@ -2,6 +2,7 @@ require('./Texture'); require('./Renderer'); require('./CanvasResource'); +require('./ImageBitmapResource'); require('./ImageResource'); require('./SVGResource'); require('./VideoResource');