diff --git a/CanvasNative.podspec b/CanvasNative.podspec
index 45998748..68f74ebe 100644
--- a/CanvasNative.podspec
+++ b/CanvasNative.podspec
@@ -2,7 +2,7 @@ Pod::Spec.new do |s|
s.name = "CanvasNative"
- s.version = "1.0.0-alpha.2"
+ s.version = "1.0.0-alpha.3"
s.summary = "A Canvas library"
diff --git a/apps/demo-vue/app/plugin-demos/canvas-babylon.vue b/apps/demo-vue/app/plugin-demos/canvas-babylon.vue
new file mode 100644
index 00000000..aa03c10e
--- /dev/null
+++ b/apps/demo-vue/app/plugin-demos/canvas-babylon.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo-vue/app/plugin-demos/canvas-media.vue b/apps/demo-vue/app/plugin-demos/canvas-media.vue
new file mode 100644
index 00000000..998e6e18
--- /dev/null
+++ b/apps/demo-vue/app/plugin-demos/canvas-media.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo-vue/app/plugin-demos/canvas-phaser-ce.vue b/apps/demo-vue/app/plugin-demos/canvas-phaser-ce.vue
new file mode 100644
index 00000000..8251998c
--- /dev/null
+++ b/apps/demo-vue/app/plugin-demos/canvas-phaser-ce.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo-vue/app/plugin-demos/canvas-phaser.vue b/apps/demo-vue/app/plugin-demos/canvas-phaser.vue
new file mode 100644
index 00000000..3b78f8b0
--- /dev/null
+++ b/apps/demo-vue/app/plugin-demos/canvas-phaser.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo-vue/app/plugin-demos/canvas-pixi.vue b/apps/demo-vue/app/plugin-demos/canvas-pixi.vue
new file mode 100644
index 00000000..47fa5267
--- /dev/null
+++ b/apps/demo-vue/app/plugin-demos/canvas-pixi.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo-vue/app/plugin-demos/canvas-polyfill.vue b/apps/demo-vue/app/plugin-demos/canvas-polyfill.vue
new file mode 100644
index 00000000..0da23b6c
--- /dev/null
+++ b/apps/demo-vue/app/plugin-demos/canvas-polyfill.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo-vue/app/plugin-demos/canvas-three.vue b/apps/demo-vue/app/plugin-demos/canvas-three.vue
new file mode 100644
index 00000000..55c0a03c
--- /dev/null
+++ b/apps/demo-vue/app/plugin-demos/canvas-three.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo-vue/app/plugin-demos/canvas.vue b/apps/demo-vue/app/plugin-demos/canvas.vue
new file mode 100644
index 00000000..82ce46be
--- /dev/null
+++ b/apps/demo-vue/app/plugin-demos/canvas.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/demo/package.json b/apps/demo/package.json
index 03ecf20e..a3cadbe5 100644
--- a/apps/demo/package.json
+++ b/apps/demo/package.json
@@ -13,6 +13,7 @@
"@nativescript/canvas-polyfill": "file:../../packages/canvas-polyfill",
"@nativescript/canvas-three": "file:../../packages/canvas-three",
"@nativescript/core": "file:../../node_modules/@nativescript/core",
+ "@nativescript/webpack": "^5.0.0",
"babylonjs": "file:../../node_modules/babylonjs",
"babylonjs-materials": "file:../../node_modules/babylonjs-materials",
"chart.js": "file:../../node_modules/chart.js",
@@ -27,7 +28,7 @@
"zen-3d": "file:../../node_modules/zen-3d"
},
"devDependencies": {
- "@nativescript/android": "8.0.0",
+ "@nativescript/android": "8.2.0-alpha.2",
"@nativescript/ios": "8.0.0"
}
}
diff --git a/apps/demo/src/main-page.xml b/apps/demo/src/main-page.xml
index 1a5c4a37..f1187ceb 100644
--- a/apps/demo/src/main-page.xml
+++ b/apps/demo/src/main-page.xml
@@ -1,4 +1,4 @@
-
+
diff --git a/package.json b/package.json
index b34cf366..c2f64864 100644
--- a/package.json
+++ b/package.json
@@ -27,10 +27,10 @@
"@angular/router": "^12.0.0",
"@nativescript-community/gesturehandler": "^0.1.45",
"@nativescript/angular": "^12.0.0",
- "@nativescript/core": "^8.0.0",
+ "@nativescript/core": "~8.1.0",
"@nativescript/plugin-tools": "2.1.0",
"@nativescript/types": "^8.0.0",
- "@nativescript/webpack": "beta",
+ "@nativescript/webpack": "~5.0.0",
"@ngtools/webpack": "^12.0.0",
"babylonjs": "^4.1.0",
"babylonjs-materials": "^4.1.0",
@@ -57,7 +57,7 @@
"rxjs": "~6.6.0",
"svelte-native": "^0.9.3",
"three": "^0.123.0",
- "typescript": "4.3.5",
+ "typescript": "~4.3.0",
"vexflow": "^3.0.9",
"xmldom": "~0.6.0",
"zen-3d": "0.0.3",
@@ -68,4 +68,4 @@
"npx prettier --write"
]
}
-}
\ No newline at end of file
+}
diff --git a/packages/canvas-media/package.json b/packages/canvas-media/package.json
index 408ee946..6447e174 100644
--- a/packages/canvas-media/package.json
+++ b/packages/canvas-media/package.json
@@ -1,6 +1,6 @@
{
"name": "@nativescript/canvas-media",
- "version": "0.11.0",
+ "version": "0.12.0",
"description": "Canvas media",
"main": "index",
"typings": "index.d.ts",
diff --git a/packages/canvas-media/platforms/android/canvas_media.aar b/packages/canvas-media/platforms/android/canvas_media.aar
index 7f47714b..ebd103a7 100644
Binary files a/packages/canvas-media/platforms/android/canvas_media.aar and b/packages/canvas-media/platforms/android/canvas_media.aar differ
diff --git a/packages/canvas-media/platforms/android/include.gradle b/packages/canvas-media/platforms/android/include.gradle
index ba6aa1b7..048bd248 100644
--- a/packages/canvas-media/platforms/android/include.gradle
+++ b/packages/canvas-media/platforms/android/include.gradle
@@ -5,7 +5,11 @@ android {
}
}
+repositories {
+ google()
+}
+
dependencies {
- implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
- implementation 'com.google.android.exoplayer:exoplayer-ui:2.13.2'
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.3'
+ implementation 'com.google.android.exoplayer:exoplayer-ui:2.13.3'
}
diff --git a/packages/canvas-media/video/common.ts b/packages/canvas-media/video/common.ts
index 450ee3a0..6ab9349e 100644
--- a/packages/canvas-media/video/common.ts
+++ b/packages/canvas-media/video/common.ts
@@ -90,7 +90,10 @@ export abstract class VideoBase extends ContentView implements AddChildFromBuild
}
}
_removeListener(type: string, listener: Function, listeners: any) {
- if (listener && listeners && typeof listeners === 'object') {
+ if(!this._listeners){
+ this._listeners = {};
+ }
+ if (typeof listener === 'function' && listeners && typeof listeners === 'object') {
const currentEvents = listeners[type];
if (Array.isArray(currentEvents)) {
const size = currentEvents.length;
@@ -111,7 +114,7 @@ export abstract class VideoBase extends ContentView implements AddChildFromBuild
_listenerExist(type: string, listener: Function, listeners: any): boolean {
let has = false;
- if (listener && listeners && typeof listeners === 'object') {
+ if (typeof listener === 'function' && listeners && typeof listeners === 'object') {
const currentEvents = listeners[type];
if (Array.isArray(currentEvents)) {
const size = currentEvents.length;
@@ -127,6 +130,9 @@ export abstract class VideoBase extends ContentView implements AddChildFromBuild
return has;
}
addEventListener(type: string, listener: Function, useCapture: boolean | any) {
+ if(!this._listeners){
+ this._listeners = {};
+ }
let isCapture = false;
if (typeof useCapture === 'boolean') {
isCapture = true;
@@ -136,16 +142,16 @@ export abstract class VideoBase extends ContentView implements AddChildFromBuild
if (isCapture) {
if (!this._listenerExist(type, listener, this._capturedListeners)) {
- if (Array.isArray(this._capturedListeners[type])) {
- this._capturedListeners[type]?.push?.(listener);
+ if (Array.isArray(this._capturedListeners?.[type])) {
+ this._capturedListeners?.[type]?.push?.(listener);
} else {
this._capturedListeners[type] = [listener];
}
}
} else {
if (!this._listenerExist(type, listener, this._listeners)) {
- if (Array.isArray(this._listeners[type])) {
- this._listeners[type]?.push?.(listener);
+ if (Array.isArray(this._listeners?.[type])) {
+ this._listeners?.[type]?.push?.(listener);
} else {
this._listeners[type] = [listener];
}
@@ -163,7 +169,7 @@ export abstract class VideoBase extends ContentView implements AddChildFromBuild
if (isCapture) {
if (!this._listenerExist(type, listener, this._capturedListeners)) {
if (Array.isArray(this._capturedListeners[type])) {
- this._capturedListeners[type]?.push?.(listener);
+ this._capturedListeners?.[type]?.push?.(listener);
} else {
this._capturedListeners[type] = [listener];
}
@@ -171,7 +177,7 @@ export abstract class VideoBase extends ContentView implements AddChildFromBuild
} else {
if (!this._listenerExist(type, listener, this._listeners)) {
if (Array.isArray(this._listeners[type])) {
- this._listeners[type]?.push?.(listener);
+ this._listeners?.[type]?.push?.(listener);
} else {
this._listeners[type] = [listener];
}
diff --git a/packages/canvas-phaser-ce/phaser.ts b/packages/canvas-phaser-ce/phaser.ts
index 414eeedd..914a0c43 100644
--- a/packages/canvas-phaser-ce/phaser.ts
+++ b/packages/canvas-phaser-ce/phaser.ts
@@ -1,5 +1,14 @@
import '@nativescript/canvas-polyfill';
+
+interface TNSPhaserCe {
+ PIXI: any;
+ Phaser: any;
+}
+
+export declare var global: NodeJS.Global & typeof globalThis & TNSPhaserCe;
+
+
function initPhaser() {
(global as any).PIXI = (global as any).window.PIXI = (global as any).PIXI || require('phaser-ce/build/custom/pixi');
(global as any).p2 = (global as any).window.p2 = (global as any).p2 || require('phaser-ce/build/custom/p2');
diff --git a/packages/canvas-polyfill/tsconfig.json b/packages/canvas-polyfill/tsconfig.json
index ddc2d9b5..bba92f9a 100644
--- a/packages/canvas-polyfill/tsconfig.json
+++ b/packages/canvas-polyfill/tsconfig.json
@@ -2,7 +2,8 @@
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
- "rootDir": "."
+ "rootDir": ".",
+ "target": "es5"
},
"exclude": ["**/*.spec.ts", "angular", "src-native"],
"include": ["**/*.ts", "references.d.ts"]
diff --git a/packages/canvas/Canvas/common.ts b/packages/canvas/Canvas/common.ts
index 4cba4a99..cee867d1 100644
--- a/packages/canvas/Canvas/common.ts
+++ b/packages/canvas/Canvas/common.ts
@@ -14,6 +14,9 @@ export const ignorePixelScalingProperty = new Property({
valueConverter: booleanConverter
});
+
+import { observe as gestureObserve } from '@nativescript-community/gesturehandler/gestures_override';
+
@CSSType('Canvas')
export abstract class CanvasBase extends View implements ICanvasBase {
public static readyEvent = 'ready';
@@ -38,6 +41,22 @@ export abstract class CanvasBase extends View implements ICanvasBase {
this.off('touch, pan, pinch', this._touchEvent, this);
}
}
+
+
+ _observe(type: GestureTypes, callback: (args: GestureEventData) => void, thisArg?: any): void {
+ if (!this._gestureObservers[type]) {
+ this._gestureObservers[type] = [];
+ }
+
+ this._gestureObservers[type].push(gestureObserve(this, type, callback, thisArg));
+ if (global.isAndroid) {
+ if (this.isLoaded && !(this).touchListenerIsSet) {
+ this.setOnTouchListener();
+ }
+ }
+ }
+
+
public addEventListener(arg: string, callback: any, thisArg?: any) {
super.addEventListener(arg, callback, thisArg);
if (WEB_GESTURE_EVENTS.indexOf(arg) !== -1) {
@@ -401,19 +420,4 @@ export abstract class CanvasBase extends View implements ICanvasBase {
}
}
-
-(CanvasBase.prototype as any)._observe = function (type: GestureTypes, callback: (args: GestureEventData) => void, thisArg?: any): void {
- const gestureObserve = require('@nativescript-community/gesturehandler/gestures_override').observe;
- if (!this._gestureObservers[type]) {
- this._gestureObservers[type] = [];
- }
-
- this._gestureObservers[type].push(gestureObserve(this, type, callback, thisArg));
- if (global.isAndroid) {
- if (this.isLoaded && !this.touchListenerIsSet) {
- this.setOnTouchListener();
- }
- }
-};
-
ignorePixelScalingProperty.register(CanvasBase);
\ No newline at end of file
diff --git a/packages/canvas/SVG/Image.ts b/packages/canvas/SVG/Image.ts
index b0fb9039..987d6ef7 100644
--- a/packages/canvas/SVG/Image.ts
+++ b/packages/canvas/SVG/Image.ts
@@ -30,7 +30,9 @@ export class Image extends SVGItem {
href: string;
x: any = 0;
y: any = 0;
+ // @ts-ignore
#loadedSrc: string;
+ // @ts-ignore
#asset = new ImageAsset();
constructor(){
diff --git a/packages/canvas/TextDecoder/TextDecoder.android.ts b/packages/canvas/TextDecoder/TextDecoder.android.ts
index 241389c4..f7c38ae1 100644
--- a/packages/canvas/TextDecoder/TextDecoder.android.ts
+++ b/packages/canvas/TextDecoder/TextDecoder.android.ts
@@ -1,46 +1,52 @@
import { TextDecoderBase } from './common';
-
+import { Utils } from '../utils';
export class TextDecoder extends TextDecoderBase {
-
constructor(encoding: string = 'utf-8') {
super(new org.nativescript.canvas.TNSTextDecoder(encoding));
}
+ get _isSupported() {
+ return Utils.IS_SUPPORTED_TYPED_ARRAYS_VERSION;
+ }
+
get encoding(): string {
return this.native.getEncoding();
}
decode(buffer?: ArrayBuffer | ArrayBufferView, options?: any): string {
- if (
- buffer instanceof ArrayBuffer ||
- buffer instanceof Uint8Array ||
- buffer instanceof Int8Array ||
- buffer instanceof Uint16Array ||
- buffer instanceof Int16Array ||
- buffer instanceof Uint32Array ||
- buffer instanceof Int32Array ||
- buffer instanceof Float32Array || buffer instanceof Uint8ClampedArray
- ) {
+ if (buffer instanceof ArrayBuffer || buffer instanceof Uint8Array || buffer instanceof Int8Array || buffer instanceof Uint16Array || buffer instanceof Int16Array || buffer instanceof Uint32Array || buffer instanceof Int32Array || buffer instanceof Float32Array || buffer instanceof Uint8ClampedArray) {
if (buffer instanceof Uint8Array || buffer instanceof Int8Array || buffer instanceof Uint8ClampedArray) {
- const nativeBuffer = java.nio.ByteBuffer.wrap(Array.from(buffer));
- return this.native.decode(nativeBuffer.array());
+ if (this._isSupported) {
+ return this.native.decodeByteBuffer(buffer as any);
+ }
+ return this.native.decodeByte(Array.from(buffer as any));
} else if (buffer instanceof Uint16Array || buffer instanceof Int16Array) {
- const nativeBuffer = java.nio.ShortBuffer.wrap(Array.from(buffer));
- return this.native.decode(nativeBuffer.array());
+ if (this._isSupported) {
+ return this.native.decodeShortBuffer(buffer as any);
+ }
+ return this.native.decodeShort(Array.from(buffer as any));
} else if (buffer instanceof Int32Array || buffer instanceof Uint32Array) {
- const nativeBuffer = java.nio.IntBuffer.wrap(Array.from(buffer));
- return this.native.decode(nativeBuffer.array());
+ if (this._isSupported) {
+ return this.native.decodeIntBuffer(buffer as any);
+ }
+ return this.native.decodeInt(Array.from(buffer as any));
} else if (buffer instanceof Float32Array) {
- const nativeBuffer = java.nio.FloatBuffer.wrap(Array.from(buffer));
- return this.native.decode(nativeBuffer.array());
+ if (this._isSupported) {
+ return this.native.decodeFloatBuffer(buffer as any);
+ }
+ return this.native.decodeFloat(Array.from(buffer as any));
} else if (buffer instanceof Float64Array) {
- const nativeBuffer = java.nio.DoubleBuffer.wrap(Array.from(buffer));
- return this.native.decode(nativeBuffer.array());
+ if (this._isSupported) {
+ return this.native.decodeDoubleBuffer(buffer as any);
+ }
+ return this.native.decodeDouble(Array.from(buffer as any));
}
- const nativeBuffer = java.nio.ByteBuffer.wrap(Array.from(buffer as any));
- return this.native.decode(nativeBuffer.array());
+ if (this._isSupported) {
+ return this.native.decodeByteBuffer(buffer as any);
+ }
+ return this.native.decodeByte(Array.from(buffer as any));
} else {
return '';
}
diff --git a/packages/canvas/TextDecoder/TextDecoder.ios.ts b/packages/canvas/TextDecoder/TextDecoder.ios.ts
index da373eef..ef6529c4 100644
--- a/packages/canvas/TextDecoder/TextDecoder.ios.ts
+++ b/packages/canvas/TextDecoder/TextDecoder.ios.ts
@@ -1,53 +1,35 @@
import { TextDecoderBase } from './common';
-declare let TNSTextDecoder;
+//declare let TNSTextDecoder;
export class TextDecoder extends TextDecoderBase {
- constructor(encoding: string = 'utf-8') {
- super(TNSTextDecoder.alloc().initWithEncoding(encoding));
- }
+ constructor(encoding: string = 'utf-8') {
+ super(TNSTextDecoder.alloc().initWithEncoding(encoding));
+ }
- get encoding(): string {
- return this.native.encoding;
- }
+ get encoding(): string {
+ return this.native.encoding;
+ }
- decode(buffer?: ArrayBuffer | ArrayBufferView, options?: any): string {
- if (
- buffer instanceof ArrayBuffer ||
- buffer instanceof Uint8ClampedArray ||
- buffer instanceof Uint8Array ||
- buffer instanceof Int8Array ||
- buffer instanceof Uint16Array ||
- buffer instanceof Int16Array ||
- buffer instanceof Uint32Array ||
- buffer instanceof Int32Array ||
- buffer instanceof Float32Array
- ) {
- if (
- buffer instanceof Uint8Array || buffer instanceof Uint8ClampedArray
- ) {
- return this.native.decodeWithBytes(Array.from(buffer));
- } else if (
- buffer instanceof Int8Array
- ) {
- return this.native.decodeWithI8(Array.from(buffer));
- }
- if (
- buffer instanceof Uint16Array
- ) {
- return this.native.decodeWithU16(Array.from(buffer));
- } else if (
- buffer instanceof Int16Array
- ) {
- return this.native.decodeWithI16(Array.from(buffer));
- } else if (
- buffer instanceof Int32Array
- ) {
- return this.native.decodeWithI32(Array.from(buffer));
- }
- return this.native.decodeWithBuffer(NSData.dataWithData(buffer as any));
- } else {
- return '';
- }
- }
+ decode(buffer?: ArrayBuffer | ArrayBufferView, options?: any): string {
+ if (buffer instanceof ArrayBuffer || buffer instanceof Uint8ClampedArray || buffer instanceof Uint8Array || buffer instanceof Int8Array || buffer instanceof Uint16Array || buffer instanceof Int16Array || buffer instanceof Uint32Array || buffer instanceof Int32Array || buffer instanceof Float32Array) {
+ if (buffer instanceof Uint8Array || buffer instanceof Uint8ClampedArray) {
+ return this.native.decodeWithU8Offset(buffer, buffer.byteLength, buffer.byteOffset);
+ } else if (buffer instanceof Int8Array) {
+ return this.native.decodeWithI8Offset(buffer, buffer.byteLength, buffer.byteOffset);
+ } else if (buffer instanceof Uint16Array) {
+ return this.native.decodeWithU16Offset(buffer, buffer.byteLength, buffer.byteOffset);
+ } else if (buffer instanceof Int16Array) {
+ return this.native.decodeWithI16Offset(buffer, buffer.byteLength, buffer.byteOffset);
+ } else if (buffer instanceof Int32Array) {
+ return this.native.decodeWithI32Offset(buffer, buffer.byteLength, buffer.byteOffset);
+ } else if (buffer instanceof Uint32Array) {
+ return this.native.decodeWithI32Offset(buffer, buffer.byteLength, buffer.byteOffset);
+ }
+
+ return this.native.decodeWithU8(buffer as any, buffer.byteLength);
+ } else {
+ return '';
+ }
+ }
}
diff --git a/packages/canvas/WebGL/WebGLRenderingContext/index.android.ts b/packages/canvas/WebGL/WebGLRenderingContext/index.android.ts
index 3ea1ff9c..4e905c44 100644
--- a/packages/canvas/WebGL/WebGLRenderingContext/index.android.ts
+++ b/packages/canvas/WebGL/WebGLRenderingContext/index.android.ts
@@ -39,12 +39,11 @@ import {
import { ImageAsset } from '../../ImageAsset';
import { Canvas } from '../../Canvas';
import { ImageBitmap } from '../../ImageBitmap';
-
+import { Utils } from '../../utils';
export class WebGLRenderingContext extends WebGLRenderingContextBase {
public static isDebug = false;
public static filter: 'both' | 'error' | 'args' = 'both';
private context: org.nativescript.canvas.TNSWebGLRenderingContext;
-
constructor(context) {
super(context);
this.context = context;
@@ -230,6 +229,10 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
return [] as any;
}
+ get _isSupported() {
+ return Utils.IS_SUPPORTED_TYPED_ARRAYS_VERSION;
+ }
+
bufferData(target: number, size: number, usage: number): void;
bufferData(target: number, srcData: ArrayBuffer | ArrayBufferView, usage: number): void;
@@ -245,7 +248,11 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
// @ts-ignore
this.context.bufferData(target, srcData.nativeObject, usage);
} else {
- this.context.bufferDataByte(target, Array.from(new Uint8Array(srcData as any)), usage);
+ if (this._isSupported) {
+ this.context.bufferDataByteBuffer(target, srcData as any, usage);
+ } else {
+ this.context.bufferDataByte(target, Array.from(new Uint8Array(srcData as any)), usage);
+ }
}
//this.context.bufferData(target, this.toNativeArray(new Uint8Array(srcData as any) as any, 'byte'), usage);
} else if (srcData && srcData.buffer instanceof ArrayBuffer) {
@@ -255,17 +262,29 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
this.context.bufferData(target, offset, srcData.buffer.nativeObject);
} else {
if (srcData instanceof Uint8Array || srcData instanceof Uint8ClampedArray) {
- //this.context.bufferData(target, this.toNativeArray(srcData as any, 'byte'), usage);
- this.context.bufferDataByte(target, Array.from(srcData), usage);
+ if (this._isSupported) {
+ this.context.bufferDataByteBuffer(target, srcData as any, usage);
+ } else {
+ this.context.bufferDataByte(target, Array.from(srcData), usage);
+ }
} else if (srcData instanceof Uint16Array || srcData instanceof Int16Array) {
- //this.context.bufferData(target, this.toNativeArray(srcData as any, 'short'), usage);
- this.context.bufferDataShort(target, Array.from(srcData), usage);
+ if (this._isSupported) {
+ this.context.bufferDataShortBuffer(target, srcData as any, usage);
+ } else {
+ this.context.bufferDataShort(target, Array.from(srcData), usage);
+ }
} else if (srcData instanceof Uint32Array || srcData instanceof Int32Array) {
- //this.context.bufferData(target, this.toNativeArray(srcData as any, 'int'), usage);
- this.context.bufferDataInt(target, Array.from(srcData), usage);
+ if (this._isSupported) {
+ this.context.bufferDataIntBuffer(target, srcData as any, usage);
+ } else {
+ this.context.bufferDataInt(target, Array.from(srcData), usage);
+ }
} else if (srcData instanceof Float32Array) {
- //this.context.bufferData(target, this.toNativeArray(srcData as any, 'float'), usage);
- this.context.bufferDataFloat(target, Array.from(srcData), usage);
+ if (this._isSupported) {
+ this.context.bufferDataFloatBuffer(target, srcData as any, usage);
+ } else {
+ this.context.bufferDataFloat(target, Array.from(srcData), usage);
+ }
}
}
} else if (arguments.length === 3 && !srcData) {
@@ -283,7 +302,11 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
// @ts-ignore
this.context.bufferSubData(target, offset, srcData.nativeObject);
} else {
- this.context.bufferSubDataByte(target, offset, Array.from(new Uint8Array(srcData as any)));
+ if (this._isSupported) {
+ this.context.bufferSubDataByteBuffer(target, offset, srcData as any);
+ } else {
+ this.context.bufferSubDataByte(target, offset, Array.from(new Uint8Array(srcData as any)));
+ }
}
} else if (srcData && srcData.buffer instanceof ArrayBuffer) {
// @ts-ignore
@@ -292,17 +315,29 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
this.context.bufferSubData(target, offset, srcData.buffer.nativeObject);
} else {
if (srcData instanceof Uint8Array || srcData instanceof Uint8ClampedArray) {
- //this.context.bufferSubData(target, offset, this.toNativeArray(srcData as any, 'byte'));
- this.context.bufferSubDataByte(target, offset, Array.from(srcData));
+ if (this._isSupported) {
+ this.context.bufferSubDataByteBuffer(target, offset, srcData as any);
+ } else {
+ this.context.bufferSubDataByte(target, offset, Array.from(srcData));
+ }
} else if (srcData instanceof Uint16Array || srcData instanceof Int16Array) {
- // this.context.bufferSubData(target, offset, this.toNativeArray(srcData as any, 'short'));
- this.context.bufferSubDataShort(target, offset, Array.from(srcData));
+ if (this._isSupported) {
+ this.context.bufferSubDataShortBuffer(target, offset, srcData as any);
+ } else {
+ this.context.bufferSubDataShort(target, offset, Array.from(srcData));
+ }
} else if (srcData instanceof Uint32Array || srcData instanceof Int32Array) {
- // this.context.bufferSubData(target, offset, this.toNativeArray(srcData as any, 'int'));
- this.context.bufferSubDataInt(target, offset, Array.from(srcData));
+ if (this._isSupported) {
+ this.context.bufferSubDataIntBuffer(target, offset, srcData as any);
+ } else {
+ this.context.bufferSubDataInt(target, offset, Array.from(srcData));
+ }
} else if (srcData instanceof Float32Array) {
- // this.context.bufferSubData(target, offset, this.toNativeArray(srcData as any, 'float'));
- this.context.bufferSubDataFloat(target, offset, Array.from(srcData));
+ if (this._isSupported) {
+ this.context.bufferSubDataFloatBuffer(target, offset, srcData as any);
+ } else {
+ this.context.bufferSubDataFloat(target, offset, Array.from(srcData));
+ }
}
}
}
@@ -1008,27 +1043,42 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
this.context.readPixels(x, y, width, height, format, type, pixels.buffer.nativeObject);
} else {
if (pixels instanceof Uint8Array) {
- // this.context.readPixels(x, y, width, height, format, type, this.toNativeArray(pixels as any, 'byte'));
- this.context.readPixelsByte(x, y, width, height, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.readPixelsByteBuffer(x, y, width, height, format, type, pixels as any);
+ } else {
+ this.context.readPixelsByte(x, y, width, height, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Uint16Array || pixels instanceof Int16Array) {
- // this.context.readPixels(x, y, width, height, format, type, this.toNativeArray(pixels as any, 'short'));
- this.context.readPixelsShort(x, y, width, height, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.readPixelsShortBuffer(x, y, width, height, format, type, pixels as any);
+ } else {
+ this.context.readPixelsShort(x, y, width, height, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Uint32Array || pixels instanceof Int32Array) {
- // this.context.readPixels(x, y, width, height, format, type, this.toNativeArray(pixels as any, 'int'));
- this.context.readPixelsInt(x, y, width, height, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.readPixelsIntBuffer(x, y, width, height, format, type, pixels as any);
+ } else {
+ this.context.readPixelsInt(x, y, width, height, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Float32Array) {
- // this.context.readPixels(x, y, width, height, format, type, this.toNativeArray(pixels as any, 'float'));
- this.context.readPixelsFloat(x, y, width, height, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.readPixelsFloatBuffer(x, y, width, height, format, type, pixels as any);
+ } else {
+ this.context.readPixelsFloat(x, y, width, height, format, type, Array.from(pixels));
+ }
}
}
} else if (pixels instanceof ArrayBuffer) {
- // this.context.readPixels(x, y, width, height, format, type, this.toNativeArray(new Uint8Array(pixels as any) as any, 'byte'));
// @ts-ignore
if (pixels.nativeObject) {
// @ts-ignore
this.context.readPixels(x, y, width, height, format, type, pixels.nativeObject);
} else {
- this.context.readPixelsByte(x, y, width, height, format, type, Array.from(new Uint8Array(pixels as any)));
+ if (this._isSupported) {
+ this.context.readPixelsByteBuffer(x, y, width, height, format, type, pixels as any);
+ } else {
+ this.context.readPixelsByte(x, y, width, height, format, type, Array.from(new Uint8Array(pixels as any)));
+ }
}
}
}
@@ -1106,10 +1156,6 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
texImage2D(target: any, level: any, internalformat: any, width: any, height: any, border: any, format?: any, type?: any, pixels?: any) {
this._glCheckError('texImage2D');
this._checkArgs('texImage2D', arguments);
- /* TODO */
- // this.blendFunc(this.SRC_ALPHA, this.ONE_MINUS_SRC_ALPHA);
- // this.enable(this.BLEND);
- /* TODO */
if (arguments.length === 9) {
if (pixels && pixels.buffer instanceof ArrayBuffer) {
if (pixels.buffer.nativeObject) {
@@ -1117,17 +1163,29 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
this.context.texImage2D(target, level, internalformat, width, height, border, format, type, pixels.buffer.nativeObject);
} else {
if (pixels instanceof Uint8Array) {
- // this.context.texImage2D(target, level, internalformat, width, height, border, format, type, this.toNativeArray(pixels as any, 'byte'));
- this.context.texImage2DByte(target, level, internalformat, width, height, border, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.texImage2DByteBuffer(target, level, internalformat, width, height, border, format, type, pixels as any);
+ } else {
+ this.context.texImage2DByte(target, level, internalformat, width, height, border, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Uint16Array || pixels instanceof Int16Array) {
- // this.context.texImage2D(target, level, internalformat, width, height, border, format, type, this.toNativeArray(pixels as any, 'short'));
- this.context.texSubImage2DShort(target, level, internalformat, width, height, border, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.texSubImage2DShortBuffer(target, level, internalformat, width, height, border, format, type, pixels as any);
+ } else {
+ this.context.texSubImage2DShort(target, level, internalformat, width, height, border, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Uint32Array || pixels instanceof Int32Array) {
- // this.context.texImage2D(target, level, internalformat, width, height, border, format, type, this.toNativeArray(pixels as any, 'int'));
- this.context.texImage2DInt(target, level, internalformat, width, height, border, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.texImage2DIntBuffer(target, level, internalformat, width, height, border, format, type, pixels as any);
+ } else {
+ this.context.texImage2DInt(target, level, internalformat, width, height, border, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Float32Array) {
- // this.context.texImage2D(target, level, internalformat, width, height, border, format, type, this.toNativeArray(pixels as any, 'float'));
- this.context.texImage2DFloat(target, level, internalformat, width, height, border, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.texImage2DFloatBuffer(target, level, internalformat, width, height, border, format, type, pixels as any);
+ } else {
+ this.context.texImage2DFloat(target, level, internalformat, width, height, border, format, type, Array.from(pixels));
+ }
}
}
} else if (pixels instanceof ArrayBuffer) {
@@ -1136,8 +1194,11 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
// @ts-ignore
this.context.texImage2D(target, level, internalformat, width, height, border, format, type, pixels.nativeObject);
} else {
- // this.context.texImage2D(target, level, internalformat, width, height, border, format, type, this.toNativeArray(new Uint8Array(pixels as any) as any, 'byte'));
- this.context.texImage2DByte(target, level, internalformat, width, height, border, format, type, Array.from(new Uint8Array(pixels)));
+ if (this._isSupported) {
+ this.context.texImage2DByteBuffer(target, level, internalformat, width, height, border, format, type, pixels as any);
+ } else {
+ this.context.texImage2DByte(target, level, internalformat, width, height, border, format, type, Array.from(new Uint8Array(pixels)));
+ }
}
} else {
this.context.texImage2D(target, level, internalformat, width, height, border, format, type, pixels as any);
@@ -1169,8 +1230,6 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
this.context.texImage2D(target, level, internalformat, width, height, border._canvas.android);
}
}
- // this.blendFunc(this.SRC_ALPHA, this.ZERO);
- // this.disable(this.BLEND);
}
texParameterf(target: number, pname: number, param: number): void {
@@ -1198,28 +1257,42 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels.buffer.nativeObject);
} else {
if (pixels instanceof Uint8Array) {
- // this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, this.toNativeArray(pixels as any, 'byte'));
- this.context.texSubImage2DByte(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.texSubImage2DByteBuffer(target, level, xoffset, yoffset, width, height, format, type, pixels as any);
+ } else {
+ this.context.texSubImage2DByte(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Uint16Array || pixels instanceof Int16Array) {
- // this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, this.toNativeArray(pixels as any, 'short'));
- this.context.texSubImage2DShort(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.texSubImage2DShortBuffer(target, level, xoffset, yoffset, width, height, format, type, pixels as any);
+ } else {
+ this.context.texSubImage2DShort(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Uint32Array || pixels instanceof Int32Array) {
- // this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, this.toNativeArray(pixels as any, 'int'));
- this.context.texSubImage2DInt(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.texSubImage2DIntBuffer(target, level, xoffset, yoffset, width, height, format, type, pixels as any);
+ } else {
+ this.context.texSubImage2DInt(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels));
+ }
} else if (pixels instanceof Float32Array) {
- // this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, this.toNativeArray(pixels as any, 'float'));
- this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels));
+ if (this._isSupported) {
+ this.context.texSubImage2DByte(target, level, xoffset, yoffset, width, height, format, type, pixels as any);
+ } else {
+ this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, Array.from(pixels));
+ }
}
}
-
} else if (pixels instanceof ArrayBuffer) {
- // this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, this.toNativeArray(new Uint8Array(pixels as any) as any, 'byte'));
// @ts-ignore
if (pixels.nativeObject) {
// @ts-ignore
this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels.nativeObject);
} else {
- this.context.texSubImage2DByte(target, level, xoffset, yoffset, width, height, format, type, Array.from(new Uint8Array(pixels)));
+ if (this._isSupported) {
+ this.context.texSubImage2DByteBuffer(target, level, xoffset, yoffset, width, height, format, type, pixels as any);
+ } else {
+ this.context.texSubImage2DByte(target, level, xoffset, yoffset, width, height, format, type, Array.from(new Uint8Array(pixels)));
+ }
}
}
} else if (arguments.length === 7) {
@@ -1256,21 +1329,39 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
uniform1iv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform1iv');
this._checkArgs('uniform1iv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniform1iv(loc, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniform1ivBuffer(loc, value);
+ } else {
+ this.context.uniform1iv(loc, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniform1iv(loc, Array.from(value));
+ } else {
+ this.context.uniform1iv(loc, value);
+ }
+ }
}
uniform1fv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform1fv');
this._checkArgs('uniform1fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniform1fv(loc, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniform1fvBuffer(loc, value);
+ } else {
+ this.context.uniform1fv(loc, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniform1fv(loc, Array.from(value));
+ } else {
+ this.context.uniform1fv(loc, value);
+ }
+ }
}
uniform1i(location: WebGLUniformLocation, v0: number): void {
@@ -1290,21 +1381,39 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
uniform2iv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform2iv');
this._checkArgs('uniform2iv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniform2iv(loc, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniform2ivBuffer(loc, value);
+ } else {
+ this.context.uniform2iv(loc, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniform2iv(loc, Array.from(value));
+ } else {
+ this.context.uniform2iv(loc, value);
+ }
+ }
}
uniform2fv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform2fv');
this._checkArgs('uniform2fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniform2fv(loc, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniform2fvBuffer(loc, value);
+ } else {
+ this.context.uniform2fv(loc, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniform2fv(loc, Array.from(value));
+ } else {
+ this.context.uniform2fv(loc, value);
+ }
+ }
}
uniform2i(location: WebGLUniformLocation, v0: number, v1: number): void {
@@ -1324,21 +1433,39 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
uniform3iv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform3iv');
this._checkArgs('uniform3iv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniform3iv(loc, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniform3ivBuffer(loc, value);
+ } else {
+ this.context.uniform3iv(loc, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniform3iv(loc, Array.from(value));
+ } else {
+ this.context.uniform3iv(loc, value);
+ }
+ }
}
uniform3fv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform3fv');
this._checkArgs('uniform3fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniform3fv(loc, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniform3fvBuffer(loc, value);
+ } else {
+ this.context.uniform3fv(loc, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniform3fv(loc, Array.from(value));
+ } else {
+ this.context.uniform3fv(loc, value);
+ }
+ }
}
uniform3i(location: WebGLUniformLocation, v0: number, v1: number, v2: number): void {
@@ -1358,21 +1485,39 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
uniform4iv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform4iv');
this._checkArgs('uniform4iv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniform4iv(loc, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniform4ivBuffer(loc, value);
+ } else {
+ this.context.uniform4iv(loc, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniform4iv(loc, Array.from(value));
+ } else {
+ this.context.uniform4iv(loc, value);
+ }
+ }
}
uniform4fv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform4fv');
this._checkArgs('uniform4fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniform4fv(loc, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniform4fvBuffer(loc, value);
+ } else {
+ this.context.uniform4fv(loc, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniform4fv(loc, Array.from(value));
+ } else {
+ this.context.uniform4fv(loc, value);
+ }
+ }
}
uniform4i(location: WebGLUniformLocation, v0: number, v1: number, v2: number, v3: number): void {
@@ -1385,31 +1530,58 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void {
this._glCheckError('uniformMatrix2fv');
this._checkArgs('uniformMatrix2fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniformMatrix2fv(loc, transpose, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniformMatrix2fvBuffer(loc, transpose, value);
+ } else {
+ this.context.uniformMatrix2fv(loc, transpose, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniformMatrix2fv(loc, transpose, Array.from(value));
+ } else {
+ this.context.uniformMatrix2fv(loc, transpose, value);
+ }
+ }
}
uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void {
this._glCheckError('uniformMatrix3fv');
this._checkArgs('uniformMatrix3fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniformMatrix3fv(loc, transpose, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniformMatrix3fvBuffer(loc, transpose, value);
+ } else {
+ this.context.uniformMatrix3fv(loc, transpose, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniformMatrix3fv(loc, transpose, Array.from(value));
+ } else {
+ this.context.uniformMatrix3fv(loc, transpose, value);
+ }
+ }
}
uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void {
this._glCheckError('uniformMatrix4fv');
this._checkArgs('uniformMatrix4fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
- }
const loc = location ? location.native : 0;
- this.context.uniformMatrix4fv(loc, transpose, value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.uniformMatrix4fvBuffer(loc, transpose, value);
+ } else {
+ this.context.uniformMatrix4fv(loc, transpose, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.uniformMatrix4fv(loc, transpose, Array.from(value));
+ } else {
+ this.context.uniformMatrix4fv(loc, transpose, value);
+ }
+ }
}
useProgram(program: WebGLProgram): void {
@@ -1435,10 +1607,19 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
vertexAttrib1fv(index: number, value: number[]): void {
this._glCheckError('vertexAttrib1fv');
this._checkArgs('vertexAttrib1fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.vertexAttrib1fvBuffer(index, value);
+ } else {
+ this.context.vertexAttrib1fv(index, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.vertexAttrib1fv(index, Array.from(value));
+ } else {
+ this.context.vertexAttrib1fv(index, value);
+ }
}
- this.context.vertexAttrib1fv(index, value);
}
vertexAttrib2f(index: number, v0: number, v1: number): void {
@@ -1450,10 +1631,19 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
vertexAttrib2fv(index: number, value: number[]): void {
this._glCheckError('vertexAttrib2fv');
this._checkArgs('vertexAttrib2fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.vertexAttrib2fvBuffer(index, value);
+ } else {
+ this.context.vertexAttrib2fv(index, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.vertexAttrib2fv(index, Array.from(value));
+ } else {
+ this.context.vertexAttrib2fv(index, value);
+ }
}
- this.context.vertexAttrib2fv(index, value);
}
vertexAttrib3f(index: number, v0: number, v1: number, v2: number): void {
@@ -1465,10 +1655,19 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
vertexAttrib3fv(index: number, value: number[]): void {
this._glCheckError('vertexAttrib3fv');
this._checkArgs('vertexAttrib3fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.vertexAttrib3fvBuffer(index, value);
+ } else {
+ this.context.vertexAttrib3fv(index, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.vertexAttrib3fv(index, Array.from(value));
+ } else {
+ this.context.vertexAttrib3fv(index, value);
+ }
}
- this.context.vertexAttrib3fv(index, value);
}
vertexAttrib4f(index: number, v0: number, v1: number, v2: number, v3: number): void {
@@ -1480,10 +1679,19 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
vertexAttrib4fv(index: number, value: number[]): void {
this._glCheckError('vertexAttrib4fv');
this._checkArgs('vertexAttrib4fv', arguments);
- if (!Array.isArray(value)) {
- value = Array.from(value);
+ if (this._isSupported) {
+ if (!Array.isArray(value)) {
+ this.context.vertexAttrib4fvBuffer(index, value);
+ } else {
+ this.context.vertexAttrib4fv(index, value);
+ }
+ } else {
+ if (!Array.isArray(value)) {
+ this.context.vertexAttrib4fv(index, Array.from(value));
+ } else {
+ this.context.vertexAttrib4fv(index, value);
+ }
}
- this.context.vertexAttrib4fv(index, value);
}
vertexAttribPointer(index: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void {
diff --git a/packages/canvas/WebGL/WebGLRenderingContext/index.ios.ts b/packages/canvas/WebGL/WebGLRenderingContext/index.ios.ts
index 98019f77..38b8f331 100644
--- a/packages/canvas/WebGL/WebGLRenderingContext/index.ios.ts
+++ b/packages/canvas/WebGL/WebGLRenderingContext/index.ios.ts
@@ -150,13 +150,9 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (typeof srcData === 'number') {
this.context.bufferDataSize(target, srcData, usage);
} else if (srcData instanceof ArrayBuffer) {
- this.context.bufferDataSrcDataSize(
- target, srcData as any, srcData.byteLength, usage
- );
- } else if (srcData && srcData.buffer instanceof ArrayBuffer) {
- this.context.bufferDataSrcDataSize(
- target, srcData as any, srcData.byteLength, usage
- );
+ this.context.bufferDataSrcDataSize(target, srcData as any, srcData.byteLength, usage);
+ } else if (Utils.isTypedArray(srcData)) {
+ this.context.bufferDataSrcDataSizeOffset(target, srcData as any, srcData.byteLength, usage, srcData.byteOffset);
} else {
this.context.bufferDataSrcData(target, srcData, usage);
}
@@ -165,10 +161,11 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
bufferSubData(target: number, offset: number, srcData: ArrayBuffer | ArrayBufferView): void {
this._glCheckError('bufferSubData');
this._checkArgs('bufferSubData', arguments);
-
- this.context.bufferSubDataSrcDataSize(
- target, offset, srcData as any, srcData.byteLength
- );
+ if (Utils.isTypedArray(srcData)) {
+ this.context.bufferSubDataSrcDataSizeOs(target, offset, srcData as any, srcData.byteLength, (srcData as any).byteOffset);
+ } else {
+ this.context.bufferSubDataSrcDataSize(target, offset, srcData as any, srcData.byteLength);
+ }
}
checkFramebufferStatus(target: number): number {
@@ -578,19 +575,19 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
return new Float32Array(Utils.toJSArray(value));
case this.ARRAY_BUFFER_BINDING:
case this.ELEMENT_ARRAY_BUFFER_BINDING:
- if(value){
+ if (value) {
return new WebGLBuffer(value);
}
return null;
case this.CURRENT_PROGRAM:
- if(value){
+ if (value) {
return new WebGLProgram(value);
}
return null;
case this.COMPRESSED_TEXTURE_FORMATS:
return new Uint32Array(Utils.toJSArray(value));
case this.RENDERBUFFER_BINDING:
- if(value){
+ if (value) {
return new WebGLRenderbuffer(value);
}
return null;
@@ -848,9 +845,9 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void {
this._glCheckError('readPixels');
this._checkArgs('readPixels', arguments);
- if ((pixels && pixels.buffer instanceof ArrayBuffer)) {
- this.context.readPixels(x, y, width, height, format, type, pixels.buffer as any);
- }else if(pixels instanceof ArrayBuffer){
+ if (Utils.isTypedArray(pixels)) {
+ this.context.readPixelsOffset(x, y, width, height, format, type, pixels as any, pixels.byteOffset);
+ } else if (pixels instanceof ArrayBuffer) {
this.context.readPixels(x, y, width, height, format, type, pixels as any);
}
}
@@ -932,23 +929,23 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
// this.enable(this.BLEND);
/* TODO */
if (arguments.length === 9) {
- if ((pixels && pixels.buffer) || pixels instanceof ArrayBuffer) {
- this.context.texImage2DPixelsSize(
- target, level, internalformat, width, height, border, format, type, pixels as any, pixels.byteLength
- )
+ if (pixels instanceof ArrayBuffer) {
+ this.context.texImage2DPixelsSize(target, level, internalformat, width, height, border, format, type, pixels as any, pixels.byteLength);
+ }else if(Utils.isTypedArray(pixels)){
+ this.context.texImage2DPixelsSizeOffset(target, level, internalformat, width, height, border, format, type, pixels as any, pixels.byteLength, pixels.byteOffset);
} else {
this.context.texImage2D(target, level, internalformat, width, height, border, format, type, pixels as any);
}
} else if (arguments.length === 6) {
if (border && typeof border.tagName === 'string' && (border.tagName === 'VID' || border.tagName === 'VIDEO') && border._video && typeof border._video.getCurrentFrame === 'function') {
- border._video.getCurrentFrame(this.context,this, target, level, internalformat, width, height);
+ border._video.getCurrentFrame(this.context, this, target, level, internalformat, width, height);
} else if (border && typeof border.getCurrentFrame === 'function') {
border.getCurrentFrame(this.context, this, target, level, internalformat, width, height);
} else if (border instanceof ImageAsset) {
this.context.texImage2DAsset(target, level, internalformat, width, height, border.native);
} else if (border instanceof ImageBitmap) {
this.context.texImage2DBitmap(target, level, internalformat, width, height, border.native);
- } else if (border instanceof ImageSource) {
+ } else if (border instanceof ImageSource) {
this.context.texImage2DPixels(target, level, internalformat, width, height, border.ios);
} else if (border instanceof UIImage) {
this.context.texImage2DPixels(target, level, internalformat, width, height, border);
@@ -991,17 +988,18 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
this._glCheckError('texSubImage2D');
this._checkArgs('texSubImage2D', arguments);
if (arguments.length === 9) {
- if ((pixels && pixels.buffer) || pixels instanceof ArrayBuffer) {
- this.context.texSubImage2DPixelsSize(
- target, level, xoffset, yoffset, width, height, format, type, pixels as any, pixels.byteLength
- );
+ if (pixels instanceof ArrayBuffer) {
+ this.context.texSubImage2DPixelsSize(target, level, xoffset, yoffset, width, height, format, type, pixels as any, pixels.byteLength);
+ }else if(Utils.isTypedArray(pixels)){
+ this.context.texSubImage2DPixelsSizeOffset(target, level, xoffset, yoffset, width, height, format, type, pixels as any, pixels.byteLength, pixels.byteOffset);
} else {
this.context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels as any);
}
} else if (arguments.length === 7) {
if (format instanceof ImageAsset) {
this.context.texSubImage2DAsset(target, level, xoffset, yoffset, width, height, format.native);
- }if (format instanceof ImageBitmap) {
+ }
+ if (format instanceof ImageBitmap) {
this.context.texSubImage2DBitmap(target, level, xoffset, yoffset, width, height, format.native);
} else if (format instanceof UIImage) {
this.context.texSubImage2DPixels(target, level, xoffset, yoffset, width, height, format);
@@ -1038,16 +1036,16 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Int32Array)) {
value = new Int32Array(value) as any;
}
- this.context.uniform1iv(location.native, value as any, value.length);
+ this.context.uniform1ivOffset(location.native, value as any, value.length, (value as any).byteOffset);
}
uniform1fv(location: WebGLUniformLocation, value: number[]): void {
this._glCheckError('uniform1fv');
this._checkArgs('uniform1fv', arguments);
if (!(value instanceof Float32Array)) {
- value = new Float32Array(value)as any;
+ value = new Float32Array(value) as any;
}
- this.context.uniform1fv(location.native, value as any, value.length);
+ this.context.uniform1fvOffset(location.native, value as any, value.length, (value as any).byteOffset);
}
uniform1i(location: WebGLUniformLocation, v0: number): void {
@@ -1068,7 +1066,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Int32Array)) {
value = new Int32Array(value) as any;
}
- this.context.uniform2iv(location.native, value as any, value.length);
+ this.context.uniform2ivOffset(location.native, value as any, value.length, (value as any).byteOffset);
}
uniform2fv(location: WebGLUniformLocation, value: number[]): void {
@@ -1077,7 +1075,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.uniform2fv(location.native, value as any, value.length);
+ this.context.uniform2fvOffset(location.native, value as any, value.length, (value as any).byteOffset);
}
uniform2i(location: WebGLUniformLocation, v0: number, v1: number): void {
@@ -1098,7 +1096,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Int32Array)) {
value = new Int32Array(value) as any;
}
- this.context.uniform3iv(location.native, value as any, value.length);
+ this.context.uniform3ivOffset(location.native, value as any, value.length, (value as any).byteOffset);
}
uniform3fv(location: WebGLUniformLocation, value: number[]): void {
@@ -1107,7 +1105,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.uniform3fv(location.native, value as any, value.length);
+ this.context.uniform3fvOffset(location.native, value as any, value.length, (value as any).byteOffset);
}
uniform3i(location: WebGLUniformLocation, v0: number, v1: number, v2: number): void {
@@ -1128,7 +1126,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Int32Array)) {
value = new Int32Array(value) as any;
}
- this.context.uniform4iv(location.native, value as any, value.length);
+ this.context.uniform4ivOffset(location.native, value as any, value.length, (value as any).byteOffset);
}
uniform4fv(location: WebGLUniformLocation, value: number[]): void {
@@ -1137,7 +1135,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.uniform4fv(location.native, value as any, value.length);
+ this.context.uniform4fvOffset(location.native, value as any, value.length, (value as any).byteOffset);
}
uniform4i(location: WebGLUniformLocation, v0: number, v1: number, v2: number, v3: number): void {
@@ -1152,7 +1150,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.uniformMatrix2fv(location.native, transpose, value as any, value.length);
+ this.context.uniformMatrix2fvOffset(location.native, transpose, value as any, value.length, (value as any).byteOffset);
}
uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void {
@@ -1161,7 +1159,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.uniformMatrix3fv(location.native, transpose, value as any, value.length);
+ this.context.uniformMatrix3fvOffset(location.native, transpose, value as any, value.length, (value as any).byteOffset);
}
uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void {
@@ -1170,7 +1168,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.uniformMatrix4fv(location.native, transpose, value as any, value.length);
+ this.context.uniformMatrix4fvOffset(location.native, transpose, value as any, value.length, (value as any).byteOffset);
}
useProgram(program: WebGLProgram): void {
@@ -1199,7 +1197,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.vertexAttrib1fv(index, value as any);
+ this.context.vertexAttrib1fvOffset(index, value as any, (value as any).byteOffset);
}
vertexAttrib2f(index: number, v0: number, v1: number): void {
@@ -1214,7 +1212,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.vertexAttrib2fv(index, value as any);
+ this.context.vertexAttrib2fvOffset(index, value as any, (value as any).byteOffset);
}
vertexAttrib3f(index: number, v0: number, v1: number, v2: number): void {
@@ -1229,7 +1227,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.vertexAttrib3fv(index, value as any);
+ this.context.vertexAttrib3fvOffset(index, value as any, (value as any).byteOffset);
}
vertexAttrib4f(index: number, v0: number, v1: number, v2: number, v3: number): void {
@@ -1244,7 +1242,7 @@ export class WebGLRenderingContext extends WebGLRenderingContextBase {
if (!(value instanceof Float32Array)) {
value = new Float32Array(value) as any;
}
- this.context.vertexAttrib4fv(index, value as any);
+ this.context.vertexAttrib4fvOffset(index, value as any, (value as any).byteOffset);
}
vertexAttribPointer(index: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void {
diff --git a/packages/canvas/WebGL2/WebGL2RenderingContext/index.ios.ts b/packages/canvas/WebGL2/WebGL2RenderingContext/index.ios.ts
index 6dc24a73..58fedc02 100644
--- a/packages/canvas/WebGL2/WebGL2RenderingContext/index.ios.ts
+++ b/packages/canvas/WebGL2/WebGL2RenderingContext/index.ios.ts
@@ -80,7 +80,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
if (!(values instanceof Float32Array)) {
values = new Float32Array(values) as any;
}
- this.native.clearBufferfv(buffer.native, drawbuffer, values as any);
+ this.native.clearBufferfvOffset(buffer.native, drawbuffer, values as any, (values as any).byteOffset);
}
clearBufferiv(buffer: WebGLBuffer, drawbuffer: number, values: number[] | Int32Array): void {
@@ -88,7 +88,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
if (!(values instanceof Int32Array)) {
values = new Int32Array(values) as any;
}
- this.native.clearBufferiv(buffer.native, drawbuffer, values as any);
+ this.native.clearBufferivOffset(buffer.native, drawbuffer, values as any, (values as any).byteOffset);
}
clearBufferuiv(buffer: WebGLBuffer, drawbuffer: number, values: number[] | Uint32Array): void {
@@ -96,7 +96,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
if (!(values instanceof Uint32Array)) {
values = new Uint32Array(values) as any;
}
- this.native.clearBufferuiv(buffer.native, drawbuffer, values as any);
+ this.native.clearBufferuivOffset(buffer.native, drawbuffer, values as any, (values as any).byteOffset);
}
clientWaitSync(sync: WebGLSync, flags: number, timeout: number): number {
@@ -586,7 +586,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
uniform1uiv(location: number, data: Uint32Array): void {
this._glCheckError('uniform1uiv');
- this.native.uniform1uiv(location, data as any, data.length);
+ this.native.uniform1uivOffset(location, data as any, data.length, data.byteOffset);
}
uniform2ui(location: number, v0: number, v1: number): void {
@@ -596,7 +596,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
uniform2uiv(location: number, data: Uint32Array): void {
this._glCheckError('uniform2uiv');
- this.native.uniform2uiv(location, data as any, data.length);
+ this.native.uniform2uivOffset(location, data as any, data.length, data.byteOffset);
}
/* Sync objects */
@@ -610,7 +610,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
uniform3uiv(location: number, data: Uint32Array): void {
this._glCheckError('uniform3uiv');
- this.native.uniform3uiv(location, data as any, data.length);
+ this.native.uniform3uivOffset(location, data as any, data.length, data.byteOffset);
}
uniform4ui(location: number, v0: number, v1: number, v2: number, v3: number): void {
@@ -620,7 +620,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
uniform4uiv(location: number, data: Uint32Array): void {
this._glCheckError('uniform4uiv');
- this.native.uniform4uiv(location, data as any, data.length);
+ this.native.uniform4uivOffset(location, data as any, data.length, data.byteOffset);
}
uniformBlockBinding(program: WebGLProgram, uniformBlockIndex: number, uniformBlockBinding: number): void {
@@ -630,22 +630,22 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
uniformMatrix2x3fv(location: WebGLUniformLocation, transpose: boolean, data: Float32Array): void {
this._glCheckError('uniformMatrix2x3fv');
- this.native.uniformMatrix2x3fv(location.native, transpose, data as any, data.length);
+ this.native.uniformMatrix2x3fvOffset(location.native, transpose, data as any, data.length, data.byteOffset);
}
uniformMatrix2x4fv(location: WebGLUniformLocation, transpose: boolean, data: Float32Array): void {
this._glCheckError('uniformMatrix2x4fv');
- this.native.uniformMatrix2x4fv(location.native, transpose, data as any, data.length);
+ this.native.uniformMatrix2x4fvOffset(location.native, transpose, data as any, data.length, data.byteOffset);
}
uniformMatrix3x2fv(location: WebGLUniformLocation, transpose: boolean, data: Float32Array): void {
this._glCheckError('uniformMatrix3x2fv');
- this.native.uniformMatrix3x2fv(location.native, transpose, data as any, data.length);
+ this.native.uniformMatrix3x2fvOffset(location.native, transpose, data as any, data.length, data.byteOffset);
}
uniformMatrix3x4fv(location: WebGLUniformLocation, transpose: boolean, data: Float32Array): void {
this._glCheckError('uniformMatrix3x4fv');
- this.native.uniformMatrix3x4fv(location.native, transpose, data as any, data.length);
+ this.native.uniformMatrix3x4fvOffset(location.native, transpose, data as any, data.length, data.byteOffset);
}
uniformMatrix4x2fv(location: WebGLUniformLocation, transpose: boolean, data: Float32Array): void {
@@ -655,7 +655,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
uniformMatrix4x3fv(location: WebGLUniformLocation, transpose: boolean, data: Float32Array): void {
this._glCheckError('uniformMatrix4x3fv');
- this.native.uniformMatrix4x3fv(location.native, transpose, data as any, data.length);
+ this.native.uniformMatrix4x3fvOffset(location.native, transpose, data as any, data.length, data.byteOffset);
}
vertexAttribDivisor(index: number, divisor: number): void {
@@ -673,7 +673,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
if (!(value instanceof Int32Array)) {
value = new Int32Array(value) as any;
}
- this.native.vertexAttribI4iv(index, value as any);
+ this.native.vertexAttribI4ivOffset(index, value as any, (value as any).byteOffset);
}
vertexAttribI4ui(index: number, v0: number, v1: number, v2: number, v3: number): void {
@@ -686,7 +686,7 @@ export class WebGL2RenderingContext extends WebGL2RenderingContextBase {
if (!(value instanceof Uint32Array)) {
value = new Uint32Array(value) as any;
}
- this.native.vertexAttribI4uiv(index, value as any);
+ this.native.vertexAttribI4uivOffset(index, value as any, (value as any).byteOffset);
}
/* Miscellaneous constants */
diff --git a/packages/canvas/angular/index.ts b/packages/canvas/angular/index.ts
index 9281b11e..6ce422d4 100644
--- a/packages/canvas/angular/index.ts
+++ b/packages/canvas/angular/index.ts
@@ -1,7 +1,7 @@
import {NgModule, NO_ERRORS_SCHEMA} from '@angular/core';
import {registerElement} from '@nativescript/angular';
-registerElement('Canvas', () => require('Canvas').Canvas);
+registerElement('Canvas', () => require('@nativescript/canvas').Canvas);
@NgModule({
diff --git a/packages/canvas/package.json b/packages/canvas/package.json
index 070cd433..9ed18f75 100644
--- a/packages/canvas/package.json
+++ b/packages/canvas/package.json
@@ -1,6 +1,6 @@
{
"name": "@nativescript/canvas",
- "version": "1.0.0-alpha.2",
+ "version": "1.0.0-alpha.3",
"description": "DOM Canvas API for NativeScript",
"main": "index",
"typings": "index.d.ts",
@@ -33,7 +33,7 @@
"readmeFilename": "README.md",
"bootstrapper": "@nativescript/plugin-seed",
"dependencies": {
- "@nativescript-community/gesturehandler": "~0.1.45",
+ "@nativescript-community/gesturehandler": "~0.1.47",
"xmldom": "~0.6.0"
}
}
diff --git a/packages/canvas/platforms/android/include.gradle b/packages/canvas/platforms/android/include.gradle
index 867a2baa..fd80113c 100644
--- a/packages/canvas/platforms/android/include.gradle
+++ b/packages/canvas/platforms/android/include.gradle
@@ -6,5 +6,24 @@ allprojects {
}
dependencies {
- implementation 'org.nativescript:canvas:1.0.0-alpha.2'
+ implementation 'org.nativescript:canvas:1.0.0-alpha.4'
+ implementation "androidx.multidex:multidex:2.0.1"
}
+
+
+android {
+ defaultConfig {
+ multiDexEnabled true
+ }
+ packagingOptions {
+ exclude 'META-INF/DEPENDENCIES'
+ exclude 'META-INF/LICENSE'
+ exclude 'META-INF/LICENSE.txt'
+ exclude 'META-INF/license.txt'
+ exclude 'META-INF/NOTICE'
+ exclude 'META-INF/NOTICE.txt'
+ exclude 'META-INF/notice.txt'
+ exclude 'META-INF/ASL2.0'
+ exclude("META-INF/*.kotlin_module")
+ }
+}
\ No newline at end of file
diff --git a/packages/canvas/platforms/ios/Podfile b/packages/canvas/platforms/ios/Podfile
index 2d1ddb93..da529781 100644
--- a/packages/canvas/platforms/ios/Podfile
+++ b/packages/canvas/platforms/ios/Podfile
@@ -1,6 +1,6 @@
use_frameworks!
platform :ios, '11.0'
-pod 'CanvasNative' , '~> 1.0.0.alpha.2'
+pod 'CanvasNative' , '~> 1.0.0.alpha.3'
#pod 'CanvasNative', :path => "$(SRCROOT)/../../../../../"
#pod 'CanvasNative', :git => 'https://github.com/NativeScript/canvas.git', :tag => '1.0.0-alpha.2'
diff --git a/packages/canvas/src-native/canvas-android/app/src/main/java/org/nativescript/canvasdemo/MainActivity.kt b/packages/canvas/src-native/canvas-android/app/src/main/java/org/nativescript/canvasdemo/MainActivity.kt
index cdef43aa..d6991016 100644
--- a/packages/canvas/src-native/canvas-android/app/src/main/java/org/nativescript/canvasdemo/MainActivity.kt
+++ b/packages/canvas/src-native/canvas-android/app/src/main/java/org/nativescript/canvasdemo/MainActivity.kt
@@ -34,8 +34,8 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
- //canvas = findViewById(R.id.canvasView)
- svg = findViewById(R.id.svgView)
+ canvas = findViewById(R.id.canvasView)
+ //svg = findViewById(R.id.svgView)
svg?.ignorePixelScaling = false
// findViewById(R.id.parent)
// .addView(canvas)
@@ -244,7 +244,7 @@ class MainActivity : AppCompatActivity() {
// drawTransformGradientSvg()
// drawClipPathUnitsSvg()
- downloadSvg()
+ // downloadSvg()
// svg?.setSrc("""
//
diff --git a/packages/canvas/src-native/canvas-android/canvas/publish.gradle b/packages/canvas/src-native/canvas-android/canvas/publish.gradle
index d8bb8828..f7dd4315 100644
--- a/packages/canvas/src-native/canvas-android/canvas/publish.gradle
+++ b/packages/canvas/src-native/canvas-android/canvas/publish.gradle
@@ -21,7 +21,7 @@ signing {
group = "org.nativescript"
archivesBaseName = "canvas"
-version = "1.0.0-alpha.2"
+version = "1.0.0-alpha.4"
uploadArchives {
repositories {
diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/GLContext.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/GLContext.kt
index 77b075bd..a68fca63 100644
--- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/GLContext.kt
+++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/GLContext.kt
@@ -73,7 +73,7 @@ internal class GLContext {
if (offscreenTexture != null) {
GLES20.glClearColor(0f, 0f, 0f, 0f)
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
- if (!swapBuffers(mEGLSurface)) {
+ if (!mGLThread!!.getPaused() && !swapBuffers(mEGLSurface)) {
Log.e("JS", "GLContext: Cannot swap buffers!")
}
offscreenTexture!!.release()
@@ -115,7 +115,7 @@ internal class GLContext {
} else {
GLES20.glClearColor(0f, 0f, 0f, 0f)
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
- if (!swapBuffers(mEGLSurface)) {
+ if (!mGLThread!!.getPaused() && !swapBuffers(mEGLSurface)) {
Log.e("JS", "GLContext: Cannot swap buffers!")
}
if (canvasView.nativeContext > 0) {
@@ -151,13 +151,13 @@ internal class GLContext {
val canvasView = reference!!.get()
if (canvasView != null && canvasView.nativeContext != 0L && canvasView.pendingInvalidate) {
TNSCanvas.nativeFlush(canvasView.nativeContext)
- if (!swapBuffers(mEGLSurface)) {
+ if (!mGLThread!!.getPaused() && !swapBuffers(mEGLSurface)) {
Log.e("JS", "GLContext: Cannot swap buffers!")
}
canvasView.pendingInvalidate = false
} else {
// WebGL
- if (!swapBuffers(mEGLSurface)) {
+ if (!mGLThread!!.getPaused() && !swapBuffers(mEGLSurface)) {
Log.e("JS", "GLContext: Cannot swap buffers!")
}
if (canvasView != null) {
@@ -222,7 +222,7 @@ internal class GLContext {
)
}
if (mGLThread != null) {
- mGLThread!!.setPaused(false)
+ mGLThread!!.setPaused(true)
}
})
}
@@ -268,7 +268,8 @@ internal class GLContext {
@JvmField
var isStarted = false
- private var isPaused = false
+
+ internal var isPaused = false
var type = TNSCanvas.ContextType.NONE
@@ -277,6 +278,11 @@ internal class GLContext {
isPaused = paused
}
+ @Synchronized
+ fun getPaused(): Boolean {
+ return isPaused
+ }
+
@Synchronized
override fun start() {
super.start()
@@ -501,7 +507,7 @@ internal class GLContext {
bit = bit or GLES20.GL_STENCIL_BUFFER_BIT
}
GLES20.glClear(bit)
- if (!swapBuffers(mEGLSurface)) {
+ if (!mGLThread!!.getPaused() && !swapBuffers(mEGLSurface)) {
Log.e("JS", "GLContext: Cannot swap buffers!")
}
diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvasRenderingContext2D.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvasRenderingContext2D.kt
index f1492702..6341afcd 100644
--- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvasRenderingContext2D.kt
+++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSCanvasRenderingContext2D.kt
@@ -821,6 +821,7 @@ class TNSCanvasRenderingContext2D internal constructor(val canvas: TNSCanvas) :
height: Int,
repetition: Int
): TNSPattern? {
+ printLog("createPattern: imagebitmap")
val lock = CountDownLatch(1)
var value: TNSPattern? = null
canvas.queueEvent {
@@ -828,6 +829,7 @@ class TNSCanvasRenderingContext2D internal constructor(val canvas: TNSCanvas) :
canvas.nativeContext,
data, width, height, repetition
)
+
if (id > 0L) {
value = TNSPattern(id)
}
@@ -869,7 +871,7 @@ class TNSCanvasRenderingContext2D internal constructor(val canvas: TNSCanvas) :
src: TNSImageBitmap?,
repetition: TNSPatternRepetition = TNSPatternRepetition.Repeat
): TNSPattern? {
- printLog("createPattern: asset")
+ printLog("createPattern: imagebitmap")
if (src == null) return null
val lock = CountDownLatch(1)
var value: TNSPattern? = null
@@ -1612,6 +1614,14 @@ class TNSCanvasRenderingContext2D internal constructor(val canvas: TNSCanvas) :
repetition: Int
): Long
+
+ @JvmStatic
+ private external fun nativeCreatePatternEncoded(
+ context: Long,
+ data: ByteArray,
+ repetition: Int
+ ): Long
+
@JvmStatic
private external fun nativeCreatePatternWithAsset(
context: Long,
diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSTextDecoder.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSTextDecoder.kt
index 8b7bf767..74b2c072 100644
--- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSTextDecoder.kt
+++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSTextDecoder.kt
@@ -1,6 +1,7 @@
package org.nativescript.canvas
import java.nio.*
+import java.nio.charset.Charset
/**
* Created by triniwiz on 5/15/20
@@ -25,34 +26,88 @@ class TNSTextDecoder {
nativeDestroy(nativeDecoder)
}
- fun decode(buffer: ByteArray): String {
- return nativeDecode(nativeDecoder, buffer)
+ fun decode(buffer: ByteBuffer): String {
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
}
- fun decode(buffer: ByteBuffer): String {
- return nativeDecodeBuffer(nativeDecoder, buffer)
+ fun decode(bytes: ByteArray): String {
+ val result = nativeDecodeToBytes(nativeDecoder, bytes)
+ return String(result, Charset.defaultCharset())
}
fun decode(bytes: ShortArray): String {
val buffer = ShortBuffer.wrap(bytes)
- return nativeDecodeBuffer(nativeDecoder, buffer)
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
}
fun decode(bytes: IntArray): String {
val buffer = IntBuffer.wrap(bytes)
- return nativeDecodeBuffer(nativeDecoder, buffer)
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
}
fun decode(bytes: FloatArray): String {
val buffer = FloatBuffer.wrap(bytes)
- return nativeDecodeBuffer(nativeDecoder, buffer)
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
}
fun decode(bytes: DoubleArray): String {
val buffer = DoubleBuffer.wrap(bytes)
- return nativeDecodeBuffer(nativeDecoder, buffer)
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
+ }
+
+
+ fun decodeByteBuffer(buffer: ByteBuffer): String {
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
+ }
+
+ fun decodeShortBuffer(buffer: ShortBuffer): String {
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
}
+ fun decodeIntBuffer(buffer: IntBuffer): String {
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
+ }
+
+ fun decodeFloatBuffer(buffer: FloatBuffer): String {
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
+ }
+
+ fun decodeDoubleBuffer(buffer: DoubleBuffer): String {
+ val result = nativeDecodeBufferToBytes(nativeDecoder, buffer)
+ return String(result, Charset.defaultCharset())
+ }
+
+
+ fun decodeByte(bytes: ByteArray): String {
+ return decode(bytes)
+ }
+
+ fun decodeShort(bytes: ShortArray): String {
+ return decode(bytes)
+ }
+
+ fun decodeInt(bytes: IntArray): String {
+ return decode(bytes)
+ }
+
+ fun decodeFloat(bytes: FloatArray): String {
+ return decode(bytes)
+ }
+
+ fun decodeDouble(bytes: FloatArray): String {
+ return decode(bytes)
+ }
+
+
val encoding: String
get() = nativeGetEncoding(nativeDecoder)
@@ -71,5 +126,11 @@ class TNSTextDecoder {
@JvmStatic
private external fun nativeDecodeBuffer(decoder: Long, bytes: Buffer): String
+
+ @JvmStatic
+ private external fun nativeDecodeToBytes(decoder: Long, bytes: ByteArray): ByteArray
+
+ @JvmStatic
+ private external fun nativeDecodeBufferToBytes(decoder: Long, bytes: Buffer): ByteArray
}
}
diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGL2RenderingContext.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGL2RenderingContext.kt
index 031eb79b..e6d1a7d4 100644
--- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGL2RenderingContext.kt
+++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGL2RenderingContext.kt
@@ -261,6 +261,81 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
}
}
+ fun compressedTexSubImage3DByteBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ srcData: ByteBuffer,
+ srcOffset: Int,
+ srcLengthOverride: Int
+ ) {
+ compressedTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ srcData,
+ srcOffset,
+ srcLengthOverride
+ )
+ }
+
+
+ fun compressedTexSubImage3D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ srcData: ByteBuffer,
+ srcOffset: Int,
+ srcLengthOverride: Int
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ var size = srcData.capacity()
+ if (srcLengthOverride == 0) {
+ size -= srcOffset
+ } else if (srcLengthOverride > size - srcOffset) {
+
+ }
+ srcData.position(srcOffset)
+ GLES30.glCompressedTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ size,
+ srcData
+ )
+ lock.countDown()
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
fun copyBufferSubData(
readTarget: Int,
writeTarget: Int,
@@ -478,6 +553,23 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
}
}
+
+ fun drawBuffersBuffer(buffers: IntBuffer) {
+ drawBuffers(buffers)
+ }
+
+ fun drawBuffers(buffers: IntBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ GLES30.glDrawBuffers(buffers.capacity(), buffers)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
fun endQuery(target: Int) {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
@@ -936,7 +1028,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
info[0] = null
return@Runnable
}
- var name: ByteArray? = ByteArray(maxNameLength[0])
+ var name = ByteArray(maxNameLength[0])
val length = IntArray(1)
val size = IntArray(1)
val type = IntArray(1)
@@ -957,7 +1049,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
info[0] = null
return@Runnable
}
- name = Arrays.copyOfRange(name, 0, length[0])
+ name = name.copyOfRange(0, length[0])
val nameValue = String(name)
info[0] = WebGLActiveInfo(nameValue, size[0], type[0])
lock.countDown()
@@ -1235,7 +1327,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
source?.let {
- if(it.isDirect){
+ if (it.isDirect) {
nativeTexImage3DBuffer(
target,
level,
@@ -1249,7 +1341,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
it,
flipYWebGL
)
- }else {
+ } else {
nativeTexImage3DByteArray(
target,
level,
@@ -1302,7 +1394,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
source?.let {
- if(it.isDirect){
+ if (it.isDirect) {
nativeTexImage3DBuffer(
target,
level,
@@ -1316,7 +1408,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
it,
flipYWebGL
)
- }else {
+ } else {
nativeTexImage3DShortArray(
target,
level,
@@ -1369,7 +1461,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
source?.let {
- if(it.isDirect){
+ if (it.isDirect) {
nativeTexImage3DBuffer(
target,
level,
@@ -1383,7 +1475,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
it,
flipYWebGL
)
- }else {
+ } else {
nativeTexImage3DIntArray(
target,
level,
@@ -1436,7 +1528,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
source?.let {
- if(it.isDirect){
+ if (it.isDirect) {
nativeTexImage3DBuffer(
target,
level,
@@ -1450,7 +1542,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
it,
flipYWebGL
)
- }else {
+ } else {
nativeTexImage3DLongArray(
target,
level,
@@ -1503,7 +1595,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
source?.let {
- if(it.isDirect){
+ if (it.isDirect) {
nativeTexImage3DBuffer(
target,
level,
@@ -1517,7 +1609,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
it,
flipYWebGL
)
- }else {
+ } else {
nativeTexImage3DFloatArray(
target,
level,
@@ -1570,7 +1662,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
source?.let {
- if(it.isDirect){
+ if (it.isDirect) {
nativeTexImage3DBuffer(
target,
level,
@@ -1584,7 +1676,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
it,
flipYWebGL
)
- }else {
+ } else {
nativeTexImage3DDoubleArray(
target,
level,
@@ -1621,6 +1713,98 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
}
}
+
+ fun texImage3DByteBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ source: ByteBuffer?
+ ) {
+ texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
+ }
+
+
+ fun texImage3DShortBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ source: ShortBuffer?
+ ) {
+ texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
+ }
+
+ fun texImage3DIntBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ source: IntBuffer?
+ ) {
+ texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
+ }
+
+ fun texImage3DLongBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ source: LongBuffer?
+ ) {
+ texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
+ }
+
+ fun texImage3DFloatBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ source: FloatBuffer?
+ ) {
+ texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
+ }
+
+ fun texImage3DDoubleBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ source: DoubleBuffer?
+ ) {
+ texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
+ }
+
fun texImage3DByte(
target: Int,
level: Int,
@@ -1632,7 +1816,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
format: Int,
type: Int,
source: ByteArray?
- ){
+ ) {
texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
}
@@ -1648,7 +1832,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
format: Int,
type: Int,
source: ShortArray?
- ){
+ ) {
texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
}
@@ -1663,7 +1847,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
format: Int,
type: Int,
source: IntArray?
- ){
+ ) {
texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
}
@@ -1678,7 +1862,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
format: Int,
type: Int,
source: LongArray?
- ){
+ ) {
texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
}
@@ -1693,7 +1877,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
format: Int,
type: Int,
source: FloatArray?
- ){
+ ) {
texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
}
@@ -1708,7 +1892,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
format: Int,
type: Int,
source: DoubleArray?
- ){
+ ) {
texImage3D(target, level, internalformat, width, height, depth, border, format, type, source)
}
@@ -2320,8 +2504,21 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
type: Int,
srcData: ByteArray?,
srcOffset: Int = 0
- ){
- texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset)
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
}
@@ -2338,8 +2535,21 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
type: Int,
srcData: ShortArray?,
srcOffset: Int = 0
- ){
- texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset)
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
}
fun texSubImage3DInt(
@@ -2355,8 +2565,21 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
type: Int,
srcData: IntArray?,
srcOffset: Int = 0
- ){
- texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset)
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
}
@@ -2373,8 +2596,21 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
type: Int,
srcData: LongArray?,
srcOffset: Int = 0
- ){
- texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset)
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
}
@@ -2391,8 +2627,21 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
type: Int,
srcData: FloatArray?,
srcOffset: Int = 0
- ){
- texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset)
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
}
@@ -2409,12 +2658,28 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
type: Int,
srcData: DoubleArray?,
srcOffset: Int = 0
- ){
- texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, srcData, srcOffset)
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
}
- fun texSubImage3D(
+
+
+
+ fun texSubImage3DByteBuffer(
target: Int,
level: Int,
xoffset: Int,
@@ -2428,48 +2693,24 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
srcData: ByteBuffer?,
srcOffset: Int = 0
) {
- val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- srcData?.let {
- it.position(srcOffset)
- nativeTexSubImage3DBuffer(
- target,
- level,
- xoffset,
- yoffset,
- zoffset,
- width,
- height,
- depth,
- format,
- type,
- it,
- flipYWebGL
- )
- } ?: run {
- GLES30.glTexSubImage3D(
- target,
- level,
- xoffset,
- yoffset,
- zoffset,
- width,
- height,
- depth,
- format,
- type,
- null
- )
- }
- lock.countDown()
- })
- try {
- lock.await()
- } catch (ignored: InterruptedException) {
- }
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
}
- fun texSubImage3D(
+
+ fun texSubImage3DShortBuffer(
target: Int,
level: Int,
xoffset: Int,
@@ -2480,48 +2721,540 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
depth: Int,
format: Int,
type: Int,
- srcData: ByteArray?,
+ srcData: ShortBuffer?,
srcOffset: Int = 0
) {
- val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- srcData?.let {
- val size = it.size
- val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
- buffer.put(it)
- buffer.rewind()
- buffer.position(srcOffset)
- nativeTexSubImage3DBuffer(
- target,
- level,
- xoffset,
- yoffset,
- zoffset,
- width,
- height,
- depth,
- format,
- type,
- buffer,
- flipYWebGL
- )
- } ?: run {
- GLES30.glTexSubImage3D(
- target,
- level,
- xoffset,
- yoffset,
- zoffset,
- width,
- height,
- depth,
- format,
- type,
- null
- )
- }
- lock.countDown()
- })
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
+ }
+
+ fun texSubImage3DIntBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: IntBuffer?,
+ srcOffset: Int = 0
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
+ }
+
+
+ fun texSubImage3DLongBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: LongBuffer?,
+ srcOffset: Int = 0
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
+ }
+
+
+ fun texSubImage3DFloatBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: FloatBuffer?,
+ srcOffset: Int = 0
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
+ }
+
+
+ fun texSubImage3DDoubleBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: DoubleBuffer?,
+ srcOffset: Int = 0
+ ) {
+ texSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ srcData,
+ srcOffset
+ )
+ }
+
+
+
+ fun texSubImage3D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: ByteBuffer?,
+ srcOffset: Int = 0
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ srcData?.let {
+ it.position(srcOffset)
+ nativeTexSubImage3DBuffer(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ it,
+ flipYWebGL
+ )
+ } ?: run {
+ GLES30.glTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ null
+ )
+ }
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+
+ fun texSubImage3D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: ShortBuffer?,
+ srcOffset: Int = 0
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ srcData?.let {
+ it.position(srcOffset)
+ nativeTexSubImage3DBuffer(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ it,
+ flipYWebGL
+ )
+ } ?: run {
+ GLES30.glTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ null
+ )
+ }
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+
+
+
+ fun texSubImage3D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: IntBuffer?,
+ srcOffset: Int = 0
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ srcData?.let {
+ it.position(srcOffset)
+ nativeTexSubImage3DBuffer(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ it,
+ flipYWebGL
+ )
+ } ?: run {
+ GLES30.glTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ null
+ )
+ }
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+
+ fun texSubImage3D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: LongBuffer?,
+ srcOffset: Int = 0
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ srcData?.let {
+ it.position(srcOffset)
+ nativeTexSubImage3DBuffer(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ it,
+ flipYWebGL
+ )
+ } ?: run {
+ GLES30.glTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ null
+ )
+ }
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+
+ fun texSubImage3D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: FloatBuffer?,
+ srcOffset: Int = 0
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ srcData?.let {
+ it.position(srcOffset)
+ nativeTexSubImage3DBuffer(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ it,
+ flipYWebGL
+ )
+ } ?: run {
+ GLES30.glTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ null
+ )
+ }
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+
+ fun texSubImage3D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: DoubleBuffer?,
+ srcOffset: Int = 0
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ srcData?.let {
+ it.position(srcOffset)
+ nativeTexSubImage3DBuffer(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ it,
+ flipYWebGL
+ )
+ } ?: run {
+ GLES30.glTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ null
+ )
+ }
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun texSubImage3D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ zoffset: Int,
+ width: Int,
+ height: Int,
+ depth: Int,
+ format: Int,
+ type: Int,
+ srcData: ByteArray?,
+ srcOffset: Int = 0
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ srcData?.let {
+ val size = it.size
+ val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
+ buffer.put(it)
+ buffer.rewind()
+ buffer.position(srcOffset)
+ nativeTexSubImage3DBuffer(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ buffer,
+ flipYWebGL
+ )
+ } ?: run {
+ GLES30.glTexSubImage3D(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ null
+ )
+ }
+ lock.countDown()
+ })
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2938,6 +3671,60 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
}
}
+
+
+ fun uniform1uivBuffer(location: Int, data: IntBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 1
+ GLES30.glUniform1uiv(location, count, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform2uivBuffer(location: Int, data: IntBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 2
+ GLES30.glUniform2uiv(location, count, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform3uivBuffer(location: Int, data: IntBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 3
+ GLES30.glUniform3uiv(location, count, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform4uivBuffer(location: Int, data: IntBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 4
+ GLES30.glUniform4uiv(location, count, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
fun uniformBlockBinding(program: Int, uniformBlockIndex: Int, uniformBlockBinding: Int) {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
@@ -3028,6 +3815,89 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
}
}
+
+
+
+ fun uniformMatrix3x2fvBuffer(location: Int, transpose: Boolean, data: FloatBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 6
+ GLES30.glUniformMatrix3x2fv(location, count, transpose, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniformMatrix4x2fvBuffer(location: Int, transpose: Boolean, data: FloatBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 8
+ GLES30.glUniformMatrix4x2fv(location, count, transpose, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniformMatrix2x3fvBuffer(location: Int, transpose: Boolean, data: FloatBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 6
+ GLES30.glUniformMatrix2x3fv(location, count, transpose, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniformMatrix4x3fvBuffer(location: Int, transpose: Boolean, data: FloatBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 12
+ GLES30.glUniformMatrix4x3fv(location, count, transpose, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniformMatrix2x4fvBuffer(location: Int, transpose: Boolean, data: FloatBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 8
+ GLES30.glUniformMatrix2x4fv(location, count, transpose, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniformMatrix3x4fvBuffer(location: Int, transpose: Boolean, data: FloatBuffer) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ val count = data.capacity() / 12
+ GLES30.glUniformMatrix3x4fv(location, count, transpose, data)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+
+
fun vertexAttribDivisor(index: Int, divisor: Int) {
val lock = CountDownLatch(1)
runOnGLThread(Runnable {
@@ -3088,6 +3958,31 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
}
}
+
+ fun vertexAttribI4ivBuffer(index: Int, value: IntBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ GLES30.glVertexAttribI4iv(index, value)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun vertexAttribI4uivBuffer(index: Int, value: IntBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread(Runnable {
+ GLES30.glVertexAttribI4uiv(index, value)
+ lock.countDown()
+ })
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
/* Getting GL parameter information */
val READ_BUFFER = GLES30.GL_READ_BUFFER
val UNPACK_ROW_LENGTH = GLES30.GL_UNPACK_ROW_LENGTH
@@ -3446,7 +4341,6 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
)
-
@JvmStatic
private external fun nativeTexImage3DShortArray(
target: Int,
diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGLRenderingContext.kt b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGLRenderingContext.kt
index 0ece9cbe..8ad44861 100644
--- a/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGLRenderingContext.kt
+++ b/packages/canvas/src-native/canvas-android/canvas/src/main/java/org/nativescript/canvas/TNSWebGLRenderingContext.kt
@@ -57,10 +57,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun activeTexture(texture: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glActiveTexture(texture)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -69,10 +69,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun attachShader(program: Int, shader: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glAttachShader(program, shader)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -81,10 +81,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bindAttribLocation(program: Int, index: Int, name: String?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBindAttribLocation(program, index, name)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -93,10 +93,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bindBuffer(target: Int, buffer: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBindBuffer(target, buffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -105,10 +105,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bindBuffer(target: Int, buffer: Any?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBindBuffer(target, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -117,10 +117,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bindFramebuffer(target: Int, framebuffer: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBindFramebuffer(target, framebuffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -129,10 +129,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bindRenderbuffer(target: Int, renderbuffer: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBindRenderbuffer(target, renderbuffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -141,10 +141,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bindTexture(target: Int, texture: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBindTexture(target, texture)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -153,10 +153,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun blendColor(red: Float, green: Float, blue: Float, alpha: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBlendColor(red, green, blue, alpha)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -165,10 +165,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun blendEquation(mode: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBlendEquation(mode)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -177,10 +177,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun blendEquationSeparate(modeRGB: Int, modeAlpha: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBlendEquationSeparate(modeRGB, modeAlpha)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -189,10 +189,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun blendFunc(sfactor: Int, dfactor: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBlendFunc(sfactor, dfactor)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -201,10 +201,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun blendFuncSeparate(srcRGB: Int, dstRGB: Int, srcAlpha: Int, dstAlpha: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -213,10 +213,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferData(target: Int, size: Int, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferData(target, size, null, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -225,39 +225,39 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferData(target: Int, srcData: Any?, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferData(target, 0, null, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
- fun bufferDataByte(target: Int, srcData: ByteArray, usage: Int){
+ fun bufferDataByte(target: Int, srcData: ByteArray, usage: Int) {
bufferData(target, srcData, usage);
}
- fun bufferDataShort(target: Int, srcData: ShortArray, usage: Int){
+ fun bufferDataShort(target: Int, srcData: ShortArray, usage: Int) {
bufferData(target, srcData, usage)
}
- fun bufferDataFloat(target: Int, srcData: FloatArray, usage: Int){
+ fun bufferDataFloat(target: Int, srcData: FloatArray, usage: Int) {
bufferData(target, srcData, usage)
}
- fun bufferDataInt(target: Int, srcData: IntArray, usage: Int){
+ fun bufferDataInt(target: Int, srcData: IntArray, usage: Int) {
bufferData(target, srcData, usage)
}
fun bufferData(target: Int, srcData: ByteArray, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val buffer = ByteBuffer.wrap(srcData)
GLES20.glBufferData(target, srcData.size, buffer, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -266,12 +266,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferData(target: Int, srcData: ShortArray, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = srcData.size * SIZE_OF_SHORT
val buffer = ShortBuffer.wrap(srcData)
GLES20.glBufferData(target, size, buffer, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -280,12 +280,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferData(target: Int, srcData: FloatArray, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = srcData.size * SIZE_OF_FLOAT
val buffer = FloatBuffer.wrap(srcData)
GLES20.glBufferData(target, size, buffer, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -294,24 +294,42 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferData(target: Int, srcData: IntArray, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = srcData.size * SIZE_OF_INT
val buffer = IntBuffer.wrap(srcData)
GLES20.glBufferData(target, size, buffer, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
+
+ fun bufferDataByteBuffer(target: Int, srcData: ByteBuffer, usage: Int) {
+ bufferData(target, srcData, usage);
+ }
+
+ fun bufferDataShortBuffer(target: Int, srcData: ShortBuffer, usage: Int) {
+ bufferData(target, srcData, usage)
+ }
+
+ fun bufferDataFloatBuffer(target: Int, srcData: FloatBuffer, usage: Int) {
+ bufferData(target, srcData, usage)
+ }
+
+ fun bufferDataIntBuffer(target: Int, srcData: IntBuffer, usage: Int) {
+ bufferData(target, srcData, usage)
+ }
+
+
fun bufferData(target: Int, srcData: ByteBuffer, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferData(target, srcData.capacity(), srcData, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -320,10 +338,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferData(target: Int, srcData: ShortBuffer, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferData(target, srcData.capacity() * SIZE_OF_SHORT, srcData, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -332,10 +350,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferData(target: Int, srcData: IntBuffer, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferData(target, srcData.capacity() * SIZE_OF_INT, srcData, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -344,40 +362,40 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferData(target: Int, srcData: FloatBuffer, usage: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferData(target, srcData.capacity() * SIZE_OF_FLOAT, srcData, usage)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
- fun bufferSubDataByte(target: Int, offset: Int, srcData: ByteArray){
+ fun bufferSubDataByte(target: Int, offset: Int, srcData: ByteArray) {
bufferSubData(target, offset, srcData)
}
- fun bufferSubDataShort(target: Int, offset: Int, srcData: ShortArray){
+ fun bufferSubDataShort(target: Int, offset: Int, srcData: ShortArray) {
bufferSubData(target, offset, srcData)
}
- fun bufferSubDataInt(target: Int, offset: Int, srcData: IntArray){
+ fun bufferSubDataInt(target: Int, offset: Int, srcData: IntArray) {
bufferSubData(target, offset, srcData)
}
- fun bufferSubDataFloat(target: Int, offset: Int, srcData: FloatArray){
+ fun bufferSubDataFloat(target: Int, offset: Int, srcData: FloatArray) {
bufferSubData(target, offset, srcData)
}
fun bufferSubData(target: Int, offset: Int, srcData: ByteArray) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = srcData.size
val buffer = ByteBuffer.wrap(srcData)
GLES20.glBufferSubData(target, offset, size, buffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -386,13 +404,13 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferSubData(target: Int, offset: Int, srcData: ShortArray) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = srcData.size * SIZE_OF_SHORT
val buffer = ShortBuffer.wrap(srcData)
val os = SIZE_OF_SHORT * offset
GLES20.glBufferSubData(target, os, size, buffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -401,13 +419,13 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferSubData(target: Int, offset: Int, srcData: IntArray) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = srcData.size * SIZE_OF_INT
val buffer = IntBuffer.wrap(srcData)
val os = SIZE_OF_INT * offset
GLES20.glBufferSubData(target, os, size, buffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -416,25 +434,43 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferSubData(target: Int, offset: Int, srcData: FloatArray) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = srcData.size * SIZE_OF_FLOAT
val buffer = FloatBuffer.wrap(srcData)
val os = SIZE_OF_FLOAT * offset
GLES20.glBufferSubData(target, os, size, buffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
+
+ fun bufferSubDataByteBuffer(target: Int, offset: Int, srcData: ByteBuffer) {
+ bufferSubData(target, offset, srcData)
+ }
+
+ fun bufferSubDataShortBuffer(target: Int, offset: Int, srcData: ShortBuffer) {
+ bufferSubData(target, offset, srcData)
+ }
+
+ fun bufferSubDataIntBuffer(target: Int, offset: Int, srcData: IntBuffer) {
+ bufferSubData(target, offset, srcData)
+ }
+
+ fun bufferSubDataFloatBuffer(target: Int, offset: Int, srcData: FloatBuffer) {
+ bufferSubData(target, offset, srcData)
+ }
+
+
fun bufferSubData(target: Int, offset: Int, srcData: ByteBuffer) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferSubData(target, offset, srcData.capacity(), srcData)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -443,10 +479,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferSubData(target: Int, offset: Int, srcData: ShortBuffer) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferSubData(target, offset, srcData.capacity() * SIZE_OF_SHORT, srcData)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -455,10 +491,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferSubData(target: Int, offset: Int, srcData: IntBuffer) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferSubData(target, offset, srcData.capacity() * SIZE_OF_INT, srcData)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -467,10 +503,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun bufferSubData(target: Int, offset: Int, srcData: FloatBuffer) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glBufferSubData(target, offset, srcData.capacity() * SIZE_OF_FLOAT, srcData)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -480,10 +516,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun checkFramebufferStatus(target: Int): Int {
val lock = CountDownLatch(1)
val status = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
status[0] = GLES20.glCheckFramebufferStatus(target)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -493,13 +529,13 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun clear(mask: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
if (clearIfComposited(mask) !== HowToClear.CombinedClear) {
GLES20.glClear(mask)
}
updateCanvas()
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -512,10 +548,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
canvas.mClearColor[1] = green
canvas.mClearColor[2] = blue
canvas.mClearColor[3] = alpha
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glClearColor(red, green, blue, alpha)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -525,10 +561,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun clearDepth(depth: Float) {
val lock = CountDownLatch(1)
canvas.mClearDepth = depth
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glClearDepthf(depth)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -538,10 +574,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun clearStencil(stencil: Int) {
val lock = CountDownLatch(1)
canvas.mClearStencil = stencil
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glClearStencil(stencil)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -554,10 +590,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
canvas.mColorMask[1] = green
canvas.mColorMask[2] = blue
canvas.mColorMask[3] = alpha
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glColorMask(red, green, blue, alpha)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -649,16 +685,70 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun compileShader(shader: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glCompileShader(shader)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
+
+
+
+ fun compressedTexImage2DByteBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ border: Int,
+ pixels: ByteBuffer
+ ) {
+ compressedTexImage2D(target, level, internalformat, width, height, border, pixels)
+ }
+
+ fun compressedTexImage2DShortBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ border: Int,
+ pixels: ShortBuffer
+ ) {
+ compressedTexImage2D(target, level, internalformat, width, height, border, pixels)
+ }
+
+
+ fun compressedTexImage2DIntBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ border: Int,
+ pixels: IntBuffer
+ ) {
+ compressedTexImage2D(target, level, internalformat, width, height, border, pixels)
+ }
+
+
+ fun compressedTexImage2DFloatBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ border: Int,
+ pixels: FloatBuffer
+ ) {
+ compressedTexImage2D(target, level, internalformat, width, height, border, pixels)
+ }
+
+
fun compressedTexImage2DByte(
target: Int,
level: Int,
@@ -667,7 +757,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
height: Int,
border: Int,
pixels: ByteArray
- ){
+ ) {
compressedTexImage2D(target, level, internalformat, width, height, border, pixels)
}
@@ -679,7 +769,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
height: Int,
border: Int,
pixels: ShortArray
- ){
+ ) {
compressedTexImage2D(target, level, internalformat, width, height, border, pixels)
}
@@ -692,7 +782,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
height: Int,
border: Int,
pixels: IntArray
- ){
+ ) {
compressedTexImage2D(target, level, internalformat, width, height, border, pixels)
}
@@ -705,10 +795,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
height: Int,
border: Int,
pixels: FloatArray
- ){
+ ) {
compressedTexImage2D(target, level, internalformat, width, height, border, pixels)
}
+
fun compressedTexImage2D(
target: Int,
level: Int,
@@ -716,10 +807,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width: Int,
height: Int,
border: Int,
- pixels: ByteBuffer
+ pixels: ByteArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
+ val size = pixels.size
+ val buffer = ByteBuffer.wrap(pixels)
GLES20.glCompressedTexImage2D(
target,
level,
@@ -727,11 +820,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width,
height,
border,
- pixels.capacity(),
- pixels
+ size,
+ buffer
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -745,10 +838,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width: Int,
height: Int,
border: Int,
- pixels: ShortBuffer
+ pixels: ShortArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
+ val size = pixels.size * SIZE_OF_SHORT
+ val buffer = ShortBuffer.wrap(pixels)
GLES20.glCompressedTexImage2D(
target,
level,
@@ -756,11 +851,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width,
height,
border,
- pixels.capacity() * SIZE_OF_SHORT,
- pixels
+ size,
+ buffer
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -774,10 +869,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width: Int,
height: Int,
border: Int,
- pixels: IntBuffer
+ pixels: IntArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
+ val size = pixels.size * SIZE_OF_INT
+ val buffer = IntBuffer.wrap(pixels)
GLES20.glCompressedTexImage2D(
target,
level,
@@ -785,11 +882,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width,
height,
border,
- pixels.capacity() * SIZE_OF_INT,
- pixels
+ size,
+ buffer
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -803,10 +900,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width: Int,
height: Int,
border: Int,
- pixels: FloatBuffer
+ pixels: FloatArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
+ val size = pixels.size * SIZE_OF_FLOAT
+ val buffer = FloatBuffer.wrap(pixels)
GLES20.glCompressedTexImage2D(
target,
level,
@@ -814,17 +913,19 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width,
height,
border,
- pixels.capacity() * SIZE_OF_FLOAT,
- pixels
+ size,
+ buffer
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
+
+
fun compressedTexImage2D(
target: Int,
level: Int,
@@ -832,12 +933,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width: Int,
height: Int,
border: Int,
- pixels: ByteArray
+ pixels: ByteBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- val size = pixels.size
- val buffer = ByteBuffer.wrap(pixels)
+ runOnGLThread {
GLES20.glCompressedTexImage2D(
target,
level,
@@ -845,11 +944,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width,
height,
border,
- size,
- buffer
+ pixels.capacity(),
+ pixels
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -863,12 +962,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width: Int,
height: Int,
border: Int,
- pixels: ShortArray
+ pixels: ShortBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- val size = pixels.size * SIZE_OF_SHORT
- val buffer = ShortBuffer.wrap(pixels)
+ runOnGLThread {
GLES20.glCompressedTexImage2D(
target,
level,
@@ -876,11 +973,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width,
height,
border,
- size,
- buffer
+ pixels.capacity() * SIZE_OF_SHORT,
+ pixels
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -894,12 +991,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width: Int,
height: Int,
border: Int,
- pixels: IntArray
+ pixels: IntBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- val size = pixels.size * SIZE_OF_INT
- val buffer = IntBuffer.wrap(pixels)
+ runOnGLThread {
GLES20.glCompressedTexImage2D(
target,
level,
@@ -907,11 +1002,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width,
height,
border,
- size,
- buffer
+ pixels.capacity() * SIZE_OF_INT,
+ pixels
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -925,12 +1020,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width: Int,
height: Int,
border: Int,
- pixels: FloatArray
+ pixels: FloatBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- val size = pixels.size * SIZE_OF_FLOAT
- val buffer = FloatBuffer.wrap(pixels)
+ runOnGLThread {
GLES20.glCompressedTexImage2D(
target,
level,
@@ -938,11 +1031,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
width,
height,
border,
- size,
- buffer
+ pixels.capacity() * SIZE_OF_FLOAT,
+ pixels
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -950,6 +1043,63 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
}
+
+
+ fun compressedTexSubImage2DByteBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ pixels: ByteBuffer
+ ) {
+ compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, pixels)
+ }
+
+
+ fun compressedTexSubImage2DShortBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ pixels: ShortBuffer
+ ) {
+ compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, pixels)
+ }
+
+ fun compressedTexSubImage2DIntBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ pixels: IntBuffer
+ ) {
+ compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, pixels)
+ }
+
+ fun compressedTexSubImage2DFloatBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ pixels: FloatBuffer
+ ) {
+ compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, pixels)
+ }
+
+
+
fun compressedTexSubImage2DByte(
target: Int,
level: Int,
@@ -1014,7 +1164,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ByteBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glCompressedTexSubImage2D(
target,
level,
@@ -1027,7 +1177,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1046,7 +1196,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ShortBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glCompressedTexSubImage2D(
target,
level,
@@ -1059,7 +1209,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1078,7 +1228,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: IntBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glCompressedTexSubImage2D(
target,
level,
@@ -1091,7 +1241,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1109,7 +1259,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: FloatBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glCompressedTexSubImage2D(
target,
level,
@@ -1122,7 +1272,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1141,7 +1291,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ByteArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = pixels.size
val buffer = ByteBuffer.wrap(pixels)
GLES20.glCompressedTexSubImage2D(
@@ -1156,7 +1306,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
buffer
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1174,7 +1324,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ShortArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = pixels.size * SIZE_OF_SHORT
val buffer = ShortBuffer.wrap(pixels)
GLES20.glCompressedTexSubImage2D(
@@ -1189,7 +1339,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
buffer
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1207,7 +1357,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: IntArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = pixels.size * SIZE_OF_INT
val buffer = IntBuffer.wrap(pixels)
GLES20.glCompressedTexSubImage2D(
@@ -1222,7 +1372,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
buffer
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1240,7 +1390,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: FloatArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val size = pixels.size * SIZE_OF_FLOAT
val buffer = FloatBuffer.wrap(pixels)
GLES20.glCompressedTexSubImage2D(
@@ -1255,7 +1405,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
buffer
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1273,11 +1423,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
border: Int
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
clearIfComposited()
GLES20.glCopyTexImage2D(target, level, internalformat, x, y, width, height, border)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1295,11 +1445,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
height: Int
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
clearIfComposited()
GLES20.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1309,10 +1459,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun createBuffer(): Int {
val lock = CountDownLatch(1)
val bufferId = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glGenBuffers(1, bufferId, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1323,10 +1473,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun createFramebuffer(): Int {
val lock = CountDownLatch(1)
val frameBufferId = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glGenFramebuffers(1, frameBufferId, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1337,10 +1487,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun createProgram(): Int {
val lock = CountDownLatch(1)
val program = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
program[0] = GLES20.glCreateProgram()
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1351,10 +1501,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun createRenderbuffer(): Int {
val lock = CountDownLatch(1)
val renderBufferId = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glGenRenderbuffers(1, renderBufferId, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1365,10 +1515,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun createShader(type: Int): Int {
val lock = CountDownLatch(1)
val shader = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
shader[0] = GLES20.glCreateShader(type)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1379,10 +1529,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun createTexture(): Int {
val lock = CountDownLatch(1)
val textureId = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glGenTextures(1, textureId, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1392,10 +1542,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun cullFace(mode: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glCullFace(mode)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1404,11 +1554,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun deleteBuffer(buffer: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val id = intArrayOf(buffer)
GLES20.glDeleteBuffers(1, id, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1417,11 +1567,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun deleteFramebuffer(frameBuffer: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val id = intArrayOf(frameBuffer)
GLES20.glDeleteFramebuffers(1, id, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1430,10 +1580,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun deleteProgram(program: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glDeleteProgram(program)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1442,11 +1592,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun deleteRenderbuffer(renderbuffer: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val id = intArrayOf(renderbuffer)
GLES20.glDeleteRenderbuffers(1, id, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1455,10 +1605,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun deleteShader(shader: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glDeleteShader(shader)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1467,11 +1617,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun deleteTexture(texture: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val id = intArrayOf(texture)
GLES20.glDeleteTextures(1, id, 0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1480,10 +1630,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun depthFunc(func: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glDepthFunc(func)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1492,10 +1642,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun depthMask(flag: Boolean) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glDepthMask(flag)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1504,10 +1654,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun depthRange(zNear: Float, zFar: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glDepthRangef(zNear, zFar)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1516,10 +1666,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun detachShader(program: Int, shader: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glDetachShader(program, shader)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1528,10 +1678,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun disable(cap: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glDisable(cap)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1540,10 +1690,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun disableVertexAttribArray(index: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glDisableVertexAttribArray(index)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1552,12 +1702,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun drawArrays(mode: Int, first: Int, count: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
clearIfComposited()
GLES20.glDrawArrays(mode, first, count)
updateCanvas()
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1566,12 +1716,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun drawElements(mode: Int, count: Int, type: Int, offset: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
clearIfComposited()
GLES20.glDrawElements(mode, count, type, offset)
updateCanvas()
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1580,10 +1730,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun enable(cap: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glEnable(cap)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1592,10 +1742,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun enableVertexAttribArray(index: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glEnableVertexAttribArray(index)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1604,10 +1754,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun finish() {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glFinish()
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1616,10 +1766,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun flush() {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glFlush()
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1633,10 +1783,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
renderbuffer: Int
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1645,10 +1795,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun framebufferTexture2D(target: Int, attachment: Int, textarget: Int, texture: Int, level: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glFramebufferTexture2D(target, attachment, textarget, texture, level)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1657,10 +1807,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun frontFace(mode: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glFrontFace(mode)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1669,10 +1819,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun generateMipmap(target: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glGenerateMipmap(target)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1682,7 +1832,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getActiveAttrib(program: Int, index: Int): WebGLActiveInfo {
val lock = CountDownLatch(1)
val info = WebGLActiveInfo()
- runOnGLThread(Runnable { //IntBuffer length = IntBuffer.allocate(1);
+ runOnGLThread { //IntBuffer length = IntBuffer.allocate(1);
//GLES20.glGetProgramiv(program, GLES20.GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, length);
val length = IntArray(1)
GLES20.glGetProgramiv(program, GLES20.GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, length, 0)
@@ -1705,7 +1855,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
info.size = size[0]
info.type = type[0]
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1716,7 +1866,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getActiveUniform(program: Int, index: Int): WebGLActiveInfo {
val lock = CountDownLatch(1)
val info = WebGLActiveInfo()
- runOnGLThread(Runnable {
+ runOnGLThread {
val length = IntArray(1)
val size = IntArray(1)
val type = IntArray(1)
@@ -1738,7 +1888,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
info.size = size[0]
info.type = type[0]
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1749,7 +1899,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getAttachedShaders(program: Int): IntArray? {
val lock = CountDownLatch(1)
val shadersList = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = IntArray(1)
GLES20.glGetProgramiv(program, GLES20.GL_ATTACHED_SHADERS, count, 0)
val shaders = IntArray(count[0])
@@ -1757,7 +1907,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
GLES20.glGetAttachedShaders(program, count[0], written, 0, shaders, 0)
shadersList[0] = shaders
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1768,10 +1918,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getAttribLocation(program: Int, name: String?): Int {
val lock = CountDownLatch(1)
val location = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
location[0] = GLES20.glGetAttribLocation(program, name)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1782,13 +1932,13 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getBufferParameter(target: Int, pname: Int): Int {
val lock = CountDownLatch(1)
val parameter = IntArray(1)
- runOnGLThread(Runnable { // IntBuffer params = IntBuffer.allocate(1);
+ runOnGLThread { // IntBuffer params = IntBuffer.allocate(1);
// GLES20.glGetBufferParameteriv(target, pname, params);
val params = IntArray(1)
GLES20.glGetBufferParameteriv(target, pname, params, 0)
parameter[0] = params[0]
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1826,10 +1976,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
get() {
val lock = CountDownLatch(1)
val error = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
error[0] = GLES20.glGetError()
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1840,7 +1990,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getExtension(name: String): Any? {
val lock = CountDownLatch(1)
val value = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val extensions = GLES20.glGetString(GLES20.GL_EXTENSIONS)
if (name == "EXT_blend_minmax" && extensions.contains("GL_EXT_blend_minmax")) {
value[0] = EXT_blend_minmax()
@@ -1921,7 +2071,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
value[0] = null
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1936,7 +2086,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
): TNSFramebufferAttachmentParameter {
val lock = CountDownLatch(1)
val result = TNSFramebufferAttachmentParameter()
- runOnGLThread(Runnable { // IntBuffer params = IntBuffer.allocate(1);
+ runOnGLThread { // IntBuffer params = IntBuffer.allocate(1);
// GLES20.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
val params = IntArray(1)
GLES20.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params, 0)
@@ -1966,7 +2116,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
result.value = params[0]
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -1981,7 +2131,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
open fun getParameter(pname: Int): Any? {
val lock = CountDownLatch(1)
val parameter = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
when (pname) {
ACTIVE_TEXTURE, ALPHA_BITS, ARRAY_BUFFER_BINDING, BLEND_DST_ALPHA, BLEND_DST_RGB, BLEND_EQUATION, BLEND_EQUATION_ALPHA, BLEND_SRC_ALPHA, BLEND_SRC_RGB, BLUE_BITS, CULL_FACE_MODE, CURRENT_PROGRAM, DEPTH_BITS, DEPTH_FUNC, ELEMENT_ARRAY_BUFFER_BINDING, FRAMEBUFFER_BINDING, FRONT_FACE, GENERATE_MIPMAP_HINT, GREEN_BITS, IMPLEMENTATION_COLOR_READ_FORMAT, IMPLEMENTATION_COLOR_READ_TYPE, MAX_COMBINED_TEXTURE_IMAGE_UNITS, MAX_CUBE_MAP_TEXTURE_SIZE, MAX_FRAGMENT_UNIFORM_VECTORS, MAX_RENDERBUFFER_SIZE, MAX_TEXTURE_IMAGE_UNITS, MAX_TEXTURE_SIZE, MAX_VARYING_VECTORS, MAX_VERTEX_ATTRIBS, MAX_VERTEX_TEXTURE_IMAGE_UNITS, MAX_VERTEX_UNIFORM_VECTORS, PACK_ALIGNMENT, RED_BITS, RENDERBUFFER_BINDING, SAMPLE_BUFFERS, SAMPLES, STENCIL_BACK_FAIL, STENCIL_BACK_FUNC, STENCIL_BACK_PASS_DEPTH_FAIL, STENCIL_BACK_PASS_DEPTH_PASS, STENCIL_BACK_REF, STENCIL_BACK_VALUE_MASK, STENCIL_BACK_WRITEMASK, STENCIL_BITS, STENCIL_CLEAR_VALUE, STENCIL_FAIL, STENCIL_FUNC, STENCIL_PASS_DEPTH_FAIL, STENCIL_PASS_DEPTH_PASS, STENCIL_REF, STENCIL_VALUE_MASK, STENCIL_WRITEMASK, SUBPIXEL_BITS, TEXTURE_BINDING_2D, TEXTURE_BINDING_CUBE_MAP, UNPACK_ALIGNMENT -> {
// IntBuffer param = IntBuffer.allocate(1);
@@ -2050,7 +2200,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
else -> parameter[0] = null
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2061,10 +2211,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getProgramInfoLog(program: Int): String? {
val lock = CountDownLatch(1)
val infoLog = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
infoLog[0] = GLES20.glGetProgramInfoLog(program)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2075,7 +2225,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getProgramParameter(program: Int, pname: Int): Any? {
val lock = CountDownLatch(1)
val parameter = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val param = IntArray(1)
GLES20.glGetProgramiv(program, pname, param, 0)
when (pname) {
@@ -2085,7 +2235,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
else -> parameter[0] = param[0]
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2096,12 +2246,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getRenderbufferParameter(target: Int, pname: Int): Int {
val lock = CountDownLatch(1)
val parameter = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val params = IntArray(1)
GLES20.glGetRenderbufferParameteriv(target, pname, params, 0)
parameter[0] = params[0]
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2112,10 +2262,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getShaderInfoLog(shader: Int): String? {
val lock = CountDownLatch(1)
val infoLog = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
infoLog[0] = GLES20.glGetShaderInfoLog(shader)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2126,7 +2276,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getShaderParameter(shader: Int, pname: Int): Any? {
val lock = CountDownLatch(1)
val parameter = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val params = IntArray(1)
GLES20.glGetShaderiv(shader, pname, params, 0)
when (pname) {
@@ -2134,7 +2284,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
else -> parameter[0] = params[0]
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2146,7 +2296,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
val lock = CountDownLatch(1)
val precisionFormat = WebGLShaderPrecisionFormat()
//final boolean[] hasError = new boolean[1];
- runOnGLThread(Runnable {
+ runOnGLThread {
val range = IntArray(2)
val precision = IntArray(1)
GLES20.glGetShaderPrecisionFormat(shaderType, precisionType, range, 0, precision, 0)
@@ -2160,7 +2310,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
precisionFormat.rangeMax = range[1]
precisionFormat.precision = precision[0]
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2173,10 +2323,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getShaderSource(shader: Int): String? {
val lock = CountDownLatch(1)
val source = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
source[0] = GLES20.glGetShaderSource(shader)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2188,11 +2338,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
get() {
val lock = CountDownLatch(1)
val extensions = ArrayList>()
- runOnGLThread(Runnable {
+ runOnGLThread {
val glExtensions = GLES20.glGetString(GLES20.GL_EXTENSIONS)
extensions.add(glExtensions.split(" ").toTypedArray())
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2204,12 +2354,12 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
val lock = CountDownLatch(1)
val parameters = IntArray(1)
val hasError = BooleanArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val params = IntArray(1)
GLES20.glGetTexParameteriv(target, pname, params, 0)
parameters[0] = params[0]
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2228,7 +2378,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getUniform(program: Int, location: Int): Any? {
val lock = CountDownLatch(1)
val uniform = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val type = IntArray(1)
GLES20.glGetActiveUniform(program, location, 0, null, 0, null, 0, type, 0, null, 0)
when (type[0]) {
@@ -2321,7 +2471,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
}
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2332,10 +2482,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getUniformLocation(program: Int, name: String?): Int {
val lock = CountDownLatch(1)
val location = IntArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
location[0] = GLES20.glGetUniformLocation(program, name)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2346,7 +2496,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getVertexAttrib(index: Int, pname: Int): Any? {
val lock = CountDownLatch(1)
val attrib = arrayOfNulls(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
if (pname == CURRENT_VERTEX_ATTRIB) {
val params = FloatArray(4)
GLES20.glGetVertexAttribfv(index, pname, params, 0)
@@ -2362,7 +2512,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
}
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2373,13 +2523,13 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun getVertexAttribOffset(index: Int, pname: Int): Long {
val lock = CountDownLatch(1)
val offset = LongArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val buffer = ByteBuffer.allocateDirect(SIZE_OF_LONG).order(ByteOrder.nativeOrder())
// LongBuffer buffer = LongBuffer.allocate(1);
nativeGetVertexAttribOffset(index, pname, buffer)
offset[0] = buffer[0].toLong()
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2389,10 +2539,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun hint(target: Int, mode: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glHint(target, mode)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2402,10 +2552,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun isBuffer(buffer: Int): Boolean {
val lock = CountDownLatch(1)
val value = BooleanArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
value[0] = GLES20.glIsBuffer(buffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2425,10 +2575,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun isEnabled(cap: Int): Boolean {
val lock = CountDownLatch(1)
val value = BooleanArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
value[0] = GLES20.glIsEnabled(cap)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2439,10 +2589,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun isFramebuffer(framebuffer: Int): Boolean {
val lock = CountDownLatch(1)
val value = BooleanArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
value[0] = GLES20.glIsFramebuffer(framebuffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2453,10 +2603,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun isProgram(program: Int): Boolean {
val lock = CountDownLatch(1)
val value = BooleanArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
value[0] = GLES20.glIsProgram(program)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2467,10 +2617,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun isRenderbuffer(renderbuffer: Int): Boolean {
val lock = CountDownLatch(1)
val value = BooleanArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
value[0] = GLES20.glIsRenderbuffer(renderbuffer)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2481,10 +2631,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun isShader(shader: Int): Boolean {
val lock = CountDownLatch(1)
val value = BooleanArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
value[0] = GLES20.glIsShader(shader)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2495,10 +2645,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun isTexture(texture: Int): Boolean {
val lock = CountDownLatch(1)
val value = BooleanArray(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
value[0] = GLES20.glIsTexture(texture)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2508,10 +2658,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun lineWidth(width: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glLineWidth(width)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2520,10 +2670,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun linkProgram(program: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glLinkProgram(program)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2564,7 +2714,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
private var colorSpaceConversionWebGL = -1
fun pixelStorei(pname: Int, param: Any?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
when (pname) {
GLES20.GL_PACK_ALIGNMENT, GLES20.GL_UNPACK_ALIGNMENT -> GLES20.glPixelStorei(
pname,
@@ -2578,7 +2728,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
}
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2587,10 +2737,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun polygonOffset(factor: Float, units: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glPolygonOffset(factor, units)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2621,6 +2771,20 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
readPixels(x, y, width, height, format, type, pixels)
}
+
+
+ fun readPixelsInt(
+ x: Int,
+ y: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: IntArray
+ ) {
+ readPixels(x, y, width, height, format, type, pixels)
+ }
+
fun readPixelsFloat(
x: Int,
y: Int,
@@ -2634,18 +2798,56 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
}
- fun readPixelsInt(
+ fun readPixelsByteBuffer(
x: Int,
y: Int,
width: Int,
height: Int,
format: Int,
type: Int,
- pixels: IntArray
+ pixels: ByteBuffer
+ ) {
+ readPixels(x, y, width, height, format, type, pixels)
+ }
+
+ fun readPixelsShortBuffer(
+ x: Int,
+ y: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: ShortBuffer
+ ) {
+ readPixels(x, y, width, height, format, type, pixels)
+ }
+
+
+ fun readPixelsIntBuffer(
+ x: Int,
+ y: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: IntBuffer
) {
readPixels(x, y, width, height, format, type, pixels)
}
+ fun readPixelsFloatBuffer(
+ x: Int,
+ y: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: FloatBuffer
+ ) {
+ readPixels(x, y, width, height, format, type, pixels)
+ }
+
+
fun readPixels(
x: Int,
y: Int,
@@ -2656,11 +2858,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ByteBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- // clearIfComposited()
+ runOnGLThread {
+ // clearIfComposited()
GLES20.glReadPixels(x, y, width, height, format, type, pixels)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2677,11 +2879,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ShortBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
// clearIfComposited()
GLES20.glReadPixels(x, y, width, height, format, type, pixels)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2698,11 +2900,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: IntBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- // clearIfComposited()
+ runOnGLThread {
+ // clearIfComposited()
GLES20.glReadPixels(x, y, width, height, format, type, pixels)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2720,11 +2922,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: FloatBuffer
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- // clearIfComposited()
+ runOnGLThread {
+ // clearIfComposited()
GLES20.glReadPixels(x, y, width, height, format, type, pixels)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2742,11 +2944,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ByteArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- // clearIfComposited()
+ runOnGLThread {
+ // clearIfComposited()
GLES20.glReadPixels(x, y, width, height, format, type, ByteBuffer.wrap(pixels))
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2763,11 +2965,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ShortArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- // clearIfComposited()
+ runOnGLThread {
+ // clearIfComposited()
GLES20.glReadPixels(x, y, width, height, format, type, ShortBuffer.wrap(pixels))
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2784,11 +2986,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: FloatArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- // clearIfComposited()
+ runOnGLThread {
+ // clearIfComposited()
GLES20.glReadPixels(x, y, width, height, format, type, FloatBuffer.wrap(pixels))
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2805,11 +3007,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: IntArray
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- // clearIfComposited()
+ runOnGLThread {
+ // clearIfComposited()
GLES20.glReadPixels(x, y, width, height, format, type, IntBuffer.wrap(pixels))
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2818,10 +3020,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun renderbufferStorage(target: Int, internalFormat: Int, width: Int, height: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glRenderbufferStorage(target, internalFormat, width, height)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2830,10 +3032,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun sampleCoverage(value: Float, invert: Boolean) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glSampleCoverage(value, invert)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2842,10 +3044,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun scissor(x: Int, y: Int, width: Int, height: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glScissor(x, y, width, height)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2854,10 +3056,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun shaderSource(shader: Int, source: String?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glShaderSource(shader, source)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2866,10 +3068,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun stencilFunc(func: Int, ref: Int, mask: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glStencilFunc(func, ref, mask)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2896,10 +3098,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
else -> {
}
}
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glStencilFuncSeparate(face, func, ref, mask)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2910,10 +3112,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
val lock = CountDownLatch(1)
canvas.mStencilMask = mask
canvas.mStencilMaskBack = mask
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glStencilMask(mask)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2937,10 +3139,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
else -> {
}
}
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glStencilMaskSeparate(face, mask)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2949,10 +3151,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun stencilOp(fail: Int, zfail: Int, zpass: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glStencilOp(fail, zfail, zpass)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -2961,16 +3163,76 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun stencilOpSeparate(face: Int, fail: Int, zfail: Int, zpass: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glStencilOpSeparate(face, fail, zfail, zpass)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
+ fun texImage2DByteBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ pixels: ByteBuffer?
+ ) {
+ texImage2D(target, level, internalformat, width, height, border, format, type, pixels)
+ }
+
+
+ fun texImage2DShortBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ pixels: ShortBuffer?
+ ) {
+ texImage2D(target, level, internalformat, width, height, border, format, type, pixels)
+ }
+
+
+ fun texImage2DIntBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ pixels: IntBuffer?
+ ) {
+ texImage2D(target, level, internalformat, width, height, border, format, type, pixels)
+ }
+
+
+ fun texImage2DFloatBuffer(
+ target: Int,
+ level: Int,
+ internalformat: Int,
+ width: Int,
+ height: Int,
+ border: Int,
+ format: Int,
+ type: Int,
+ pixels: FloatBuffer?
+ ) {
+ texImage2D(target, level, internalformat, width, height, border, format, type, pixels)
+ }
+
+
fun texImage2D(
target: Int,
level: Int,
@@ -2983,7 +3245,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ByteBuffer?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
if (it.isDirect) {
nativeTexImage2DBuffer(
@@ -3027,7 +3289,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3047,7 +3309,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ShortBuffer?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
if (it.isDirect) {
nativeTexImage2DBuffer(
@@ -3091,13 +3353,14 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
+
fun texImage2D(
target: Int,
level: Int,
@@ -3110,7 +3373,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: IntBuffer?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
if (it.isDirect) {
nativeTexImage2DBuffer(
@@ -3154,7 +3417,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3174,7 +3437,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: FloatBuffer?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
if (it.isDirect) {
nativeTexImage2DBuffer(
@@ -3217,7 +3480,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3234,7 +3497,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
format: Int,
type: Int,
pixels: ByteArray?
- ){
+ ) {
texImage2D(target, level, internalformat, width, height, border, format, type, pixels)
}
@@ -3248,11 +3511,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
format: Int,
type: Int,
pixels: ShortArray?
- ){
+ ) {
texImage2D(target, level, internalformat, width, height, border, format, type, pixels)
}
-
fun texImage2DInt(
target: Int,
level: Int,
@@ -3263,7 +3525,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
format: Int,
type: Int,
pixels: IntArray?
- ){
+ ) {
texImage2D(target, level, internalformat, width, height, border, format, type, pixels)
}
@@ -3277,12 +3539,11 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
format: Int,
type: Int,
pixels: FloatArray?
- ){
+ ) {
texImage2D(target, level, internalformat, width, height, border, format, type, pixels)
}
-
fun texImage2D(
target: Int,
level: Int,
@@ -3295,7 +3556,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ByteArray?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
nativeTexImage2DByteArray(
target,
@@ -3323,7 +3584,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3342,7 +3603,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ShortArray?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
nativeTexImage2DShortArray(
target,
@@ -3370,7 +3631,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3389,7 +3650,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: IntArray?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
nativeTexImage2DIntArray(
target,
@@ -3417,7 +3678,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3436,7 +3697,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: FloatArray?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
nativeTexImage2DFloatArray(
target,
@@ -3464,7 +3725,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3481,7 +3742,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
) {
val ss = canvas.snapshot()
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
nativeTexImage2DByteArray(
target,
level,
@@ -3495,7 +3756,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
flipYWebGL
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3511,7 +3772,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
bitmap: TNSImageBitmap
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
nativeTexImage2DAsset(
target,
level,
@@ -3523,7 +3784,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
flipYWebGL
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3539,7 +3800,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
asset: TNSImageAsset
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
nativeTexImage2DAsset(
target,
level,
@@ -3551,7 +3812,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
flipYWebGL
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3567,7 +3828,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: Bitmap
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
nativeTexImage2DBitmap(
target,
level,
@@ -3581,7 +3842,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
flipYWebGL
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3590,10 +3851,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun texParameterf(target: Int, pname: Int, param: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glTexParameterf(target, pname, param)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3602,10 +3863,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun texParameteri(target: Int, pname: Int, param: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glTexParameteri(target, pname, param)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3641,7 +3902,136 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
}
- fun texSubImage2DInt(
+ fun texSubImage2DInt(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: IntArray?
+ ) {
+ texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ }
+
+
+
+
+ fun texSubImage2DByteBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: ByteBuffer?
+ ) {
+ texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ }
+
+ fun texSubImage2DShortBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: ShortBuffer?
+ ) {
+ texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ }
+
+ fun texSubImage2DIntBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: IntBuffer?
+ ) {
+ texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ }
+
+ fun texSubImage2DFloatBuffer(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: FloatBuffer?
+ ) {
+ texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ }
+
+
+ fun texSubImage2D(
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ pixels: ByteBuffer?
+ ) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ pixels?.let {
+ if (it.isDirect) {
+ nativeTexSubImage2DBuffer(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ width,
+ height,
+ format,
+ type,
+ it,
+ flipYWebGL
+ )
+ } else {
+ nativeTexSubImage2DByteArray(
+ target,
+ level,
+ xoffset,
+ yoffset,
+ width,
+ height,
+ format,
+ type,
+ it.array(),
+ flipYWebGL
+ )
+
+ }
+ } ?: run {
+ GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, null)
+ }
+ lock.countDown()
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+
+
+ fun texSubImage2D(
target: Int,
level: Int,
xoffset: Int,
@@ -3650,12 +4040,21 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
height: Int,
format: Int,
type: Int,
- pixels: IntArray?
+ pixels: ShortBuffer?
) {
- texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ lock.countDown()
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
}
- fun texSubImage2DFloat(
+
+ fun texSubImage2D(
target: Int,
level: Int,
xoffset: Int,
@@ -3664,9 +4063,17 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
height: Int,
format: Int,
type: Int,
- pixels: FloatArray?
+ pixels: IntBuffer?
) {
- texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
+ lock.countDown()
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
}
@@ -3679,50 +4086,21 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
height: Int,
format: Int,
type: Int,
- pixels: ByteBuffer?
+ pixels: FloatBuffer?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
- pixels?.let {
- if(it.isDirect){
- nativeTexSubImage2DBuffer(
- target,
- level,
- xoffset,
- yoffset,
- width,
- height,
- format,
- type,
- it,
- flipYWebGL
- )
- }else {
- nativeTexSubImage2DByteArray(
- target,
- level,
- xoffset,
- yoffset,
- width,
- height,
- format,
- type,
- it.array(),
- flipYWebGL
- )
-
- }
- } ?: run {
- GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, null)
- }
+ runOnGLThread {
+ GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
}
}
+
+
fun texSubImage2D(
target: Int,
level: Int,
@@ -3735,7 +4113,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ByteArray?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
nativeTexSubImage2DByteArray(
target,
@@ -3753,7 +4131,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, null)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3772,7 +4150,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: ShortArray?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
nativeTexSubImage2DShortArray(
target,
@@ -3790,7 +4168,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, null)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3809,7 +4187,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: IntArray?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
nativeTexSubImage2DIntArray(
target,
@@ -3827,7 +4205,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, null)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3846,7 +4224,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: FloatArray?
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
pixels?.let {
nativeTexSubImage2DFloatArray(
target,
@@ -3864,7 +4242,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, null)
}
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3882,7 +4260,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
) {
val lock = CountDownLatch(1)
val buffer = canvas.snapshot()
- runOnGLThread(Runnable {
+ runOnGLThread {
nativeTexSubImage2DByteArray(
target,
level,
@@ -3896,7 +4274,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
flipYWebGL
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3913,7 +4291,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
pixels: Bitmap
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
nativeTexSubImage2DBitmap(
target,
level,
@@ -3927,7 +4305,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
flipYWebGL
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3944,7 +4322,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
bitmap: TNSImageBitmap
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
nativeTexSubImage2DAsset(
target,
level,
@@ -3956,7 +4334,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
flipYWebGL
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3973,7 +4351,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
asset: TNSImageAsset
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
nativeTexSubImage2DAsset(
target,
level,
@@ -3985,7 +4363,7 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
flipYWebGL
)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -3994,10 +4372,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform1f(location: Int, v0: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUniform1f(location, v0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4006,11 +4384,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform1fv(location: Int, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(1) ?: 1
GLES20.glUniform1fv(location, count, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform1fvBuffer(location: Int, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(1) ?: 1
+ GLES20.glUniform1fv(location, count, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4019,10 +4410,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform1i(location: Int, v0: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUniform1i(location, v0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4031,11 +4422,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform1iv(location: Int, value: IntArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(1) ?: 1
GLES20.glUniform1iv(location, count, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform1ivBuffer(location: Int, value: IntBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(1) ?: 1
+ GLES20.glUniform1iv(location, count, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4044,10 +4448,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform2f(location: Int, v0: Float, v1: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUniform2f(location, v0, v1)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4056,11 +4460,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform2fv(location: Int, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(2) ?: 2
- GLES20.glUniform1fv(location, count, value, 0)
+ GLES20.glUniform2fv(location, count, value, 0)
+ lock.countDown()
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform2fvBuffer(location: Int, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(2) ?: 2
+ GLES20.glUniform2fv(location, count, value)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4069,10 +4486,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform2i(location: Int, v0: Int, v1: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUniform2i(location, v0, v1)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4081,11 +4498,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform2iv(location: Int, value: IntArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(2) ?: 2
GLES20.glUniform2iv(location, count, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform2ivBuffer(location: Int, value: IntBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(2) ?: 2
+ GLES20.glUniform2iv(location, count, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4094,10 +4524,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform3f(location: Int, v0: Float, v1: Float, v2: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUniform3f(location, v0, v1, v2)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4106,11 +4536,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform3fv(location: Int, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(3) ?: 3
GLES20.glUniform3fv(location, count, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform3fvBuffer(location: Int, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(3) ?: 3
+ GLES20.glUniform3fv(location, count, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4119,10 +4562,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform3i(location: Int, v0: Int, v1: Int, v2: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUniform3i(location, v0, v1, v2)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4131,11 +4574,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform3iv(location: Int, value: IntArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(3) ?: 3
GLES20.glUniform3iv(location, count, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform3ivBuffer(location: Int, value: IntBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(3) ?: 3
+ GLES20.glUniform3iv(location, count, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4144,10 +4600,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform4f(location: Int, v0: Float, v1: Float, v2: Float, v3: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUniform4f(location, v0, v1, v2, v3)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4156,11 +4612,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform4fv(location: Int, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(4) ?: 4
GLES20.glUniform4fv(location, count, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform4fvBuffer(location: Int, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(4) ?: 4
+ GLES20.glUniform4fv(location, count, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4169,10 +4638,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform4i(location: Int, v0: Int, v1: Int, v2: Int, v3: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUniform4i(location, v0, v1, v2, v3)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4181,11 +4650,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniform4iv(location: Int, value: IntArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(4) ?: 4
GLES20.glUniform4iv(location, count, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniform4ivBuffer(location: Int, value: IntBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(4) ?: 4
+ GLES20.glUniform4iv(location, count, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4194,11 +4676,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniformMatrix2fv(location: Int, transpose: Boolean, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(4) ?: 4
GLES20.glUniformMatrix2fv(location, count, transpose, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniformMatrix2fvBuffer(location: Int, transpose: Boolean, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(4) ?: 4
+ GLES20.glUniformMatrix2fv(location, count, transpose, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4207,11 +4702,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniformMatrix3fv(location: Int, transpose: Boolean, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(9) ?: 9
GLES20.glUniformMatrix3fv(location, count, transpose, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniformMatrix3fvBuffer(location: Int, transpose: Boolean, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(9) ?: 9
+ GLES20.glUniformMatrix3fv(location, count, transpose, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4220,11 +4728,24 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun uniformMatrix4fv(location: Int, transpose: Boolean, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
val count = value?.size?.div(16) ?: 16
GLES20.glUniformMatrix4fv(location, count, transpose, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun uniformMatrix4fvBuffer(location: Int, transpose: Boolean, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ val count = value?.capacity()?.div(16) ?: 16
+ GLES20.glUniformMatrix4fv(location, count, transpose, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4233,10 +4754,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun useProgram(program: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glUseProgram(program)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4245,10 +4766,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun validateProgram(program: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glValidateProgram(program)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4257,10 +4778,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun vertexAttrib1f(index: Int, v0: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glVertexAttrib1f(index, v0)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4269,10 +4790,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun vertexAttrib2f(index: Int, v0: Float, v1: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glVertexAttrib2f(index, v0, v1)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4281,10 +4802,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun vertexAttrib3f(index: Int, v0: Float, v1: Float, v2: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glVertexAttrib3f(index, v0, v1, v2)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4293,10 +4814,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun vertexAttrib4f(index: Int, v0: Float, v1: Float, v2: Float, v3: Float) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glVertexAttrib4f(index, v0, v1, v2, v3)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4305,10 +4826,22 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun vertexAttrib1fv(index: Int, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glVertexAttrib1fv(index, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun vertexAttrib1fvBuffer(index: Int, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ GLES20.glVertexAttrib1fv(index, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4317,10 +4850,22 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun vertexAttrib2fv(index: Int, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glVertexAttrib2fv(index, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun vertexAttrib2fvBuffer(index: Int, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ GLES20.glVertexAttrib2fv(index, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4329,10 +4874,22 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun vertexAttrib3fv(index: Int, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glVertexAttrib3fv(index, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun vertexAttrib3fvBuffer(index: Int, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ GLES20.glVertexAttrib3fv(index, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4341,10 +4898,22 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun vertexAttrib4fv(index: Int, value: FloatArray?) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glVertexAttrib4fv(index, value, 0)
lock.countDown()
- })
+ }
+ try {
+ lock.await()
+ } catch (ignored: InterruptedException) {
+ }
+ }
+
+ fun vertexAttrib4fvBuffer(index: Int, value: FloatBuffer?) {
+ val lock = CountDownLatch(1)
+ runOnGLThread {
+ GLES20.glVertexAttrib4fv(index, value)
+ lock.countDown()
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4360,10 +4929,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
offset: Int
) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable { // GLES20.glVertexAttribPointer(index, size, type, normalized, stride, offset);
+ runOnGLThread { // GLES20.glVertexAttribPointer(index, size, type, normalized, stride, offset);
nativeVertexAttribPointer(index, size, type, normalized, stride, offset)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4372,10 +4941,10 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
fun viewport(x: Int, y: Int, width: Int, height: Int) {
val lock = CountDownLatch(1)
- runOnGLThread(Runnable {
+ runOnGLThread {
GLES20.glViewport(x, y, width, height)
lock.countDown()
- })
+ }
try {
lock.await()
} catch (ignored: InterruptedException) {
@@ -4885,16 +5454,16 @@ open class TNSWebGLRenderingContext : TNSCanvasRenderingContext {
@JvmStatic
private external fun nativeTexSubImage2DByteArray(
- target: Int,
- level: Int,
- xoffset: Int,
- yoffset: Int,
- width: Int,
- height: Int,
- format: Int,
- type: Int,
- byteArray: ByteArray,
- flipY: Boolean
+ target: Int,
+ level: Int,
+ xoffset: Int,
+ yoffset: Int,
+ width: Int,
+ height: Int,
+ format: Int,
+ type: Int,
+ byteArray: ByteArray,
+ flipY: Boolean
)
diff --git a/packages/canvas/src-native/canvas-ios/CanvasDemo/CanvasDemo.xcodeproj/project.xcworkspace/xcuserdata/triniwiz.xcuserdatad/UserInterfaceState.xcuserstate b/packages/canvas/src-native/canvas-ios/CanvasDemo/CanvasDemo.xcodeproj/project.xcworkspace/xcuserdata/triniwiz.xcuserdatad/UserInterfaceState.xcuserstate
index 369a0c58..d0244fd4 100644
Binary files a/packages/canvas/src-native/canvas-ios/CanvasDemo/CanvasDemo.xcodeproj/project.xcworkspace/xcuserdata/triniwiz.xcuserdatad/UserInterfaceState.xcuserstate and b/packages/canvas/src-native/canvas-ios/CanvasDemo/CanvasDemo.xcodeproj/project.xcworkspace/xcuserdata/triniwiz.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/packages/canvas/src-native/canvas-ios/CanvasDemo/CanvasDemo/ViewController.swift b/packages/canvas/src-native/canvas-ios/CanvasDemo/CanvasDemo/ViewController.swift
index a9f5e8c7..9b1d99de 100644
--- a/packages/canvas/src-native/canvas-ios/CanvasDemo/CanvasDemo/ViewController.swift
+++ b/packages/canvas/src-native/canvas-ios/CanvasDemo/CanvasDemo/ViewController.swift
@@ -301,7 +301,9 @@ class ViewController: UIViewController, TNSCanvasListener {
func drawAll() {
-
+ let data: [UInt8] = [75, 97, 121, 100, 97, 114, 97, 32, 70, 66, 88, 32, 66, 105, 110, 97, 114, 121, 32, 32, 0]
+ let decoder = TNSTextDecoder()
+ print(decoder.decode(bytes: data))
// svg?.src = """
//