Modernize project
This commit is contained in:
@@ -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
|
||||||
|
|||||||
2
AUTHORS
2
AUTHORS
@@ -1 +1 @@
|
|||||||
Szymon Nowakowski <smnbdg13@gmail.com> (https://renati.me)
|
Szymon Nowakowski <renati@renati.me> (https://renati.me)
|
||||||
|
|||||||
@@ -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
22
bun.lock
Normal 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=="],
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
4
example/types.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
declare module "*.png" {
|
||||||
|
const url: string;
|
||||||
|
export default url;
|
||||||
|
}
|
||||||
16
package.json
16
package.json
@@ -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": {
|
||||||
".": {
|
".": {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user