@swf2es/context3d 0.0.0-stage → 0.1.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.
Files changed (88) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +219 -2
  3. package/dist/agal.d.ts +23 -0
  4. package/dist/agal.d.ts.map +1 -0
  5. package/dist/agal.js +410 -0
  6. package/dist/agal.js.map +1 -0
  7. package/dist/backend.d.ts +122 -0
  8. package/dist/backend.d.ts.map +1 -0
  9. package/dist/backend.js +63 -0
  10. package/dist/backend.js.map +1 -0
  11. package/dist/device/index.d.ts +3 -0
  12. package/dist/device/index.d.ts.map +1 -0
  13. package/dist/device/index.js +6 -0
  14. package/dist/device/index.js.map +1 -0
  15. package/dist/device/programs.d.ts +13 -0
  16. package/dist/device/programs.d.ts.map +1 -0
  17. package/dist/device/programs.js +59 -0
  18. package/dist/device/programs.js.map +1 -0
  19. package/dist/device/state.d.ts +53 -0
  20. package/dist/device/state.d.ts.map +1 -0
  21. package/dist/device/state.js +196 -0
  22. package/dist/device/state.js.map +1 -0
  23. package/dist/dxt.d.ts +22 -0
  24. package/dist/dxt.d.ts.map +1 -0
  25. package/dist/dxt.js +304 -0
  26. package/dist/dxt.js.map +1 -0
  27. package/dist/errors.d.ts +7 -0
  28. package/dist/errors.d.ts.map +1 -0
  29. package/dist/errors.js +8 -0
  30. package/dist/errors.js.map +1 -0
  31. package/dist/index.d.ts +6 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +6 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/webgl/buffers.d.ts +27 -0
  36. package/dist/webgl/buffers.d.ts.map +1 -0
  37. package/dist/webgl/buffers.js +53 -0
  38. package/dist/webgl/buffers.js.map +1 -0
  39. package/dist/webgl/context.d.ts +123 -0
  40. package/dist/webgl/context.d.ts.map +1 -0
  41. package/dist/webgl/context.js +1368 -0
  42. package/dist/webgl/context.js.map +1 -0
  43. package/dist/webgl/index.d.ts +3 -0
  44. package/dist/webgl/index.d.ts.map +1 -0
  45. package/dist/webgl/index.js +2 -0
  46. package/dist/webgl/index.js.map +1 -0
  47. package/dist/webgl/limits.d.ts +23 -0
  48. package/dist/webgl/limits.d.ts.map +1 -0
  49. package/dist/webgl/limits.js +35 -0
  50. package/dist/webgl/limits.js.map +1 -0
  51. package/dist/webgl/programs.d.ts +22 -0
  52. package/dist/webgl/programs.d.ts.map +1 -0
  53. package/dist/webgl/programs.js +110 -0
  54. package/dist/webgl/programs.js.map +1 -0
  55. package/dist/webgl/state.d.ts +42 -0
  56. package/dist/webgl/state.d.ts.map +1 -0
  57. package/dist/webgl/state.js +55 -0
  58. package/dist/webgl/state.js.map +1 -0
  59. package/dist/webgl/targets.d.ts +20 -0
  60. package/dist/webgl/targets.d.ts.map +1 -0
  61. package/dist/webgl/targets.js +138 -0
  62. package/dist/webgl/targets.js.map +1 -0
  63. package/dist/webgl/textures.d.ts +28 -0
  64. package/dist/webgl/textures.d.ts.map +1 -0
  65. package/dist/webgl/textures.js +119 -0
  66. package/dist/webgl/textures.js.map +1 -0
  67. package/dist/webgl/validation.d.ts +4 -0
  68. package/dist/webgl/validation.d.ts.map +1 -0
  69. package/dist/webgl/validation.js +52 -0
  70. package/dist/webgl/validation.js.map +1 -0
  71. package/package.json +37 -3
  72. package/src/agal.ts +496 -0
  73. package/src/backend.ts +210 -0
  74. package/src/device/index.ts +5 -0
  75. package/src/device/programs.ts +66 -0
  76. package/src/device/state.ts +214 -0
  77. package/src/dxt.ts +349 -0
  78. package/src/errors.ts +68 -0
  79. package/src/index.ts +35 -0
  80. package/src/webgl/buffers.ts +102 -0
  81. package/src/webgl/context.ts +1803 -0
  82. package/src/webgl/index.ts +2 -0
  83. package/src/webgl/limits.ts +61 -0
  84. package/src/webgl/programs.ts +145 -0
  85. package/src/webgl/state.ts +65 -0
  86. package/src/webgl/targets.ts +229 -0
  87. package/src/webgl/textures.ts +200 -0
  88. package/src/webgl/validation.ts +72 -0
@@ -0,0 +1,138 @@
1
+ import { Context3DError } from "../errors.js";
2
+ export function selectSamples(gl, quality, depth) {
3
+ if (!Number.isInteger(quality)) {
4
+ throw new Context3DError("operation", "Context3D experiment: invalid antialiasing quality");
5
+ }
6
+ if (quality < 2) {
7
+ return 0;
8
+ }
9
+ const color = gl.getInternalformatParameter(gl.RENDERBUFFER, gl.RGBA8, gl.SAMPLES);
10
+ const stencil = depth
11
+ ? gl.getInternalformatParameter(gl.RENDERBUFFER, gl.DEPTH24_STENCIL8, gl.SAMPLES)
12
+ : null;
13
+ let samples = 0;
14
+ // Quality is a hardware-dependent request; bound this experiment to 4x.
15
+ for (let i = 0; i < color.length; i++) {
16
+ const count = color[i];
17
+ if (count > samples && count <= Math.min(quality, 4) && (!stencil || stencil.includes(count))) {
18
+ samples = count;
19
+ }
20
+ }
21
+ return samples;
22
+ }
23
+ export function targetFramebuffer(state) {
24
+ return state.samples ? (state.multisample?.framebuffer ?? null) : state.framebuffer;
25
+ }
26
+ export function resolveTarget(gl, texture, state, face, scissor) {
27
+ const target = state.multisample;
28
+ if (!state.samples || !target?.dirty) {
29
+ return;
30
+ }
31
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, target.framebuffer);
32
+ gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, target.resolve ?? state.framebuffer);
33
+ if (scissor) {
34
+ gl.disable(gl.SCISSOR_TEST);
35
+ }
36
+ gl.blitFramebuffer(0, 0, texture.width, texture.height, 0, 0, texture.width, texture.height, gl.COLOR_BUFFER_BIT, gl.NEAREST);
37
+ if (target.resolve) {
38
+ // SwiftShader corrupts direct multisample blits into cube faces.
39
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, target.resolve);
40
+ gl.activeTexture(gl.TEXTURE0);
41
+ gl.bindTexture(gl.TEXTURE_CUBE_MAP, state.handle);
42
+ gl.copyTexSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, 0, 0, 0, 0, texture.width, texture.height);
43
+ }
44
+ target.dirty = false;
45
+ }
46
+ export function deleteMultisample(gl, target) {
47
+ gl.deleteFramebuffer(target.framebuffer);
48
+ gl.deleteRenderbuffer(target.color);
49
+ gl.deleteRenderbuffer(target.depth);
50
+ gl.deleteFramebuffer(target.resolve);
51
+ gl.deleteTexture(target.texture);
52
+ }
53
+ export function allocateMultisample(gl, texture, old, samples, depth, depthWrite, stencilWrite) {
54
+ const same = old?.samples === samples;
55
+ const newDepth = depth && (!same || !old.depth);
56
+ const framebuffer = same ? old.framebuffer : gl.createFramebuffer();
57
+ const color = same ? old.color : gl.createRenderbuffer();
58
+ const depthBuffer = newDepth ? gl.createRenderbuffer() : same ? old.depth : null;
59
+ const resolve = same ? old.resolve : texture.cube ? gl.createFramebuffer() : null;
60
+ const resolved = same ? old.texture : texture.cube ? gl.createTexture() : null;
61
+ try {
62
+ if (texture.cube && (!resolve || !resolved)) {
63
+ throw new Context3DError("operation", "Context3D experiment: cannot allocate cube resolve target");
64
+ }
65
+ if (texture.cube && !same) {
66
+ gl.activeTexture(gl.TEXTURE0);
67
+ gl.bindTexture(gl.TEXTURE_2D, resolved);
68
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA8, texture.width, texture.height);
69
+ gl.bindFramebuffer(gl.FRAMEBUFFER, resolve);
70
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, resolved, 0);
71
+ if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
72
+ throw new Context3DError("operation", "Context3D experiment: incomplete cube resolve target");
73
+ }
74
+ }
75
+ if (!framebuffer || !color || (newDepth && !depthBuffer)) {
76
+ throw new Context3DError("operation", "Context3D experiment: cannot allocate multisample target");
77
+ }
78
+ gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
79
+ if (!same) {
80
+ gl.bindRenderbuffer(gl.RENDERBUFFER, color);
81
+ gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples, gl.RGBA8, texture.width, texture.height);
82
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, color);
83
+ }
84
+ if (newDepth) {
85
+ gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer);
86
+ gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples, gl.DEPTH24_STENCIL8, texture.width, texture.height);
87
+ }
88
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, depth ? depthBuffer : null);
89
+ if ((!same || newDepth) &&
90
+ gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
91
+ throw new Context3DError("operation", "Context3D experiment: incomplete multisample target");
92
+ }
93
+ }
94
+ catch (error) {
95
+ if (!same) {
96
+ gl.deleteFramebuffer(framebuffer);
97
+ gl.deleteRenderbuffer(color);
98
+ gl.deleteFramebuffer(resolve);
99
+ gl.deleteTexture(resolved);
100
+ }
101
+ else {
102
+ gl.bindFramebuffer(gl.FRAMEBUFFER, old.framebuffer);
103
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, old.depthAttached ? old.depth : null);
104
+ }
105
+ if (newDepth) {
106
+ gl.deleteRenderbuffer(depthBuffer);
107
+ }
108
+ throw error;
109
+ }
110
+ if (newDepth) {
111
+ gl.disable(gl.SCISSOR_TEST);
112
+ gl.depthMask(true);
113
+ gl.stencilMask(255);
114
+ gl.clearDepth(1);
115
+ gl.clearStencil(0);
116
+ gl.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
117
+ gl.depthMask(depthWrite);
118
+ gl.stencilMask(stencilWrite);
119
+ }
120
+ if (same) {
121
+ old.depth = depthBuffer;
122
+ old.depthAttached = depth;
123
+ return old;
124
+ }
125
+ return {
126
+ framebuffer,
127
+ color,
128
+ depth: depthBuffer,
129
+ samples,
130
+ resolve,
131
+ texture: resolved,
132
+ valid: false,
133
+ dirty: false,
134
+ face: 0,
135
+ depthAttached: depth,
136
+ };
137
+ }
138
+ //# sourceMappingURL=targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/webgl/targets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Texture3D } from "../backend.js";
2
+ import { type DxtEncoder } from "../dxt.js";
3
+ import type { MultisampleTarget } from "./targets.js";
4
+ export interface TextureState {
5
+ handle: WebGLTexture;
6
+ /** The internal format its storage has: RGBA8, or S3TC's for a compressed texture. */
7
+ storage: number;
8
+ /** RGBA staging for a level, made at the first upload that needs it: base-sized. */
9
+ bytes: Uint8Array;
10
+ uploaded: Uint16Array;
11
+ framebuffer: WebGLFramebuffer | null;
12
+ depthBuffer: WebGLRenderbuffer | null;
13
+ dirty: boolean;
14
+ face: number;
15
+ mipFramebuffer: WebGLFramebuffer | null;
16
+ depthAttached: boolean;
17
+ multisample: MultisampleTarget | null;
18
+ samples: number;
19
+ antiAlias: number;
20
+ }
21
+ export declare function uploadTexture(gl: WebGL2RenderingContext, texture: Texture3D, state: TextureState, pixels: Uint32Array, level: number, face: number, sourceWidth?: number, sourceHeight?: number, encoder?: DxtEncoder | null): void;
22
+ export declare function uploadTextureBytes(gl: WebGL2RenderingContext, texture: Texture3D, state: TextureState, data: Uint8Array, offset: number, level: number, face: number, encoder?: DxtEncoder | null): void;
23
+ /**
24
+ * A compressed texture's level from S3TC blocks: as they are where its
25
+ * storage is S3TC's, or decoded to RGBA where the context takes no S3TC.
26
+ */
27
+ export declare function uploadCompressedLevel(gl: WebGL2RenderingContext, texture: Texture3D, state: TextureState, blocks: Uint8Array, level: number, face: number): void;
28
+ //# sourceMappingURL=textures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textures.d.ts","sourceRoot":"","sources":["../../src/webgl/textures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAc,KAAK,UAAU,EAAwB,MAAM,WAAW,CAAC;AAG9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgDD,wBAAgB,aAAa,CAC3B,EAAE,EAAE,sBAAsB,EAC1B,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,UAAU,GAAG,IAAW,GAChC,IAAI,CAmDN;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,sBAAsB,EAC1B,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,UAAU,GAAG,IAAW,GAChC,IAAI,CAmBN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,sBAAsB,EAC1B,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,IAAI,CAyBN"}
@@ -0,0 +1,119 @@
1
+ import { blockBytes, decodeDxt, encodeDxt } from "../dxt.js";
2
+ import { Context3DError } from "../errors.js";
3
+ import { range } from "./state.js";
4
+ /** The staging array, made base-sized at its first use: a texture given only blocks on S3TC has none. */
5
+ function staging(texture, state) {
6
+ if (state.bytes.length === 0) {
7
+ state.bytes = new Uint8Array(texture.width * texture.height * 4);
8
+ }
9
+ return state.bytes;
10
+ }
11
+ /** The staged level uploaded: as it is, or a compressed texture's encoded to its blocks, as AIR compresses pixels. */
12
+ function uploadLevel(gl, texture, state, level, face, w, h, encoder) {
13
+ if (texture.format !== "bgra") {
14
+ const rgba = state.bytes.subarray(0, w * h * 4);
15
+ const dxt5 = texture.format === "compressedAlpha";
16
+ const blocks = encoder?.(rgba, dxt5, w, h) ?? encodeDxt(rgba, dxt5, w, h);
17
+ uploadCompressedLevel(gl, texture, state, blocks, level, face);
18
+ return;
19
+ }
20
+ const cube = texture.cube;
21
+ const target = cube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;
22
+ gl.activeTexture(gl.TEXTURE0);
23
+ gl.bindTexture(target, state.handle);
24
+ gl.texSubImage2D(cube ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + face : target, level, 0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, state.bytes);
25
+ state.uploaded[face] |= 1 << level;
26
+ }
27
+ export function uploadTexture(gl, texture, state, pixels, level, face, sourceWidth, sourceHeight, encoder = null) {
28
+ const { width, height, levels, cube } = texture;
29
+ const faces = cube ? 6 : 1;
30
+ range(level, 1, levels);
31
+ range(face, 1, faces);
32
+ const w = Math.max(1, width >> level);
33
+ const h = Math.max(1, height >> level);
34
+ const sw = sourceWidth ?? w;
35
+ const sh = sourceHeight ?? h;
36
+ if (!Number.isSafeInteger(sw) ||
37
+ sw <= 0 ||
38
+ !Number.isSafeInteger(sh) ||
39
+ sh <= 0 ||
40
+ pixels.length !== sw * sh) {
41
+ throw new Context3DError("textureUpload", "Context3D experiment: texture upload size mismatch");
42
+ }
43
+ // Made once the call is known good: a refused one allocates nothing.
44
+ staging(texture, state);
45
+ if (sw === w && sh === h) {
46
+ for (let i = 0; i < pixels.length; i++) {
47
+ const pixel = pixels[i];
48
+ const at = i * 4;
49
+ state.bytes[at] = pixel >>> 16;
50
+ state.bytes[at + 1] = pixel >>> 8;
51
+ state.bytes[at + 2] = pixel;
52
+ state.bytes[at + 3] = pixel >>> 24;
53
+ }
54
+ }
55
+ else {
56
+ // AIR clips at the top-left and clears uncovered pixels, without scaling.
57
+ if (sw < w || sh < h) {
58
+ state.bytes.fill(0, 0, w * h * 4);
59
+ }
60
+ const columns = Math.min(w, sw);
61
+ const rows = Math.min(h, sh);
62
+ for (let y = 0; y < rows; y++) {
63
+ for (let x = 0; x < columns; x++) {
64
+ const pixel = pixels[y * sw + x];
65
+ const at = (y * w + x) * 4;
66
+ state.bytes[at] = pixel >>> 16;
67
+ state.bytes[at + 1] = pixel >>> 8;
68
+ state.bytes[at + 2] = pixel;
69
+ state.bytes[at + 3] = pixel >>> 24;
70
+ }
71
+ }
72
+ }
73
+ uploadLevel(gl, texture, state, level, face, w, h, encoder);
74
+ }
75
+ export function uploadTextureBytes(gl, texture, state, data, offset, level, face, encoder = null) {
76
+ const { width, height, levels, cube } = texture;
77
+ const faces = cube ? 6 : 1;
78
+ range(level, 1, levels);
79
+ range(face, 1, faces);
80
+ const w = Math.max(1, width >> level);
81
+ const h = Math.max(1, height >> level);
82
+ const length = w * h * 4;
83
+ range(offset, length, data.length);
84
+ staging(texture, state);
85
+ for (let i = 0; i < length; i += 4) {
86
+ state.bytes[i] = data[offset + i + 2];
87
+ state.bytes[i + 1] = data[offset + i + 1];
88
+ state.bytes[i + 2] = data[offset + i];
89
+ state.bytes[i + 3] = data[offset + i + 3];
90
+ }
91
+ uploadLevel(gl, texture, state, level, face, w, h, encoder);
92
+ }
93
+ /**
94
+ * A compressed texture's level from S3TC blocks: as they are where its
95
+ * storage is S3TC's, or decoded to RGBA where the context takes no S3TC.
96
+ */
97
+ export function uploadCompressedLevel(gl, texture, state, blocks, level, face) {
98
+ const { width, height, levels, cube } = texture;
99
+ range(level, 1, levels);
100
+ range(face, 1, cube ? 6 : 1);
101
+ const w = Math.max(1, width >> level);
102
+ const h = Math.max(1, height >> level);
103
+ const dxt5 = texture.format === "compressedAlpha";
104
+ if (blocks.length !== blockBytes(w, h, dxt5)) {
105
+ throw new Context3DError("textureUpload", "Context3D experiment: compressed level size mismatch");
106
+ }
107
+ const target = cube ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + face : gl.TEXTURE_2D;
108
+ gl.activeTexture(gl.TEXTURE0);
109
+ gl.bindTexture(cube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D, state.handle);
110
+ if (state.storage === gl.RGBA8) {
111
+ decodeDxt(blocks, dxt5, w, h, staging(texture, state));
112
+ gl.texSubImage2D(target, level, 0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, state.bytes);
113
+ }
114
+ else {
115
+ gl.compressedTexSubImage2D(target, level, 0, 0, w, h, state.storage, blocks);
116
+ }
117
+ state.uploaded[face] |= 1 << level;
118
+ }
119
+ //# sourceMappingURL=textures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textures.js","sourceRoot":"","sources":["../../src/webgl/textures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { BufferState, VertexBinding } from "./buffers.js";
2
+ export declare function validateIndices(index: BufferState, first: number, count: number): number;
3
+ export declare function validateVertices(vertex: BufferState, index: BufferState, binding: VertexBinding, first: number, count: number, maximum: number): void;
4
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/webgl/validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA8BxF;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,IAAI,CA6BN"}
@@ -0,0 +1,52 @@
1
+ import { Context3DError } from "../errors.js";
2
+ export function validateIndices(index, first, count) {
3
+ if (index.checkedVersion === index.version &&
4
+ index.checkedFirst === first &&
5
+ index.checkedCount === count) {
6
+ return index.maximum;
7
+ }
8
+ const values = index.indices;
9
+ if (!values) {
10
+ throw new Context3DError("indexBuffer", "Context3D draw needs an index buffer");
11
+ }
12
+ const end = first + count;
13
+ let maximum = -1;
14
+ for (let i = first; i < end; i++) {
15
+ if (index.prefix < end && !index.uploaded[i]) {
16
+ throw new Context3DError("indexData", "Context3D index not uploaded");
17
+ }
18
+ maximum = Math.max(maximum, values[i]);
19
+ }
20
+ index.checkedVersion = index.version;
21
+ index.checkedFirst = first;
22
+ index.checkedCount = count;
23
+ index.maximum = maximum;
24
+ return maximum;
25
+ }
26
+ export function validateVertices(vertex, index, binding, first, count, maximum) {
27
+ if (maximum < vertex.prefix) {
28
+ return;
29
+ }
30
+ if (maximum >= vertex.uploaded.length) {
31
+ throw new Context3DError("vertexData", "Context3D vertex outside its buffer");
32
+ }
33
+ if (binding.checkedIndex === index &&
34
+ binding.checkedIndexVersion === index.version &&
35
+ binding.checkedVertexVersion === vertex.version &&
36
+ binding.checkedFirst === first &&
37
+ binding.checkedCount === count) {
38
+ return;
39
+ }
40
+ const values = index.indices;
41
+ for (let i = first; i < first + count; i++) {
42
+ if (!vertex.uploaded[values[i]]) {
43
+ throw new Context3DError("vertexStream", "Context3D vertex not uploaded");
44
+ }
45
+ }
46
+ binding.checkedIndex = index;
47
+ binding.checkedIndexVersion = index.version;
48
+ binding.checkedVertexVersion = vertex.version;
49
+ binding.checkedFirst = first;
50
+ binding.checkedCount = count;
51
+ }
52
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/webgl/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,UAAU,eAAe,CAAC,KAAkB,EAAE,KAAa,EAAE,KAAa;IAC9E,IACE,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,OAAO;QACtC,KAAK,CAAC,YAAY,KAAK,KAAK;QAC5B,KAAK,CAAC,YAAY,KAAK,KAAK,EAC5B,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,cAAc,CAAC,aAAa,EAAE,sCAAsC,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;IAC1B,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,cAAc,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC;IACrC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAmB,EACnB,KAAkB,EAClB,OAAsB,EACtB,KAAa,EACb,KAAa,EACb,OAAe;IAEf,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,IAAI,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,cAAc,CAAC,YAAY,EAAE,qCAAqC,CAAC,CAAC;IAChF,CAAC;IACD,IACE,OAAO,CAAC,YAAY,KAAK,KAAK;QAC9B,OAAO,CAAC,mBAAmB,KAAK,KAAK,CAAC,OAAO;QAC7C,OAAO,CAAC,oBAAoB,KAAK,MAAM,CAAC,OAAO;QAC/C,OAAO,CAAC,YAAY,KAAK,KAAK;QAC9B,OAAO,CAAC,YAAY,KAAK,KAAK,EAC9B,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAsB,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,cAAc,CAAC,cAAc,EAAE,+BAA+B,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;IAC7B,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC;IAC5C,OAAO,CAAC,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC;IAC9C,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;IAC7B,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,40 @@
1
1
  {
2
2
  "name": "@swf2es/context3d",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "Experimental Context3D resource contracts, AGAL translation and an optional WebGL2 backend",
5
+ "keywords": [
6
+ "flash",
7
+ "stage3d",
8
+ "context3d",
9
+ "agal",
10
+ "webgl2"
11
+ ],
12
+ "homepage": "https://swf2es.github.io/swf2es/",
13
+ "bugs": "https://github.com/swf2es/swf2es/issues",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/swf2es/swf2es.git",
17
+ "directory": "packages/context3d"
18
+ },
19
+ "license": "Apache-2.0",
20
+ "type": "module",
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "default": "./dist/index.js"
25
+ },
26
+ "./device": {
27
+ "types": "./dist/device/index.d.ts",
28
+ "default": "./dist/device/index.js"
29
+ },
30
+ "./webgl": {
31
+ "types": "./dist/webgl/index.d.ts",
32
+ "default": "./dist/webgl/index.js"
33
+ }
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "!dist/**/.tsbuildinfo",
38
+ "src"
39
+ ]
6
40
  }