JSPM

@nativescript/canvas

2.0.0-webgpu.42
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 77
  • Score
    100M100P100Q66334F
  • License Apache-2.0

DOM Canvas API for NativeScript

Package Exports

  • @nativescript/canvas
  • @nativescript/canvas/ImageBitmap
  • @nativescript/canvas/ImageBitmap/index.js
  • @nativescript/canvas/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@nativescript/canvas) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

NativeScript Canvas

Powered by

Installation

ns plugin add @nativescript/canvas

Note min ios support 11 | min android support 21

IMPORTANT: ensure you include xmlns:canvas="@nativescript/canvas" on the Page element for core {N}

Usage

<canvas:Canvas id="canvas" style="width:100%; height:100%"  width="100%" height="100%" ready="canvasReady"/>

2D

let ctx;
let canvas;
export function canvasReady(args) {
    console.log('canvas ready');
    canvas = args.object;
    console.log(canvas);
    ctx = canvas.getContext('2d');
    ctx.fillStyle = 'green';
    ctx.fillRect(10, 10, 150, 100);
}

WEBGL

let gl;
let canvas;
export function canvasReady(args) {
    console.log('canvas ready');
    canvas = args.object;
    gl = canvas.getContext('webgl'); // 'webgl' || 'webgl2'
    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
    // Set the clear color to darkish green.
    gl.clearColor(0.0, 0.5, 0.0, 1.0);
    // Clear the context with the newly set color. This is
    // the function call that actually does the drawing.
    gl.clear(gl.COLOR_BUFFER_BIT);
}

WebGPU

Note min ios support 11 | min android support 27

// the webgpu type works as well but these exposes any non standard web api (native)

import type { GPUDevice, GPUAdapter } from '@nativescript/canvas';
import { Screen } from '@nativescript/core';

let canvas;
let device: GPUDevice;
export async function canvasReady(args) {
    console.log('canvas ready');
    canvas = args.object;

    const adapter: GPUAdapter = (await navigator.gpu.requestAdapter()) as never;
    device = (await adapter.requestDevice()) as never;
    // scaling the canvas to ensure everthing looks crisp
    const devicePixelRatio = Screen.mainScreen.scale;
    canvas.width = canvas.clientWidth * devicePixelRatio;
    canvas.height = canvas.clientHeight * devicePixelRatio;

    const context = canvas.getContext('webgpu');


    /// configureing the context
    // Passing in the following options will aollow the configure method to choose the best configs.
    // If unsure about what is supported try the following method

    const capabilities = this.getCapabilities(device);

    // cap.presentModes
    // cap.alphaModes
    // cap.format
    // cap.usages

    context.configure({
        device,
        format: presentationFormat,
    });



    /// rendering logic
    // to render to your screen you will need to call presentSurfacefrom the WebGPU context.
    // Add the followig to the end of your render loop to ensure it gets displayed.

    context.presentSurface();
}

API