Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Examples per feature #15

Open
munrocket opened this issue Nov 12, 2021 · 1 comment
Open

Examples per feature #15

munrocket opened this issue Nov 12, 2021 · 1 comment

Comments

@munrocket
Copy link

munrocket commented Nov 12, 2021

Can we create examples per feature instead of examples per whatever? Because I need examples with simd and reference types (in future) but I can’t find it.

Also seems examples repo little bit not popular, can we make a monorepo with AS and examples for AS? It will be a self documentation for a project and also e2e tests or integration test, whatever you call it.

@munrocket
Copy link
Author

Reference types example: with console and webgl

gl.ts

export type GLenum = u32;

export type Program = externref;
export type WebGLShader = externref;
export type WebGLProgram = externref;

export const VERTEX_SHADER: GLenum = 0x8B31;
export const FRAGMENT_SHADER: GLenum = 0x8B30;
export const COMPILE_STATUS: GLenum = 0x8B81;
export const LINK_STATUS: GLenum = 0x8B82;

export declare function createShader(type: GLenum): WebGLShader;
export declare function shaderSource(s: WebGLShader, t: string): void;
export declare function compileShader(s: WebGLShader): void;
export declare function getShaderParameter(s: WebGLShader, t: GLenum): externref;
export declare function getShaderInfoLog(p: WebGLShader): string;

export declare function createProgram(): Program;
export declare function attachShader(p: Program, s: WebGLShader): void;
export declare function linkProgram(p: Program): void;
export declare function getProgramParameter(s: WebGLProgram, t: GLenum): externref;
export declare function getProgramInfoLog(p: WebGLProgram): string;

console.ts

export declare function log(s: string): void;
//export declare function log(s: i32): void;
//export declare function log(s: externref): void;

main.ts

import * as console from "./console";
import * as gl from "./gl";

function createShader(type: gl.GLenum, source: string): gl.WebGLShader {
  var shader = gl.createShader(type);
  gl.shaderSource(shader, source);
  gl.compileShader(shader);
  gl.getShaderParameter(shader, gl.COMPILE_STATUS);
  console.log(gl.getShaderInfoLog(shader));
  return shader;
}

function createProgram(vertexShader: gl.WebGLShader, fragmentShader: gl.WebGLShader): gl.Program {
  var program = gl.createProgram();
  gl.attachShader(program, vertexShader);
  gl.attachShader(program, fragmentShader);
  gl.linkProgram(program);
  gl.getProgramParameter(program, gl.LINK_STATUS);
  console.log(gl.getProgramInfoLog(program));
  return program;
}

export function test(): void {
  let v = createShader(gl.VERTEX_SHADER, "precision highp float; attribute vec3 coord; void main(void) { gl_Position = vec4(coord, 1.0); }");
  let f = createShader(gl.FRAGMENT_SHADER, "precision highp float; void main(void) { gl_FragColor = vec4(1, 0.5, 0.0, 1); }");
  let p = createProgram(v, f);
}

main.js

import * as AsBind from "../node_modules/as-bind/dist/as-bind.esm.js";

const canvas = document.getElementById('c');
const gl = canvas.getContext('webgl');

for (let key in gl){ if (typeof gl[key] == 'function') {
  gl[key] = function() {
    gl[key].bind(gl);
  };
} }

const imports = {
  console,
  gl
};

async function init() {
  const instance = await AsBind.instantiate(fetch('../build/b.wasm'), imports);
  const wasm = instance.exports;
  wasm.test();
};
init();

index.html

<!DOCTYPE html>
<html>
<head>
  <link rel="icon" href="data:;base64,iVBORw0KGgo=">
  <title>Test</title>
</head>
<body>
  <canvas id="c"></canvas>
  <script type="module" src="main.js"></script>
</body>
</html>

package.json

"scripts": {
  "serve": "servez",
  "build": "asc --exportRuntime --transform as-bind --enable reference-types test/main.ts -b build/b.wasm -O3"
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant