Skip to content

Commit bda2462

Browse files
committed
feat: arraybuffer support imagebitmap
1 parent 034bf99 commit bda2462

File tree

29 files changed

+659
-55
lines changed

29 files changed

+659
-55
lines changed

packages/canvas-polyfill/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@nativescript/canvas-polyfill",
3-
"version": "1.0.0-alpha22",
3+
"version": "1.0.0-alpha23",
44
"description": "Polyfill for making NativeScript compatible with web libs like pixi.js, three.js, phaser.js, babylon.js, etc....",
55
"main": "index",
66
"typings": "index.d.ts",

packages/canvas/ImageBitmap/index.android.ts

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,36 @@ export class ImageBitmap extends ImageBitmapBase {
179179
},
180180
})
181181
);
182+
}else if (source instanceof ArrayBuffer){
183+
//@ts-ignore
184+
if(source.nativeObject){
185+
com.github.triniwiz.canvas.TNSImageBitmap.createFromBufferEncoded(
186+
//@ts-ignore
187+
source.nativeObject,
188+
opts,
189+
new com.github.triniwiz.canvas.TNSImageBitmap.Callback({
190+
onError(error) {
191+
reject(error);
192+
},
193+
onSuccess(bitmap) {
194+
resolve(ImageBitmap.fromNative(bitmap));
195+
},
196+
})
197+
);
198+
}else {
199+
com.github.triniwiz.canvas.TNSImageBitmap.createFromBytesEncoded(
200+
Array.from(new Uint8Array(source as any) as any),
201+
opts,
202+
new com.github.triniwiz.canvas.TNSImageBitmap.Callback({
203+
onError(error) {
204+
reject(error);
205+
},
206+
onSuccess(bitmap) {
207+
resolve(ImageBitmap.fromNative(bitmap));
208+
},
209+
})
210+
);
211+
}
182212
}
183213
});
184214
}
@@ -293,6 +323,44 @@ export class ImageBitmap extends ImageBitmapBase {
293323
},
294324
})
295325
);
326+
}else if (source instanceof ArrayBuffer){
327+
//@ts-ignore
328+
if(source.nativeObject){
329+
com.github.triniwiz.canvas.TNSImageBitmap.createFromBufferEncoded(
330+
//@ts-ignore
331+
source.nativeObject,
332+
sx,
333+
sy,
334+
sWidth,
335+
sHeight,
336+
opts,
337+
new com.github.triniwiz.canvas.TNSImageBitmap.Callback({
338+
onError(error) {
339+
reject(error);
340+
},
341+
onSuccess(bitmap) {
342+
resolve(ImageBitmap.fromNative(bitmap));
343+
},
344+
})
345+
);
346+
}else {
347+
com.github.triniwiz.canvas.TNSImageBitmap.createFromBytesEncoded(
348+
Array.from(new Uint8Array(source as any) as any),
349+
sx,
350+
sy,
351+
sWidth,
352+
sHeight,
353+
opts,
354+
new com.github.triniwiz.canvas.TNSImageBitmap.Callback({
355+
onError(error) {
356+
reject(error);
357+
},
358+
onSuccess(bitmap) {
359+
resolve(ImageBitmap.fromNative(bitmap));
360+
},
361+
})
362+
);
363+
}
296364
}
297365
});
298366
}

packages/canvas/ImageBitmap/index.ios.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,14 @@ export class ImageBitmap extends ImageBitmapBase {
148148
reject(error);
149149
}
150150
});
151+
} else if (source instanceof ArrayBuffer) {
152+
TNSImageBitmap.createFromDataEncoded(NSData.dataWithData(source as any), opts, (bitmap, error) => {
153+
if (bitmap) {
154+
resolve(ImageBitmap.fromNative(bitmap));
155+
} else {
156+
reject(error);
157+
}
158+
});
151159
}
152160
});
153161
}
@@ -205,6 +213,14 @@ export class ImageBitmap extends ImageBitmapBase {
205213
reject(error);
206214
}
207215
});
216+
} else if (source instanceof ArrayBuffer) {
217+
(TNSImageBitmap as any).createFromDataEncoded(NSData.dataWithData(source as any), sx, sy, sWidth, sHeight, opts, (bitmap, error) => {
218+
if (bitmap) {
219+
resolve(ImageBitmap.fromNative(bitmap));
220+
} else {
221+
reject(error);
222+
}
223+
});
208224
}
209225
});
210226
}

packages/canvas/WebGL/WebGLRenderingContext/index.ios.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ declare const TNS_EXT_blend_minmax,
4242
export class WebGLRenderingContext extends WebGLRenderingContextBase {
4343
public static isDebug = false;
4444
public static filter: 'both' | 'error' | 'args' = 'both';
45-
private context; //: WebGLRenderingContext;
45+
private context//: TNSWebGLRenderingContext;
4646

4747
constructor(context) {
4848
super(context);
@@ -963,17 +963,22 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
963963
/* TODO */
964964
if (arguments.length === 9) {
965965
if ((pixels && pixels.buffer) || pixels instanceof ArrayBuffer) {
966-
if (pixels instanceof ArrayBuffer) {
967-
const array = new Uint8Array(pixels);
968-
this.context.texImage2DU8(target, level, internalformat, width, height, border, format, type, Array.from(array as any));
969-
} else if (pixels instanceof Uint8Array || pixels instanceof Uint8ClampedArray) {
966+
if (pixels instanceof Uint8Array || pixels instanceof Uint8ClampedArray) {
970967
this.context.texImage2DU8(target, level, internalformat, width, height, border, format, type, Array.from(pixels as any));
971968
} else if (pixels instanceof Uint16Array) {
972969
this.context.texImage2DU16(target, level, internalformat, width, height, border, format, type, Array.from(pixels as any));
973970
} else if (pixels instanceof Uint32Array) {
974971
this.context.texImage2DU32(target, level, internalformat, width, height, border, format, type, Array.from(pixels as any));
975972
} else if (pixels instanceof Float32Array) {
976973
this.context.texImage2DF32(target, level, internalformat, width, height, border, format, type, Array.from(pixels as any));
974+
} else if (pixels instanceof ArrayBuffer) {
975+
const data = NSData.dataWithData(pixels as any);
976+
if (data) {
977+
this.context.texImage2DData(target, level, internalformat, width, height, border, format, type, data);
978+
} else {
979+
const array = new Uint8Array(pixels);
980+
this.context.texImage2DU8(target, level, internalformat, width, height, border, format, type, Array.from(array as any));
981+
}
977982
}
978983
} else {
979984
this.context.texImage2D(target, level, internalformat, width, height, border, format, type, pixels as any);
@@ -1031,15 +1036,20 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
10311036
this._checkArgs('texSubImage2D', arguments);
10321037
if (arguments.length === 9) {
10331038
if ((pixels && pixels.buffer) || pixels instanceof ArrayBuffer) {
1034-
if (pixels instanceof ArrayBuffer) {
1035-
const array = new Uint8Array(pixels);
1036-
this.context.texSubImage2DU8(target, level, xoffset, yoffset, width, height, format, type, Array.from(array as any));
1037-
} else if (pixels instanceof Uint8Array || pixels instanceof Uint8ClampedArray) {
1039+
if (pixels instanceof Uint8Array || pixels instanceof Uint8ClampedArray) {
10381040
this.context.texSubImage2DU8(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels as any));
10391041
} else if (pixels instanceof Uint16Array) {
10401042
this.context.texSubImage2DU16(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels as any));
10411043
} else if (pixels instanceof Float32Array) {
10421044
this.context.texSubImage2DF32(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels as any));
1045+
} else if (pixels instanceof ArrayBuffer) {
1046+
const data = NSData.dataWithData(pixels as any);
1047+
if (data) {
1048+
this.context.texSubImage2DData(target, level, xoffset, yoffset, width, height, format, type, data);
1049+
} else {
1050+
const array = new Uint8Array(pixels);
1051+
this.context.texSubImage2DU8(target, level, xoffset, yoffset, width, height, format, type, Array.from(array as any));
1052+
}
10431053
}
10441054
} else {
10451055
this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels as any);

packages/canvas/WebGL2/WebGL2RenderingContext/index.ios.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,12 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
449449
if (typeof source === 'number') {
450450
this.native.texImage3DOffset(target, level, internalformat, width, height, depth, border, format, type, source);
451451
} else if (source instanceof ArrayBuffer) {
452-
this.native.texImage3DU8(target, level, internalformat, width, height, depth, border, format, type, source, srcOffset);
452+
const data = NSData.dataWithData(source as any);
453+
if (data) {
454+
this.native.texImage3DData(target, level, internalformat, width, height, depth, border, format, type, data, srcOffset);
455+
} else {
456+
this.native.texImage3DU8(target, level, internalformat, width, height, depth, border, format, type, source, srcOffset);
457+
}
453458
} else if (source && source.buffer) {
454459
if (source instanceof Int8Array) {
455460
this.native.texImage3DI8(target, level, internalformat, width, height, depth, border, format, type, source, srcOffset);
@@ -515,7 +520,12 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
515520
if (typeof srcData === 'number') {
516521
this.native.texSubImage3DOffset(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData);
517522
} else if (srcData instanceof ArrayBuffer) {
518-
this.native.texSubImage3DU8(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset);
523+
const data = NSData.dataWithData(srcData as any);
524+
if (data) {
525+
this.native.texSubImage3DData(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data, srcOffset);
526+
} else {
527+
this.native.texSubImage3DU8(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset);
528+
}
519529
} else if (srcData && srcData.buffer) {
520530
if (srcData instanceof Int8Array) {
521531
this.native.texSubImage3DI8(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset);

packages/canvas/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@nativescript/canvas",
3-
"version": "0.9.18",
3+
"version": "0.9.19",
44
"description": "DOM Canvas API for NativeScript",
55
"main": "index",
66
"typings": "index.d.ts",

packages/canvas/platforms/android/include.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ allprojects {
66
}
77

88
dependencies {
9-
implementation 'com.github.triniwiz:canvas:0.9.15'
9+
implementation 'com.github.triniwiz:canvas:0.9.16'
1010
}

packages/canvas/platforms/ios/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use_frameworks!
22
platform :ios, '11.0'
3-
pod 'CanvasNative' , '~> 0.9.18'
3+
pod 'CanvasNative' , '~> 0.9.19'
44
#pod 'CanvasNative', :path => "$(SRCROOT)/../../../../../"
55

66

0 commit comments

Comments
 (0)