Skip to content

Latest commit

 

History

History

soa

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

soa

npm version npm downloads Twitter Follow

This project is part of the @thi.ng/umbrella monorepo.

About

SOA & AOS memory mapped structured views with optional & extensible serialization.

Supported memory layouts

AOS (Array Of Structures)

AOS memory block diagram

SOA (Structure of Arrays)

SOA memory block diagram

Hybrid

Hybrid memory block diagram

Status

ALPHA - bleeding edge / work-in-progress

Search or submit any issues for this package

See tests for usage. This package might be merged with and/or superseded by @thi.ng/ecs.

Related packages

  • @thi.ng/ecs - Entity Component System based around typed arrays & sparse sets
  • @thi.ng/malloc - ArrayBuffer based malloc() impl for hybrid JS/WASM use cases, based on thi.ng/tinyalloc
  • @thi.ng/simd - WASM based SIMD vector operations for batch processing
  • @thi.ng/unionstruct - C-style struct, union and bitfield read/write views of ArrayBuffers
  • @thi.ng/vector-pools - Data structures for managing & working with strided, memory mapped vectors
  • @thi.ng/vectors - Optimized 2d/3d/4d and arbitrary length vector operations

Installation

yarn add @thi.ng/soa

ES module import:

<script type="module" src="https://cdn.skypack.dev/@thi.ng/soa"></script>

Skypack documentation

For Node.js REPL:

# with flag only for < v16
node --experimental-repl-await

> const soa = await import("@thi.ng/soa");

Package sizes (gzipped, pre-treeshake): ESM: 1.44 KB

Dependencies

Usage examples

Several demos in this repo's /examples directory are using this package.

A selection:

Screenshot Description Live demo Source
Entity Component System w/ 100k 3D particles Demo Source
WebGL multi-colored cube mesh Demo Source

API

Generated API docs

TODO

Authors

Karsten Schmidt

If this project contributes to an academic publication, please cite it as:

@misc{thing-soa,
  title = "@thi.ng/soa",
  author = "Karsten Schmidt",
  note = "https://thi.ng/soa",
  year = 2019
}

License

© 2019 - 2021 Karsten Schmidt // Apache Software License 2.0