Modernize project

This commit is contained in:
2025-11-06 16:32:41 +01:00
parent d28d7896de
commit 501949828d
13 changed files with 55 additions and 30 deletions

View File

@@ -6,8 +6,11 @@ end_of_line = lf
indent_size = 4
indent_style = tab
insert_final_newline = true
tab_width = 4
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[bun.lock]
indent_size = 2
indent_style = space

View File

@@ -1 +1 @@
Szymon Nowakowski <smnbdg13@gmail.com> (https://renati.me)
Szymon Nowakowski <renati@renati.me> (https://renati.me)

View File

@@ -4,9 +4,9 @@
<video src="https://gitea.renati.me/renati/oktaeder/media/branch/main/oktaeder.webm" autoplay controls loop>
</video>
This project ships with [bun.lockb](https://bun.sh/docs/install/lockfile)
This project ships with [bun.lock](https://bun.sh/docs/install/lockfile)
lockfile for the [Bun](https://bun.sh/) JavaScript runtime. You should be able
to install the dependencies with any JavaScript package manager, though.
To run the example, run `start:example` script with your JavaScript package
manager and visit [localhost:8000](http://localhost:8000).
To run the example, run `bun run start:example`. The example relies on the Bun
JavaScript runtime to bundle and serve the example.

22
bun.lock Normal file
View File

@@ -0,0 +1,22 @@
{
"lockfileVersion": 1,
"workspaces": {
"": {
"name": "oktaeder",
"dependencies": {
"tslib": "^2.6.2",
},
"devDependencies": {
"@webgpu/types": "^0.1.66",
"typescript": "^5.9.3",
},
},
},
"packages": {
"@webgpu/types": ["@webgpu/types@0.1.66", "", {}, "sha512-YA2hLrwLpDsRueNDXIMqN9NTzD6bCDkuXbOSe0heS+f8YE8usA6Gbv1prj81pzVHrbaAma7zObnIC+I6/sXJgA=="],
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
}
}

BIN
bun.lockb

Binary file not shown.

View File

@@ -4,8 +4,8 @@
<meta charset="utf-8">
<title>oktaeder example</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bundle.css">
<script type="module" src="bundle.js"></script>
<link rel="stylesheet" href="style.css">
<script type="module" src="script.ts"></script>
</head>
<body></body>
</html>

View File

@@ -1,10 +1,10 @@
/// <reference types="../node_modules/@webgpu/types" />
/// <reference path="types.d.ts" />
import { Color, Mesh, Node, PerspectiveCamera, PointLight, Quaternion, Scene, Submesh, Vector3 } from "../src/data/index";
import { Renderer, degToRad } from "../src/oktaeder";
import "./style.css";
new EventSource("/esbuild").addEventListener("change", () => location.reload());
import uvmapUrl from "./uvmap.png";
const canvas = document.createElement("canvas");
window.addEventListener("resize", onResize);
@@ -66,7 +66,7 @@ const submesh: Submesh = { start: 0, length: 24 };
const mesh = new Mesh({ vertexBuffer, indexBuffer, submeshes: [submesh] });
const imageBitmap = await loadImageBitmap("/uvmap.png");
const imageBitmap = await loadImageBitmap(uvmapUrl);
const texture = renderer.createTexture({
format: "srgb",

4
example/types.d.ts vendored Normal file
View File

@@ -0,0 +1,4 @@
declare module "*.png" {
const url: string;
export default url;
}

View File

@@ -7,27 +7,23 @@
"gltf",
"wegbpu"
],
"homepage": "https://github.com/iszn11/oktaeder",
"bugs": {
"url": "https://github.com/iszn11/oktaeder/issues"
},
"homepage": "https://gitea.renati.me/renati/oktaeder",
"license": "MPL-2.0",
"browser": "./dist/oktaeder.js",
"repository": {
"type": "git",
"url": "https://github.com/iszn11/oktaeder.git"
"url": "https://gitea.renati.me/renati/oktaeder.git"
},
"scripts": {
"start:example": "esbuild example/script.ts --bundle --outfile=example/bundle.js --watch --servedir=example --format=esm --sourcemap",
"start:example": "bun run example/index.html",
"build": "tsc --build"
},
"dependencies": {
"tslib": "^2.6.2"
"tslib": "^2.8.1"
},
"devDependencies": {
"@webgpu/types": "^0.1.40",
"esbuild": "^0.20.2",
"typescript": "^5.4.2"
"@webgpu/types": "^0.1.66",
"typescript": "^5.9.3"
},
"exports": {
".": {

View File

@@ -12,10 +12,10 @@ export class _BinaryWriter {
_buffer: ArrayBuffer;
_dataView: DataView;
_typedArray: Uint8Array;
_typedArray: Uint8Array<ArrayBuffer>;
_length: number;
get subarray(): Uint8Array { return new Uint8Array(this._buffer, 0, this._length); }
get subarray(): Uint8Array<ArrayBuffer> { return new Uint8Array(this._buffer, 0, this._length); }
constructor(capacity = _BinaryWriter.DEFAULT_CAPACITY) {
capacity = Math.max(capacity, 1);

View File

@@ -69,7 +69,7 @@ import * as resources from "./resources";
* - issues error
* - BLEND: partial support
* - decoded, but not implemented
* - doubleSided: prtial support
* - doubleSided: partial support
* - decoded, but not implemented
*
* Extensions:
@@ -240,7 +240,7 @@ export async function parse(gltf: ArrayBufferView, {
}
if (version !== 2) {
const message = `Unsupported binary glTF container format. The bytes 4-8 define the binary glTF conatiner format version when read as little endian unsigned integer. Only version 2 is supported, but in the provided buffer they have the value of ${version}`;
const message = `Unsupported binary glTF container format. The bytes 4-8 define the binary glTF container format version when read as little endian unsigned integer. Only version 2 is supported, but in the provided buffer they have the value of ${version}`;
const error = new ParseError({ message, severity: "error" });
if (throwOnError) {
throw error;

View File

@@ -64,7 +64,7 @@ export class IndexBuffer {
return this.writeTypedArray(offset, array);
}
writeTypedArray(offset: number, indices: Uint16Array | Uint32Array): IndexBuffer {
writeTypedArray(offset: number, indices: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>): IndexBuffer {
if (
this._indexFormat === "uint16" && !(indices instanceof Uint16Array)
|| this._indexFormat === "uint32" && !(indices instanceof Uint32Array)

View File

@@ -42,11 +42,11 @@ export interface VertexBufferWriteArrayProps {
}
export interface VertexBufferWriteTypedArrayProps {
readonly position?: Float32Array;
readonly texCoord?: Float32Array;
readonly lightTexCoord?: Float32Array;
readonly normal?: Float32Array;
readonly tangent?: Float32Array;
readonly position?: Float32Array<ArrayBuffer>;
readonly texCoord?: Float32Array<ArrayBuffer>;
readonly lightTexCoord?: Float32Array<ArrayBuffer>;
readonly normal?: Float32Array<ArrayBuffer>;
readonly tangent?: Float32Array<ArrayBuffer>;
}
export class VertexBuffer {