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_size = 4
indent_style = tab indent_style = tab
insert_final_newline = true insert_final_newline = true
tab_width = 4
trim_trailing_whitespace = true trim_trailing_whitespace = true
[*.md] [*.md]
trim_trailing_whitespace = false 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 src="https://gitea.renati.me/renati/oktaeder/media/branch/main/oktaeder.webm" autoplay controls loop>
</video> </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 lockfile for the [Bun](https://bun.sh/) JavaScript runtime. You should be able
to install the dependencies with any JavaScript package manager, though. to install the dependencies with any JavaScript package manager, though.
To run the example, run `start:example` script with your JavaScript package To run the example, run `bun run start:example`. The example relies on the Bun
manager and visit [localhost:8000](http://localhost:8000). 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"> <meta charset="utf-8">
<title>oktaeder example</title> <title>oktaeder example</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bundle.css"> <link rel="stylesheet" href="style.css">
<script type="module" src="bundle.js"></script> <script type="module" src="script.ts"></script>
</head> </head>
<body></body> <body></body>
</html> </html>

View File

@@ -1,10 +1,10 @@
/// <reference types="../node_modules/@webgpu/types" /> /// <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 { Color, Mesh, Node, PerspectiveCamera, PointLight, Quaternion, Scene, Submesh, Vector3 } from "../src/data/index";
import { Renderer, degToRad } from "../src/oktaeder"; import { Renderer, degToRad } from "../src/oktaeder";
import "./style.css"; import "./style.css";
import uvmapUrl from "./uvmap.png";
new EventSource("/esbuild").addEventListener("change", () => location.reload());
const canvas = document.createElement("canvas"); const canvas = document.createElement("canvas");
window.addEventListener("resize", onResize); window.addEventListener("resize", onResize);
@@ -66,7 +66,7 @@ const submesh: Submesh = { start: 0, length: 24 };
const mesh = new Mesh({ vertexBuffer, indexBuffer, submeshes: [submesh] }); const mesh = new Mesh({ vertexBuffer, indexBuffer, submeshes: [submesh] });
const imageBitmap = await loadImageBitmap("/uvmap.png"); const imageBitmap = await loadImageBitmap(uvmapUrl);
const texture = renderer.createTexture({ const texture = renderer.createTexture({
format: "srgb", 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", "gltf",
"wegbpu" "wegbpu"
], ],
"homepage": "https://github.com/iszn11/oktaeder", "homepage": "https://gitea.renati.me/renati/oktaeder",
"bugs": {
"url": "https://github.com/iszn11/oktaeder/issues"
},
"license": "MPL-2.0", "license": "MPL-2.0",
"browser": "./dist/oktaeder.js", "browser": "./dist/oktaeder.js",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/iszn11/oktaeder.git" "url": "https://gitea.renati.me/renati/oktaeder.git"
}, },
"scripts": { "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" "build": "tsc --build"
}, },
"dependencies": { "dependencies": {
"tslib": "^2.6.2" "tslib": "^2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@webgpu/types": "^0.1.40", "@webgpu/types": "^0.1.66",
"esbuild": "^0.20.2", "typescript": "^5.9.3"
"typescript": "^5.4.2"
}, },
"exports": { "exports": {
".": { ".": {

View File

@@ -12,10 +12,10 @@ export class _BinaryWriter {
_buffer: ArrayBuffer; _buffer: ArrayBuffer;
_dataView: DataView; _dataView: DataView;
_typedArray: Uint8Array; _typedArray: Uint8Array<ArrayBuffer>;
_length: number; _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) { constructor(capacity = _BinaryWriter.DEFAULT_CAPACITY) {
capacity = Math.max(capacity, 1); capacity = Math.max(capacity, 1);

View File

@@ -69,7 +69,7 @@ import * as resources from "./resources";
* - issues error * - issues error
* - BLEND: partial support * - BLEND: partial support
* - decoded, but not implemented * - decoded, but not implemented
* - doubleSided: prtial support * - doubleSided: partial support
* - decoded, but not implemented * - decoded, but not implemented
* *
* Extensions: * Extensions:
@@ -240,7 +240,7 @@ export async function parse(gltf: ArrayBufferView, {
} }
if (version !== 2) { 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" }); const error = new ParseError({ message, severity: "error" });
if (throwOnError) { if (throwOnError) {
throw error; throw error;

View File

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

View File

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