All Projects → donmccurdy → KTX-Parse

donmccurdy / KTX-Parse

Licence: MIT license
KTX 2.0 (.ktx2) parser and serializer.

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to KTX-Parse

redcube
JS renderer based on GLTF to WebGPU or WebGL backends.
Stars: ✭ 86 (+273.91%)
Mutual labels:  webgl2, webgpu
Babylon.js
Babylon.js is a powerful, beautiful, simple, and open game and rendering engine packed into a friendly JavaScript framework.
Stars: ✭ 15,479 (+67200%)
Mutual labels:  webgl2, webgpu
Three.js
JavaScript 3D Library.
Stars: ✭ 78,237 (+340060.87%)
Mutual labels:  webgl2, webgpu
experiments
A centralized location for my WebGL and other demos.
Stars: ✭ 34 (+47.83%)
Mutual labels:  webgl2
RASM
3D Ray-Tracing WebGPU Game Engine Written in Rust WebAssembly.
Stars: ✭ 20 (-13.04%)
Mutual labels:  webgpu
GWebGPUEngine
A WebGPU Engine for real-time rendering and GPGPU
Stars: ✭ 121 (+426.09%)
Mutual labels:  webgpu
three-noise
Simple gradient noise library for use with Three.js. Now with fBm!
Stars: ✭ 31 (+34.78%)
Mutual labels:  webgl2
niivue
a WebGL2 based NIFTI volume viewer
Stars: ✭ 84 (+265.22%)
Mutual labels:  webgl2
PintarJS
Micro JS lib for direct WebGL and canvas rendering.
Stars: ✭ 15 (-34.78%)
Mutual labels:  webgl2
online-wgsl-editor
A tiny WGSL online editor
Stars: ✭ 128 (+456.52%)
Mutual labels:  webgpu
perlin-toolkit
Animated perlin noise textures
Stars: ✭ 15 (-34.78%)
Mutual labels:  textures
procjam2018
Graph.ical, a procedural texture authoring application developed for PROCJAM 2018.
Stars: ✭ 42 (+82.61%)
Mutual labels:  webgl2
hecs
An experimental ECS written in Javascript.
Stars: ✭ 16 (-30.43%)
Mutual labels:  webgpu
WebGPU-Step-By-Step
WebGPU Tutorial: Step-by-step graphics programming with WebGPU - the next-generation graphics API for the web.
Stars: ✭ 232 (+908.7%)
Mutual labels:  webgpu
MassEffectModder
Mass Effect Modder (MEM)
Stars: ✭ 64 (+178.26%)
Mutual labels:  textures
deck.gl-time-series-widget
A React Time Slider implementation for DECK.GL - (non)temporal data - by CPU filtering ⌛
Stars: ✭ 19 (-17.39%)
Mutual labels:  webgl2
Texturize
A unified framework for example-based texture synthesis, developed alongside my master's thesis.
Stars: ✭ 15 (-34.78%)
Mutual labels:  textures
sdf-2d
A graphics library to enable the real-time rendering of 2D signed distance fields on the web.
Stars: ✭ 70 (+204.35%)
Mutual labels:  webgl2
vscode-wgsl
VsCode Syntax highlight for WGSL files
Stars: ✭ 55 (+139.13%)
Mutual labels:  webgpu
webgpu
WebGPU Samples & RnD
Stars: ✭ 72 (+213.04%)
Mutual labels:  webgpu

ktx-parse

Latest NPM release Minzipped size License CI Coverage

KTX 2.0 (.ktx2) parser and serializer.

Quickstart

Install:

npm install --save ktx-parse

Import:

import { read, write } from 'ktx-parse';

Usage:

// Parse texture container from file:
const container = read(data /* ← Uint8Array or Buffer */);

// Write texture container to file:
const data = write(container); // → Uint8Array

See API documentation for more details:

Encoding / Decoding

KTX-Parse reads/writes KTX 2.0 containers, and provides access to the compressed texture data within the container. To decompress that texture data, or to compress existing texture data into GPU texture formats used by KTX 2.0, you'll need to use additional libraries such as encoders or transcoders.

Encoding:

Encoding GPU textures is a slow process, and should be completed at development/authoring time so that the compressed texture can be transmitted to the viewing device. GPU textures require much less GPU memory than image formats like PNG or JPEG, and can be uploaded to the GPU quickly with less impact on framerate. GPU textures can also have smaller filesizes in many, but not all, cases. See the Basis documentation for details on this process.

The following tools may be used to produce Basis Universal compressed textures in KTX 2.0 (.ktx2) containers, which ktx-parse can then read or edit:

Transcoding / Decoding:

Basis Universal texture formats (ETC1S and UASTC) cannot be directly read by a GPU, but are designed to be very efficiently rewritten into many of the specific GPU texture formats that different GPUs require. This process is called transcoding, and typically happens on the viewing device after a target output format (e.g. ETC1, ASTC, BC1, ...) is chosen. These transcoders can also fully decode texture data to uncompressed RGBA formats, if raw pixel data is required.

  • BinomialLLC/basis_universal provides official C++ and WebAssembly transcoders, which support all Basis Universal input formats and can transcode to any output format (with appropriate compilation flags). With common settings, a transcoder will likely be > 200kb on web. This transcoder can read KTX 2.0 files directly.
  • KhronosGroup/Universal-Texture-Transcoders provides very small, fast WebAssembly transcoders each supporting only a single output texture format. Each transcoder is roughly 10-20kb, and the viewing device can choose which transcoder to download, as appropriate. These transcoders cannot read KTX 2.0 files directly. Instead, unpack the KTX 2.0 files with ktx-parse first, then transcode the mip levels using a low-level transcoder. Only UASTC texture formats currently supported.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].