@swf2es/context3d 0.0.0-stage → 0.1.1
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/LICENSE +202 -0
- package/README.md +219 -2
- package/dist/agal.d.ts +23 -0
- package/dist/agal.d.ts.map +1 -0
- package/dist/agal.js +410 -0
- package/dist/agal.js.map +1 -0
- package/dist/backend.d.ts +122 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +63 -0
- package/dist/backend.js.map +1 -0
- package/dist/device/index.d.ts +3 -0
- package/dist/device/index.d.ts.map +1 -0
- package/dist/device/index.js +6 -0
- package/dist/device/index.js.map +1 -0
- package/dist/device/programs.d.ts +13 -0
- package/dist/device/programs.d.ts.map +1 -0
- package/dist/device/programs.js +59 -0
- package/dist/device/programs.js.map +1 -0
- package/dist/device/state.d.ts +53 -0
- package/dist/device/state.d.ts.map +1 -0
- package/dist/device/state.js +196 -0
- package/dist/device/state.js.map +1 -0
- package/dist/dxt.d.ts +22 -0
- package/dist/dxt.d.ts.map +1 -0
- package/dist/dxt.js +304 -0
- package/dist/dxt.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +8 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/webgl/buffers.d.ts +27 -0
- package/dist/webgl/buffers.d.ts.map +1 -0
- package/dist/webgl/buffers.js +53 -0
- package/dist/webgl/buffers.js.map +1 -0
- package/dist/webgl/context.d.ts +123 -0
- package/dist/webgl/context.d.ts.map +1 -0
- package/dist/webgl/context.js +1368 -0
- package/dist/webgl/context.js.map +1 -0
- package/dist/webgl/index.d.ts +3 -0
- package/dist/webgl/index.d.ts.map +1 -0
- package/dist/webgl/index.js +2 -0
- package/dist/webgl/index.js.map +1 -0
- package/dist/webgl/limits.d.ts +23 -0
- package/dist/webgl/limits.d.ts.map +1 -0
- package/dist/webgl/limits.js +35 -0
- package/dist/webgl/limits.js.map +1 -0
- package/dist/webgl/programs.d.ts +22 -0
- package/dist/webgl/programs.d.ts.map +1 -0
- package/dist/webgl/programs.js +110 -0
- package/dist/webgl/programs.js.map +1 -0
- package/dist/webgl/state.d.ts +42 -0
- package/dist/webgl/state.d.ts.map +1 -0
- package/dist/webgl/state.js +55 -0
- package/dist/webgl/state.js.map +1 -0
- package/dist/webgl/targets.d.ts +20 -0
- package/dist/webgl/targets.d.ts.map +1 -0
- package/dist/webgl/targets.js +138 -0
- package/dist/webgl/targets.js.map +1 -0
- package/dist/webgl/textures.d.ts +28 -0
- package/dist/webgl/textures.d.ts.map +1 -0
- package/dist/webgl/textures.js +119 -0
- package/dist/webgl/textures.js.map +1 -0
- package/dist/webgl/validation.d.ts +4 -0
- package/dist/webgl/validation.d.ts.map +1 -0
- package/dist/webgl/validation.js +52 -0
- package/dist/webgl/validation.js.map +1 -0
- package/package.json +37 -3
- package/src/agal.ts +496 -0
- package/src/backend.ts +210 -0
- package/src/device/index.ts +5 -0
- package/src/device/programs.ts +66 -0
- package/src/device/state.ts +214 -0
- package/src/dxt.ts +349 -0
- package/src/errors.ts +68 -0
- package/src/index.ts +35 -0
- package/src/webgl/buffers.ts +102 -0
- package/src/webgl/context.ts +1803 -0
- package/src/webgl/index.ts +2 -0
- package/src/webgl/limits.ts +61 -0
- package/src/webgl/programs.ts +145 -0
- package/src/webgl/state.ts +65 -0
- package/src/webgl/targets.ts +229 -0
- package/src/webgl/textures.ts +200 -0
- package/src/webgl/validation.ts +72 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Experimental renderer contracts and AGAL v1 translation, without browser dependencies. */
|
|
2
|
+
|
|
3
|
+
export { type ProgramType, type SamplerSource, type ShaderSource, translate } from "./agal.js";
|
|
4
|
+
export {
|
|
5
|
+
BLEND_FACTORS,
|
|
6
|
+
type BlendFactor,
|
|
7
|
+
type Buffer3D,
|
|
8
|
+
COMPARE_MODES,
|
|
9
|
+
type CompareMode,
|
|
10
|
+
type Context3D,
|
|
11
|
+
type Context3DLifecycle,
|
|
12
|
+
CULL_FACES,
|
|
13
|
+
type CullFace,
|
|
14
|
+
type Program3D,
|
|
15
|
+
SAMPLER_FILTERS,
|
|
16
|
+
SAMPLER_MIPS,
|
|
17
|
+
SAMPLER_WRAPS,
|
|
18
|
+
SamplerBiasError,
|
|
19
|
+
type SamplerFilter,
|
|
20
|
+
type SamplerMip,
|
|
21
|
+
type SamplerWrap,
|
|
22
|
+
ScissorBoundsError,
|
|
23
|
+
STENCIL_ACTIONS,
|
|
24
|
+
type Stage3DHost,
|
|
25
|
+
type StencilAction,
|
|
26
|
+
TEXTURE_FORMATS,
|
|
27
|
+
type Texture3D,
|
|
28
|
+
TextureBindingError,
|
|
29
|
+
type TextureFormat,
|
|
30
|
+
VERTEX_FORMATS,
|
|
31
|
+
type VertexFormat,
|
|
32
|
+
VertexOffsetError,
|
|
33
|
+
} from "./backend.js";
|
|
34
|
+
export { blockBytes, type DxtEncoder, decodeDxt, encodeDxt } from "./dxt.js";
|
|
35
|
+
export { Context3DError, type Context3DErrorReason } from "./errors.js";
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { Buffer3D } from "../backend.js";
|
|
2
|
+
import { range } from "./state.js";
|
|
3
|
+
|
|
4
|
+
export interface BufferState {
|
|
5
|
+
handle: WebGLBuffer;
|
|
6
|
+
indices: Uint16Array | null;
|
|
7
|
+
uploaded: Uint8Array;
|
|
8
|
+
prefix: number;
|
|
9
|
+
version: number;
|
|
10
|
+
checkedVersion: number;
|
|
11
|
+
checkedFirst: number;
|
|
12
|
+
checkedCount: number;
|
|
13
|
+
maximum: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface VertexBinding {
|
|
17
|
+
buffer: Buffer3D;
|
|
18
|
+
offset: number;
|
|
19
|
+
size: number;
|
|
20
|
+
packed: boolean;
|
|
21
|
+
valid: boolean;
|
|
22
|
+
checkedIndex: BufferState | null;
|
|
23
|
+
checkedIndexVersion: number;
|
|
24
|
+
checkedVertexVersion: number;
|
|
25
|
+
checkedFirst: number;
|
|
26
|
+
checkedCount: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function uploaded(state: BufferState, start: number, amount: number): void {
|
|
30
|
+
if (amount === 0) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
state.uploaded.fill(1, start, start + amount);
|
|
35
|
+
state.version++;
|
|
36
|
+
while (state.prefix < state.uploaded.length && state.uploaded[state.prefix]) {
|
|
37
|
+
state.prefix++;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function uploadBuffer(
|
|
42
|
+
gl: WebGL2RenderingContext,
|
|
43
|
+
vao: WebGLVertexArrayObject,
|
|
44
|
+
buffer: Buffer3D,
|
|
45
|
+
state: BufferState,
|
|
46
|
+
values: ArrayLike<number>,
|
|
47
|
+
start: number,
|
|
48
|
+
amount: number,
|
|
49
|
+
): void {
|
|
50
|
+
const { count, stride } = buffer;
|
|
51
|
+
const target = stride === 0 ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER;
|
|
52
|
+
const handle = state.handle;
|
|
53
|
+
range(start, amount, count);
|
|
54
|
+
const size = stride || 1;
|
|
55
|
+
range(0, amount * size, values.length);
|
|
56
|
+
const data = stride === 0 ? new Uint16Array(amount) : new Float32Array(amount * stride);
|
|
57
|
+
for (let i = 0; i < data.length; i++) {
|
|
58
|
+
data[i] = values[i];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
state.indices?.set(data, start);
|
|
62
|
+
uploaded(state, start, amount);
|
|
63
|
+
gl.bindVertexArray(vao);
|
|
64
|
+
gl.bindBuffer(target, handle);
|
|
65
|
+
gl.bufferSubData(target, start * size * (stride === 0 ? 2 : 4), data);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function uploadBufferBytes(
|
|
69
|
+
gl: WebGL2RenderingContext,
|
|
70
|
+
vao: WebGLVertexArrayObject,
|
|
71
|
+
buffer: Buffer3D,
|
|
72
|
+
state: BufferState,
|
|
73
|
+
data: Uint8Array,
|
|
74
|
+
offset: number,
|
|
75
|
+
start: number,
|
|
76
|
+
amount: number,
|
|
77
|
+
): void {
|
|
78
|
+
const { count, stride } = buffer;
|
|
79
|
+
const target = stride === 0 ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER;
|
|
80
|
+
const handle = state.handle;
|
|
81
|
+
range(start, amount, count);
|
|
82
|
+
const bytesPerEntry = stride === 0 ? 2 : stride * 4;
|
|
83
|
+
const length = amount * bytesPerEntry;
|
|
84
|
+
range(offset, length, data.length);
|
|
85
|
+
// In WebGL2, a zero source length uploads the rest of the array.
|
|
86
|
+
if (amount === 0) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const indices = state.indices;
|
|
91
|
+
if (indices) {
|
|
92
|
+
for (let i = 0; i < amount; i++) {
|
|
93
|
+
const at = offset + i * 2;
|
|
94
|
+
indices[start + i] = data[at] | (data[at + 1] << 8);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
uploaded(state, start, amount);
|
|
99
|
+
gl.bindVertexArray(vao);
|
|
100
|
+
gl.bindBuffer(target, handle);
|
|
101
|
+
gl.bufferSubData(target, start * bytesPerEntry, data, offset, length);
|
|
102
|
+
}
|