Skip to content

Commit bfb4b84

Browse files
committed
fix: new Image texture on Canvas
1 parent 900853c commit bfb4b84

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

src/core/renderers/canvas/CanvasCoreTexture.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ import { CoreContextTexture } from '../CoreContextTexture.js';
2323
import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
2424

2525
export class CanvasCoreTexture extends CoreContextTexture {
26-
protected image: ImageBitmap | HTMLCanvasElement | undefined;
26+
protected image:
27+
| ImageBitmap
28+
| HTMLCanvasElement
29+
| HTMLImageElement
30+
| undefined;
2731
protected tintCache:
2832
| {
2933
key: string;
@@ -68,7 +72,9 @@ export class CanvasCoreTexture extends CoreContextTexture {
6872
return this.image !== undefined;
6973
}
7074

71-
getImage(color: IParsedColor): ImageBitmap | HTMLCanvasElement {
75+
getImage(
76+
color: IParsedColor,
77+
): ImageBitmap | HTMLCanvasElement | HTMLImageElement {
7278
const image = this.image;
7379
assertTruthy(image, 'Attempt to get unloaded image texture');
7480

@@ -94,7 +100,7 @@ export class CanvasCoreTexture extends CoreContextTexture {
94100
}
95101

96102
protected tintTexture(
97-
source: ImageBitmap | HTMLCanvasElement,
103+
source: ImageBitmap | HTMLCanvasElement | HTMLImageElement,
98104
color: string,
99105
) {
100106
const { width, height } = source;
@@ -138,6 +144,10 @@ export class CanvasCoreTexture extends CoreContextTexture {
138144
this.image = data;
139145
return { width: data.width, height: data.height };
140146
}
147+
if (data instanceof HTMLImageElement) {
148+
this.image = data;
149+
return { width: data.width, height: data.height };
150+
}
141151
return { width: 0, height: 0 };
142152
}
143153
}

src/core/textures/ImageTexture.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ export class ImageTexture extends Texture {
135135
async loadImageFallback(src: string, hasAlpha: boolean) {
136136
const img = new Image();
137137

138+
if (!src.startsWith('data:')) {
139+
img.crossOrigin = 'Anonymous';
140+
}
141+
138142
return new Promise<{ data: HTMLImageElement; premultiplyAlpha: boolean }>(
139143
(resolve) => {
140144
img.onload = () => {

0 commit comments

Comments
 (0)