diff --git a/packages/core/src/textures/resources/ImageResource.js b/packages/core/src/textures/resources/ImageResource.js index 59c391a..b3f58be 100644 --- a/packages/core/src/textures/resources/ImageResource.js +++ b/packages/core/src/textures/resources/ImageResource.js @@ -15,6 +15,7 @@ * @param {boolean} [options.createBitmap=true] whether its required to create * a bitmap before upload defaults true * @param {boolean} [options.crossorigin=true] - Load image using cross origin + * @param {boolean} [options.premultiplyAlpha=true] - Premultiply image alpha in bitmap */ constructor(source, options) { @@ -60,6 +61,14 @@ this.createBitmap = options.createBitmap !== false && settings.CREATE_IMAGE_BITMAP && !!window.createImageBitmap; /** + * Controls texture premultiplyAlpha field + * Copies from options + * @member {boolean|null} + * @readonly + */ + this.premultiplyAlpha = options.premultiplyAlpha !== false; + + /** * The ImageBitmap element created for HTMLImageElement * @member {ImageBitmap} * @default null @@ -155,7 +164,11 @@ return Promise.resolve(this); } - this._process = window.createImageBitmap(this.source) + this._process = window.createImageBitmap(this.source, + 0, 0, this.source.width, this.source.height, + { + premultiplyAlpha: this.premultiplyAlpha ? 'premultiply' : 'none', + }) .then((bitmap) => { if (this.destroyed) @@ -181,6 +194,8 @@ */ upload(renderer, baseTexture, glTexture) { + baseTexture.premultiplyAlpha = this.premultiplyAlpha; + if (this.createBitmap) { if (!this.bitmap)