simulationjsv2 0.7.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  SimulationJS is a graphics library with simple easy to use APIs. Version 2 hopes to improve 3d graphics and boost performance by using webgpu under the hood.
4
4
 
5
- The APIs for v2 will differ however semantically, using them should be nearly identical.
6
-
7
- **Documentation eventually**
5
+ **Documentation at 1.0.0**
8
6
 
9
7
  By _Jackson Otto_
package/TODO.md CHANGED
@@ -1,19 +1,20 @@
1
1
  # TODO
2
2
 
3
- - [ ] Make materials
4
- - [ ] Move shader group to material
5
- - [ ] Fix transparency
3
+ - [ ] Change render vertices to use index buffer
4
+ - [ ] Add cull modes
5
+ - [x] Fix shaders
6
+ - [x] Clean up polygons
7
+ - [x] Fix transparency
8
+ - [x] Change absolute pos function to pos function, and pos function to relative pos
6
9
  - [x] Update `updateModelMatrix2d`
7
10
  - [x] Trace line element (wireframe strip for tracing paths)
8
11
  - [x] Test new transform things on 3d stuff
9
12
  - [x] Fix rotating nested children elements
10
13
  - [x] Fix instancing
11
14
  - [x] Remove SceneCollection and replace by elements with children
12
- - Test this
13
15
  - [x] Change position/rotation to be matrix transform on gpu
14
16
  - [x] Add update square center offset position in-place + not
15
17
  - [x] Make getBuffer return cached Float32Array
16
18
  - [x] Make input buffer position vec3 not vec4
17
19
  - [x] Use line strip vertices for polygon buffers
18
20
  - [x] Scene collection wireframe
19
- - [ ] Add animation status handle to transition values
@@ -0,0 +1,13 @@
1
+ /// <reference types="@webgpu/types" />
2
+ import { ArrayTypes } from './types.js';
3
+ export declare class MemoBuffer {
4
+ private buffer;
5
+ private bufferSize;
6
+ private usage;
7
+ constructor(usage: GPUBufferDescriptor['usage'], size: number);
8
+ private allocBuffer;
9
+ getBuffer(): GPUBuffer;
10
+ setSize(size: number): void;
11
+ write(buf: ArrayTypes, offset?: number): void;
12
+ destroy(): void;
13
+ }
@@ -0,0 +1,44 @@
1
+ import { globalInfo } from './globals.js';
2
+ export class MemoBuffer {
3
+ buffer;
4
+ bufferSize;
5
+ usage;
6
+ constructor(usage, size) {
7
+ this.usage = usage;
8
+ this.bufferSize = size;
9
+ this.buffer = null;
10
+ }
11
+ allocBuffer() {
12
+ const device = globalInfo.getDevice();
13
+ if (!device)
14
+ return;
15
+ this.buffer = device.createBuffer({
16
+ size: this.bufferSize,
17
+ usage: this.usage
18
+ });
19
+ }
20
+ getBuffer() {
21
+ if (!this.buffer)
22
+ this.allocBuffer();
23
+ return this.buffer;
24
+ }
25
+ setSize(size) {
26
+ if (!this.buffer)
27
+ this.allocBuffer();
28
+ if (size > this.bufferSize) {
29
+ this.bufferSize = size;
30
+ this.allocBuffer();
31
+ }
32
+ }
33
+ write(buf, offset = 0) {
34
+ const device = globalInfo.errorGetDevice();
35
+ if (!this.buffer || buf.byteLength > this.bufferSize) {
36
+ this.bufferSize = buf.byteLength;
37
+ this.allocBuffer();
38
+ }
39
+ device.queue.writeBuffer(this.buffer, offset, buf.buffer, buf.byteOffset, buf.byteLength);
40
+ }
41
+ destroy() {
42
+ this.buffer?.destroy();
43
+ }
44
+ }
@@ -1,9 +1,3 @@
1
- export declare const vertexSize = 40;
2
- export declare const positionOffset = 0;
3
- export declare const colorOffset = 12;
4
- export declare const uvOffset = 28;
5
- export declare const drawingInstancesOffset = 36;
6
- export declare const BUF_LEN: number;
7
1
  export declare const worldProjMatOffset = 0;
8
2
  export declare const modelProjMatOffset: number;
9
3
  export declare const mat4ByteLength = 64;
package/dist/constants.js CHANGED
@@ -1,10 +1,5 @@
1
1
  import { vector3 } from './utils.js';
2
- export const vertexSize = 40; // 4 * 10
3
- export const positionOffset = 0;
4
- export const colorOffset = 12; // 4 * 3
5
- export const uvOffset = 28; // 4 * 8
6
- export const drawingInstancesOffset = 36;
7
- export const BUF_LEN = vertexSize / 4;
2
+ // TODO find a place to put this
8
3
  export const worldProjMatOffset = 0;
9
4
  export const modelProjMatOffset = 4 * 16;
10
5
  export const mat4ByteLength = 64;
@@ -1,20 +1,17 @@
1
- import { VertexParamGeneratorInfo, CircleGeometryParams, CubeGeometryParams, EmptyParams, PolygonGeometryParams, Spline2dGeometryParams, SquareGeometryParams, Vector2, Vector3, VertexColorMap, LineGeometryParams, TraceLinesParams } from './types.js';
2
- import { Color, Vertex } from './utils.js';
1
+ import { CircleGeometryParams, CubeGeometryParams, EmptyParams, Spline2dGeometryParams, SquareGeometryParams, Vector3, LineGeometryParams, TraceLinesParams } from './types.js';
2
+ import { Vertex } from './utils.js';
3
3
  import { CubicBezierCurve2d, SplinePoint2d } from './graphics.js';
4
4
  export declare abstract class Geometry<T extends EmptyParams> {
5
5
  protected abstract wireframeOrder: number[];
6
6
  protected abstract triangleOrder: number[];
7
7
  protected abstract params: T;
8
8
  protected vertices: Vector3[];
9
- protected geometryType: 'list' | 'strip';
9
+ protected topology: 'list' | 'strip';
10
10
  constructor(vertices?: Vector3[], geometryType?: 'list' | 'strip');
11
- getType(): "list" | "strip";
11
+ getTopology(): "list" | "strip";
12
12
  abstract recompute(): void;
13
- getTriangleVertexCount(): number;
14
- getWireframeVertexCount(): number;
15
- protected bufferFromOrder(order: number[], color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
16
- getWireframeBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
17
- getTriangleBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
13
+ getIndexes(wireframe: boolean): number[];
14
+ getVertices(): Vector3[];
18
15
  }
19
16
  export declare class PlaneGeometry extends Geometry<EmptyParams> {
20
17
  protected params: {};
@@ -24,7 +21,6 @@ export declare class PlaneGeometry extends Geometry<EmptyParams> {
24
21
  constructor(vertices: Vertex[]);
25
22
  recompute(): void;
26
23
  updateVertices(vertices: Vertex[]): void;
27
- getTriangleBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
28
24
  }
29
25
  export declare class CubeGeometry extends Geometry<CubeGeometryParams> {
30
26
  protected params: CubeGeometryParams;
@@ -41,14 +37,10 @@ export declare class SquareGeometry extends Geometry<SquareGeometryParams> {
41
37
  protected wireframeOrder: number[];
42
38
  protected triangleOrder: number[];
43
39
  protected params: SquareGeometryParams;
44
- constructor(width: number, height: number, centerOffset?: Vector2);
45
- setOffset(offset: Vector2): void;
46
- getOffset(): Vector2;
47
- setVertexColorMap(colorMap: VertexColorMap): void;
40
+ constructor(width: number, height: number);
48
41
  setWidth(width: number): void;
49
42
  setHeight(height: number): void;
50
43
  recompute(): void;
51
- getTriangleBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
52
44
  }
53
45
  export declare class BlankGeometry extends Geometry<EmptyParams> {
54
46
  protected wireframeOrder: never[];
@@ -63,64 +55,54 @@ export declare class CircleGeometry extends Geometry<CircleGeometryParams> {
63
55
  protected params: CircleGeometryParams;
64
56
  constructor(radius: number, detail: number);
65
57
  setRadius(radius: number): void;
66
- private updateWireframeOrder;
67
- private updateTriangleOrder;
68
58
  recompute(): void;
69
59
  }
70
60
  export declare class Spline2dGeometry extends Geometry<Spline2dGeometryParams> {
71
61
  protected wireframeOrder: number[];
72
62
  protected triangleOrder: number[];
73
63
  protected params: Spline2dGeometryParams;
74
- constructor(points: SplinePoint2d[], color: Color, thickness: number, detail: number);
64
+ constructor(points: SplinePoint2d[], thickness: number, detail: number);
75
65
  updateInterpolationStart(start: number): void;
76
66
  updateInterpolationLimit(limit: number): void;
67
+ getInterpolationStart(): number;
68
+ getInterpolationLimit(): number;
69
+ getDistance(): number;
77
70
  updatePoint(pointIndex: number, newPoint: SplinePoint2d): void;
78
71
  updateThickness(thickness: number): void;
79
- private getVertexCount;
80
- getWireframeVertexCount(): number;
81
- getTriangleVertexCount(): number;
82
72
  getCurves(): CubicBezierCurve2d[];
73
+ getVertexInterpolations(): number[];
74
+ getCurveVertexIndices(): number[];
83
75
  private computeCurves;
84
- private updateWireframeOrder;
85
76
  recompute(): void;
86
- getWireframeBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
87
- getTriangleBuffer(_: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
88
77
  }
89
78
  export declare class Line2dGeometry extends Geometry<LineGeometryParams> {
90
79
  protected wireframeOrder: number[];
91
80
  protected triangleOrder: number[];
92
81
  protected params: LineGeometryParams;
93
- constructor(pos: Vector3, to: Vector3, thickness: number, fromColor?: Color | null, toColor?: Color | null);
94
- private generateBuffer;
95
- getTriangleBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
96
- getWireframeBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
82
+ constructor(pos: Vector3, to: Vector3, thickness: number);
97
83
  recompute(): void;
98
84
  }
99
85
  export declare class Line3dGeometry extends Geometry<LineGeometryParams> {
100
86
  protected wireframeOrder: number[];
101
87
  protected triangleOrder: number[];
102
88
  protected params: LineGeometryParams;
103
- constructor(pos: Vector3, to: Vector3, thickness: number, fromColor?: Color | null, toColor?: Color | null);
104
- private generateBuffer;
105
- getTriangleBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
106
- getWireframeBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo): number[];
89
+ constructor(pos: Vector3, to: Vector3, thickness: number);
107
90
  recompute(): void;
108
91
  }
109
- export declare class PolygonGeometry extends Geometry<PolygonGeometryParams> {
92
+ export declare class PolygonGeometry extends Geometry<EmptyParams> {
110
93
  protected wireframeOrder: number[];
111
94
  protected triangleOrder: number[];
112
- protected params: PolygonGeometryParams;
113
- constructor(points: Vertex[]);
95
+ protected params: {};
96
+ constructor(vertices: Vector3[]);
114
97
  recompute(): void;
115
- getTriangleBuffer(color: Color): number[];
116
98
  }
117
- export declare class TraceLines2dGeometry extends Geometry<EmptyParams> {
118
- protected wireframeOrder: never[];
99
+ export declare class TraceLines2dGeometry extends Geometry<TraceLinesParams> {
100
+ protected wireframeOrder: number[];
119
101
  protected triangleOrder: never[];
120
102
  protected params: TraceLinesParams;
121
103
  constructor(maxLen?: number);
122
104
  recompute(): void;
123
- getWireframeBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo | undefined): number[];
124
- getWireframeVertexCount(): number;
125
- addVertex(vert: Vertex): void;
105
+ getVertexCount(): number;
106
+ getOrder(_: boolean): readonly [Vector3[], number[]];
107
+ addVertex(vert: Vector3): void;
126
108
  }