Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

367 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Odin WASM

For using Odin and WASM together.

demo gif

What is this?

1. A library of WASM bindings

A library of wasm bindings from Odin/vendor/wasm implemented using modern JavaScript with ES modules and JSDoc.

The implementation is mostly the same as the original, here are the differences:

  • ESM - the bindings are written in multiple ES modules, mirroring Odin packages, so they need to be used in a modern JS environment, assuming that the user will use a bundler like Webpack or Rollup to bundle the code, and tree-shake the unused parts.
  • JSDoc - the original bindings are witout types, so I added JSDoc comments to the functions for basic typechecking (and some autocompletion).
  • Improvements to getting window position and size
  • ctx2d - Bindings to the 2d canvas context, for drawing 2d graphics without webgl.
  • ls - Bindings to the localStorage API, for saving data in the browser.

2. Odin + WASM example

thetarnav.github.io/odin-wasm

In example/ you can find an example of how to use Odin and WASM together. Mainly focused on WebGL as I'm going through the WebGL Fundamentals tutorial.

3. A template repo

Feel free to use this repo as a template for your own projects.

There are some convenience scripts in main.js for building and running the example. And a github action for building and deploying the example to github pages.

4. GLSL utils codegen tool

The /shdc directory contains a cli tool for generating GLSL utils from parsing glsl shaders in the example/ dir.

It can be ran with npm run shdc, or odin run shdc.

The generated file is committed to the repo, you can check it out in example/shaders_generated.odin.

The tool is just an experiment of parsing glsl, and generating some boilerplate code, so that getting attribute and uniform locations, and setting the values is a bit easier.

Development

Dependencies

OLS

Add js_wasm32 target to ols.json if you want to use OLS.

{
    "enable_format": false,
	"checker_args": "-target:js_wasm32 -vet-unused -vet-style -vet-semicolon -vet-cast -vet-tabs",
	"profile": "example",
	"profiles": [{
		"name": "example",
		"os": "js_wasm32",
		"checker_path": ["example"]
	}, {
		"name": "shdc",
		"checker_path": ["shdc"]
	}, {
		"name": "obj",
		"checker_path": ["obj"]
	}]
}

Scripts

Take look at package.json for all the available scripts.

(You need to run npm i beforehand)

The most important ones are:

  • npm run dev - starts the server and watches for changes
  • npm run build - builds the example to dist/
  • npm run preview - starts a server to preview the built example
  • npm run shdc - generates shader utils from parsing glsl shaders

About

Odin + WASM = 💙

Topics

Resources

Stars

136 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages