webgl2 1.3.0 → 1.3.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/coverage.md +43 -41
- package/index.js +14 -7
- package/package.json +1 -1
- package/src/webgl2_context.js +126 -294
- package/webgl2.debug.wasm +0 -0
- package/webgl2.wasm +0 -0
package/coverage.md
CHANGED
|
@@ -4,50 +4,52 @@
|
|
|
4
4
|
|
|
5
5
|
| File | Lines Covered | Lines Missed | Total Lines | Coverage |
|
|
6
6
|
|---|---|---|---|---:|
|
|
7
|
-
| src/coverage.rs |
|
|
8
|
-
| src/decompiler/ast.rs |
|
|
9
|
-
| src/decompiler/emitter.rs |
|
|
10
|
-
| src/decompiler/lifter.rs |
|
|
11
|
-
| src/decompiler/
|
|
12
|
-
| src/decompiler/
|
|
13
|
-
| src/
|
|
14
|
-
| src/
|
|
15
|
-
| src/
|
|
16
|
-
| src/naga_wasm_backend/
|
|
17
|
-
| src/naga_wasm_backend/
|
|
18
|
-
| src/naga_wasm_backend/
|
|
19
|
-
| src/naga_wasm_backend/
|
|
20
|
-
| src/naga_wasm_backend/
|
|
21
|
-
| src/naga_wasm_backend/
|
|
22
|
-
| src/naga_wasm_backend/functions/
|
|
23
|
-
| src/naga_wasm_backend/
|
|
24
|
-
| src/naga_wasm_backend/
|
|
25
|
-
| src/naga_wasm_backend/
|
|
26
|
-
| src/naga_wasm_backend/
|
|
27
|
-
| src/
|
|
7
|
+
| src/coverage.rs | 9 | 5 | 14 | 64.29% 🟡 |
|
|
8
|
+
| src/decompiler/ast.rs | 6 | 0 | 6 | 100.00% 🟢 |
|
|
9
|
+
| src/decompiler/emitter.rs | 24 | 3 | 27 | 88.89% 🟢 |
|
|
10
|
+
| src/decompiler/lifter.rs | 6 | 2 | 8 | 75.00% 🟡 |
|
|
11
|
+
| src/decompiler/parser.rs | 12 | 3 | 15 | 80.00% 🟢 |
|
|
12
|
+
| src/decompiler/simplifier.rs | 36 | 2 | 38 | 94.74% 🟢 |
|
|
13
|
+
| src/error.rs | 33 | 8 | 41 | 80.49% 🟢 |
|
|
14
|
+
| src/lib.rs | 155 | 298 | 453 | 34.22% 🟠 |
|
|
15
|
+
| src/naga_wasm_backend/backend.rs | 151 | 24 | 175 | 86.29% 🟢 |
|
|
16
|
+
| src/naga_wasm_backend/call_lowering.rs | 9 | 3 | 12 | 75.00% 🟡 |
|
|
17
|
+
| src/naga_wasm_backend/control_flow.rs | 38 | 30 | 68 | 55.88% 🟡 |
|
|
18
|
+
| src/naga_wasm_backend/debug/stub.rs | 11 | 16 | 27 | 40.74% 🟠 |
|
|
19
|
+
| src/naga_wasm_backend/expressions.rs | 270 | 155 | 425 | 63.53% 🟡 |
|
|
20
|
+
| src/naga_wasm_backend/function_abi.rs | 15 | 8 | 23 | 65.22% 🟡 |
|
|
21
|
+
| src/naga_wasm_backend/functions/prep.rs | 5 | 0 | 5 | 100.00% 🟢 |
|
|
22
|
+
| src/naga_wasm_backend/functions/registry.rs | 6 | 0 | 6 | 100.00% 🟢 |
|
|
23
|
+
| src/naga_wasm_backend/memory_layout.rs | 15 | 1 | 16 | 93.75% 🟢 |
|
|
24
|
+
| src/naga_wasm_backend/mod.rs | 6 | 0 | 6 | 100.00% 🟢 |
|
|
25
|
+
| src/naga_wasm_backend/output_layout.rs | 7 | 1 | 8 | 87.50% 🟢 |
|
|
26
|
+
| src/naga_wasm_backend/types.rs | 22 | 6 | 28 | 78.57% 🟡 |
|
|
27
|
+
| src/wasm_gl_emu/device.rs | 3 | 0 | 3 | 100.00% 🟢 |
|
|
28
28
|
| src/wasm_gl_emu/framebuffer.rs | 1 | 0 | 1 | 100.00% 🟢 |
|
|
29
|
-
| src/wasm_gl_emu/rasterizer.rs |
|
|
30
|
-
| src/wasm_gl_emu/transfer.rs |
|
|
31
|
-
| src/webgl2_context/blend.rs |
|
|
32
|
-
| src/webgl2_context/buffers.rs |
|
|
33
|
-
| src/webgl2_context/drawing.rs |
|
|
34
|
-
| src/webgl2_context/
|
|
35
|
-
| src/webgl2_context/
|
|
36
|
-
| src/webgl2_context/
|
|
37
|
-
| src/webgl2_context/
|
|
38
|
-
| src/webgl2_context/
|
|
39
|
-
| src/
|
|
40
|
-
| src/
|
|
41
|
-
| src/webgpu/
|
|
42
|
-
| src/webgpu/
|
|
43
|
-
| src/webgpu/
|
|
44
|
-
|
|
|
29
|
+
| src/wasm_gl_emu/rasterizer.rs | 16 | 41 | 57 | 28.07% 🟠 |
|
|
30
|
+
| src/wasm_gl_emu/transfer.rs | 3 | 0 | 3 | 100.00% 🟢 |
|
|
31
|
+
| src/webgl2_context/blend.rs | 14 | 1 | 15 | 93.33% 🟢 |
|
|
32
|
+
| src/webgl2_context/buffers.rs | 12 | 0 | 12 | 100.00% 🟢 |
|
|
33
|
+
| src/webgl2_context/drawing.rs | 33 | 0 | 33 | 100.00% 🟢 |
|
|
34
|
+
| src/webgl2_context/ephemeral.rs | 0 | 1 | 1 | 0.00% 🟡 |
|
|
35
|
+
| src/webgl2_context/framebuffers.rs | 8 | 6 | 14 | 57.14% 🟡 |
|
|
36
|
+
| src/webgl2_context/registry.rs | 11 | 0 | 11 | 100.00% 🟢 |
|
|
37
|
+
| src/webgl2_context/shaders.rs | 137 | 29 | 166 | 82.53% 🟢 |
|
|
38
|
+
| src/webgl2_context/state.rs | 33 | 9 | 42 | 78.57% 🟡 |
|
|
39
|
+
| src/webgl2_context/textures.rs | 60 | 0 | 60 | 100.00% 🟢 |
|
|
40
|
+
| src/webgl2_context/types.rs | 45 | 21 | 66 | 68.18% 🟡 |
|
|
41
|
+
| src/webgpu/adapter.rs | 3 | 0 | 3 | 100.00% 🟢 |
|
|
42
|
+
| src/webgpu/backend.rs | 52 | 17 | 69 | 75.36% 🟡 |
|
|
43
|
+
| src/webgpu/bind_group.rs | 6 | 1 | 7 | 85.71% 🟢 |
|
|
44
|
+
| src/webgpu/buffer.rs | 8 | 2 | 10 | 80.00% 🟢 |
|
|
45
|
+
| src/webgpu/command.rs | 12 | 5 | 17 | 70.59% 🟡 |
|
|
46
|
+
| **Total** | **1293** | **698** | **1991** | **64.94% 🟡** |
|
|
45
47
|
|
|
46
48
|
## Top Missed Files
|
|
47
49
|
|
|
48
50
|
| File | Lines Missed | Illustrative Line | Coverage |
|
|
49
51
|
|---|---|---|---:|
|
|
50
|
-
| src/lib.rs |
|
|
51
|
-
| src/naga_wasm_backend/expressions.rs |
|
|
52
|
-
| src/
|
|
53
|
-
| src/naga_wasm_backend/
|
|
52
|
+
| src/lib.rs | 298/453 | [1994] `vertex_module_handle: u32,` | 34.22% 🟠 |
|
|
53
|
+
| src/naga_wasm_backend/expressions.rs | 155/425 | [910] `if let Some(handle) = found_global {` | 63.53% 🟡 |
|
|
54
|
+
| src/wasm_gl_emu/rasterizer.rs | 41/57 | [370] `match eq {` | 28.07% 🟠 |
|
|
55
|
+
| src/naga_wasm_backend/control_flow.rs | 30/68 | [489] `let types = super::types::naga_to_wasm_types(` | 55.88% 🟡 |
|
package/index.js
CHANGED
|
@@ -366,16 +366,23 @@ async function initWASM({ debug } = {}) {
|
|
|
366
366
|
*/
|
|
367
367
|
function _readErrorMessage(instance) {
|
|
368
368
|
const ex = instance.exports;
|
|
369
|
-
if (!ex || typeof ex.
|
|
369
|
+
if (!ex || typeof ex.wasm_last_error !== 'function') {
|
|
370
|
+
if (typeof ex.wasm_last_error_ptr === 'function') {
|
|
371
|
+
const ptr = ex.wasm_last_error_ptr();
|
|
372
|
+
const len = ex.wasm_last_error_len();
|
|
373
|
+
if (ptr === 0 || len === 0) return '';
|
|
374
|
+
const mem = new Uint8Array(ex.memory.buffer);
|
|
375
|
+
const bytes = mem.subarray(ptr, ptr + len);
|
|
376
|
+
return new TextDecoder('utf-8').decode(bytes);
|
|
377
|
+
}
|
|
370
378
|
return '(no error message available)';
|
|
371
379
|
}
|
|
372
|
-
const ptr = ex.
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
}
|
|
380
|
+
const ptr = ex.wasm_last_error();
|
|
381
|
+
if (ptr === 0) return '';
|
|
382
|
+
const dv = new DataView(ex.memory.buffer);
|
|
383
|
+
const len = dv.getUint32(ptr - 16, true);
|
|
377
384
|
const mem = new Uint8Array(ex.memory.buffer);
|
|
378
|
-
const bytes = mem.
|
|
385
|
+
const bytes = mem.slice(ptr, ptr + len);
|
|
379
386
|
return new TextDecoder('utf-8').decode(bytes);
|
|
380
387
|
}
|
|
381
388
|
|
package/package.json
CHANGED
package/src/webgl2_context.js
CHANGED
|
@@ -709,48 +709,31 @@ export class WasmWebGL2RenderingContext {
|
|
|
709
709
|
throw new Error('wasm_ctx_read_pixels not found');
|
|
710
710
|
}
|
|
711
711
|
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
const len = width * height * bpp;
|
|
726
|
-
if (!out || out.byteLength < len) {
|
|
727
|
-
throw new Error(`output buffer too small (need ${len} bytes, have ${out ? out.byteLength : 0})`);
|
|
712
|
+
const ptr = ex.wasm_ctx_read_pixels(
|
|
713
|
+
this._ctxHandle,
|
|
714
|
+
x | 0,
|
|
715
|
+
y | 0,
|
|
716
|
+
width >>> 0,
|
|
717
|
+
height >>> 0,
|
|
718
|
+
format >>> 0,
|
|
719
|
+
type_ >>> 0
|
|
720
|
+
);
|
|
721
|
+
|
|
722
|
+
if (ptr === 0) {
|
|
723
|
+
const msg = readErrorMessage(this._instance);
|
|
724
|
+
throw new Error(`readPixels failed: ${msg}`);
|
|
728
725
|
}
|
|
729
726
|
|
|
730
|
-
const
|
|
731
|
-
|
|
727
|
+
const dv = new DataView(ex.memory.buffer);
|
|
728
|
+
const len = dv.getUint32(ptr - 16, true);
|
|
732
729
|
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
this._ctxHandle,
|
|
736
|
-
x | 0,
|
|
737
|
-
y | 0,
|
|
738
|
-
width >>> 0,
|
|
739
|
-
height >>> 0,
|
|
740
|
-
format >>> 0,
|
|
741
|
-
type_ >>> 0,
|
|
742
|
-
ptr >>> 0,
|
|
743
|
-
len >>> 0
|
|
744
|
-
);
|
|
745
|
-
_checkErr(code, this._instance);
|
|
746
|
-
|
|
747
|
-
const mem = new Uint8Array(ex.memory.buffer);
|
|
748
|
-
const src = mem.subarray(ptr, ptr + len);
|
|
749
|
-
const out_bytes = new Uint8Array(out.buffer, out.byteOffset, len);
|
|
750
|
-
out_bytes.set(src);
|
|
751
|
-
} finally {
|
|
752
|
-
ex.wasm_free(ptr);
|
|
730
|
+
if (!out || out.byteLength < len) {
|
|
731
|
+
throw new Error(`output buffer too small (need ${len} bytes, have ${out ? out.byteLength : 0})`);
|
|
753
732
|
}
|
|
733
|
+
|
|
734
|
+
const src = new Uint8Array(ex.memory.buffer, ptr, len);
|
|
735
|
+
const out_bytes = new Uint8Array(out.buffer, out.byteOffset, len);
|
|
736
|
+
out_bytes.set(src);
|
|
754
737
|
}
|
|
755
738
|
|
|
756
739
|
// --- Stubs for unimplemented WebGL2 methods (forwarding API surface) ---
|
|
@@ -856,43 +839,18 @@ export class WasmWebGL2RenderingContext {
|
|
|
856
839
|
}
|
|
857
840
|
const programHandle = program && typeof program === 'object' && typeof program._handle === 'number' ? program._handle : (program >>> 0);
|
|
858
841
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
const typePtr = ex.wasm_alloc(4);
|
|
862
|
-
const nameMaxLen = 256;
|
|
863
|
-
const namePtr = ex.wasm_alloc(nameMaxLen);
|
|
864
|
-
|
|
865
|
-
try {
|
|
866
|
-
const nameLen = ex.wasm_ctx_get_active_uniform(
|
|
867
|
-
this._ctxHandle,
|
|
868
|
-
programHandle,
|
|
869
|
-
index >>> 0,
|
|
870
|
-
sizePtr,
|
|
871
|
-
typePtr,
|
|
872
|
-
namePtr,
|
|
873
|
-
nameMaxLen
|
|
874
|
-
);
|
|
875
|
-
|
|
876
|
-
if (nameLen === 0) {
|
|
877
|
-
return null;
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
const mem32SizeIdx = sizePtr >>> 2;
|
|
881
|
-
const mem32TypeIdx = typePtr >>> 2;
|
|
882
|
-
|
|
883
|
-
const size = new Int32Array(ex.memory.buffer)[mem32SizeIdx];
|
|
884
|
-
const type_ = new Uint32Array(ex.memory.buffer)[mem32TypeIdx];
|
|
885
|
-
|
|
886
|
-
const nameBytes = new Uint8Array(ex.memory.buffer, namePtr, nameLen);
|
|
887
|
-
const name = new TextDecoder().decode(nameBytes);
|
|
842
|
+
const ptr = ex.wasm_ctx_get_active_uniform(this._ctxHandle, programHandle, index >>> 0);
|
|
843
|
+
if (ptr === 0) return null;
|
|
888
844
|
|
|
889
|
-
|
|
845
|
+
const dv = new DataView(ex.memory.buffer);
|
|
846
|
+
const totalLen = dv.getUint32(ptr - 16, true);
|
|
847
|
+
const size = dv.getInt32(ptr, true);
|
|
848
|
+
const type_ = dv.getUint32(ptr + 4, true);
|
|
849
|
+
const nameLen = totalLen - 8;
|
|
850
|
+
const nameBytes = new Uint8Array(ex.memory.buffer, ptr + 8, nameLen);
|
|
851
|
+
const name = new TextDecoder('utf-8').decode(nameBytes);
|
|
890
852
|
|
|
891
|
-
|
|
892
|
-
ex.wasm_free(sizePtr);
|
|
893
|
-
ex.wasm_free(typePtr);
|
|
894
|
-
ex.wasm_free(namePtr);
|
|
895
|
-
}
|
|
853
|
+
return { name, size, type: type_ };
|
|
896
854
|
}
|
|
897
855
|
|
|
898
856
|
getActiveAttrib(program, index) {
|
|
@@ -903,43 +861,18 @@ export class WasmWebGL2RenderingContext {
|
|
|
903
861
|
}
|
|
904
862
|
const programHandle = program && typeof program === 'object' && typeof program._handle === 'number' ? program._handle : (program >>> 0);
|
|
905
863
|
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
const typePtr = ex.wasm_alloc(4);
|
|
909
|
-
const nameMaxLen = 256;
|
|
910
|
-
const namePtr = ex.wasm_alloc(nameMaxLen);
|
|
911
|
-
|
|
912
|
-
try {
|
|
913
|
-
const nameLen = ex.wasm_ctx_get_active_attrib(
|
|
914
|
-
this._ctxHandle,
|
|
915
|
-
programHandle,
|
|
916
|
-
index >>> 0,
|
|
917
|
-
sizePtr,
|
|
918
|
-
typePtr,
|
|
919
|
-
namePtr,
|
|
920
|
-
nameMaxLen
|
|
921
|
-
);
|
|
922
|
-
|
|
923
|
-
if (nameLen === 0) {
|
|
924
|
-
return null;
|
|
925
|
-
}
|
|
926
|
-
|
|
927
|
-
const mem32SizeIdx = sizePtr >>> 2;
|
|
928
|
-
const mem32TypeIdx = typePtr >>> 2;
|
|
929
|
-
|
|
930
|
-
const size = new Int32Array(ex.memory.buffer)[mem32SizeIdx];
|
|
931
|
-
const type_ = new Uint32Array(ex.memory.buffer)[mem32TypeIdx];
|
|
932
|
-
|
|
933
|
-
const nameBytes = new Uint8Array(ex.memory.buffer, namePtr, nameLen);
|
|
934
|
-
const name = new TextDecoder().decode(nameBytes);
|
|
864
|
+
const ptr = ex.wasm_ctx_get_active_attrib(this._ctxHandle, programHandle, index >>> 0);
|
|
865
|
+
if (ptr === 0) return null;
|
|
935
866
|
|
|
936
|
-
|
|
867
|
+
const dv = new DataView(ex.memory.buffer);
|
|
868
|
+
const totalLen = dv.getUint32(ptr - 16, true);
|
|
869
|
+
const size = dv.getInt32(ptr, true);
|
|
870
|
+
const type_ = dv.getUint32(ptr + 4, true);
|
|
871
|
+
const nameLen = totalLen - 8;
|
|
872
|
+
const nameBytes = new Uint8Array(ex.memory.buffer, ptr + 8, nameLen);
|
|
873
|
+
const name = new TextDecoder('utf-8').decode(nameBytes);
|
|
937
874
|
|
|
938
|
-
|
|
939
|
-
ex.wasm_free(sizePtr);
|
|
940
|
-
ex.wasm_free(typePtr);
|
|
941
|
-
ex.wasm_free(namePtr);
|
|
942
|
-
}
|
|
875
|
+
return { name, size, type: type_ };
|
|
943
876
|
}
|
|
944
877
|
|
|
945
878
|
linkProgram(program) {
|
|
@@ -1216,18 +1149,14 @@ export class WasmWebGL2RenderingContext {
|
|
|
1216
1149
|
}
|
|
1217
1150
|
const shaderHandle = shader && typeof shader === 'object' && typeof shader._handle === 'number' ? shader._handle : (shader >>> 0);
|
|
1218
1151
|
|
|
1219
|
-
const
|
|
1220
|
-
|
|
1221
|
-
if (ptr === 0) throw new Error('Failed to allocate memory for getShaderInfoLog');
|
|
1152
|
+
const ptr = ex.wasm_ctx_get_shader_info_log(this._ctxHandle, shaderHandle);
|
|
1153
|
+
if (ptr === 0) return "";
|
|
1222
1154
|
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
} finally {
|
|
1229
|
-
ex.wasm_free(ptr);
|
|
1230
|
-
}
|
|
1155
|
+
const dv = new DataView(ex.memory.buffer);
|
|
1156
|
+
const len = dv.getUint32(ptr - 16, true);
|
|
1157
|
+
const mem = new Uint8Array(ex.memory.buffer);
|
|
1158
|
+
const bytes = mem.slice(ptr, ptr + len);
|
|
1159
|
+
return new TextDecoder().decode(bytes);
|
|
1231
1160
|
}
|
|
1232
1161
|
|
|
1233
1162
|
getProgramInfoLog(program) {
|
|
@@ -1238,18 +1167,14 @@ export class WasmWebGL2RenderingContext {
|
|
|
1238
1167
|
}
|
|
1239
1168
|
const programHandle = program && typeof program === 'object' && typeof program._handle === 'number' ? program._handle : (program >>> 0);
|
|
1240
1169
|
|
|
1241
|
-
const
|
|
1242
|
-
|
|
1243
|
-
if (ptr === 0) throw new Error('Failed to allocate memory for getProgramInfoLog');
|
|
1170
|
+
const ptr = ex.wasm_ctx_get_program_info_log(this._ctxHandle, programHandle);
|
|
1171
|
+
if (ptr === 0) return "";
|
|
1244
1172
|
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
} finally {
|
|
1251
|
-
ex.wasm_free(ptr);
|
|
1252
|
-
}
|
|
1173
|
+
const dv = new DataView(ex.memory.buffer);
|
|
1174
|
+
const len = dv.getUint32(ptr - 16, true);
|
|
1175
|
+
const mem = new Uint8Array(ex.memory.buffer);
|
|
1176
|
+
const bytes = mem.slice(ptr, ptr + len);
|
|
1177
|
+
return new TextDecoder().decode(bytes);
|
|
1253
1178
|
}
|
|
1254
1179
|
|
|
1255
1180
|
getProgramWasm(program, shaderType) {
|
|
@@ -1918,45 +1843,18 @@ export class WasmWebGL2RenderingContext {
|
|
|
1918
1843
|
}
|
|
1919
1844
|
const programHandle = program && typeof program === "object" && typeof program._handle === "number" ? program._handle : (program >>> 0);
|
|
1920
1845
|
|
|
1921
|
-
const
|
|
1922
|
-
|
|
1923
|
-
const nameCapacity = 256;
|
|
1924
|
-
const namePtr = ex.wasm_alloc(nameCapacity);
|
|
1925
|
-
|
|
1926
|
-
if (sizePtr === 0 || typePtr === 0 || namePtr === 0) {
|
|
1927
|
-
if (sizePtr) ex.wasm_free(sizePtr);
|
|
1928
|
-
if (typePtr) ex.wasm_free(typePtr);
|
|
1929
|
-
if (namePtr) ex.wasm_free(namePtr);
|
|
1930
|
-
throw new Error("Failed to allocate memory for getTransformFeedbackVarying");
|
|
1931
|
-
}
|
|
1932
|
-
|
|
1933
|
-
try {
|
|
1934
|
-
const code = ex.wasm_ctx_get_transform_feedback_varying(
|
|
1935
|
-
this._ctxHandle,
|
|
1936
|
-
programHandle,
|
|
1937
|
-
index >>> 0,
|
|
1938
|
-
sizePtr,
|
|
1939
|
-
typePtr,
|
|
1940
|
-
namePtr,
|
|
1941
|
-
nameCapacity
|
|
1942
|
-
);
|
|
1943
|
-
_checkErr(code, this._instance);
|
|
1944
|
-
|
|
1945
|
-
const mem = new DataView(ex.memory.buffer);
|
|
1946
|
-
const size = mem.getInt32(sizePtr, true);
|
|
1947
|
-
const type = mem.getUint32(typePtr, true);
|
|
1846
|
+
const ptr = ex.wasm_ctx_get_transform_feedback_varying(this._ctxHandle, programHandle, index >>> 0);
|
|
1847
|
+
if (ptr === 0) return null;
|
|
1948
1848
|
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1849
|
+
const dv = new DataView(ex.memory.buffer);
|
|
1850
|
+
const totalLen = dv.getUint32(ptr - 16, true);
|
|
1851
|
+
const size = dv.getInt32(ptr, true);
|
|
1852
|
+
const type = dv.getUint32(ptr + 4, true);
|
|
1853
|
+
const nameLen = totalLen - 8;
|
|
1854
|
+
const nameBytes = new Uint8Array(ex.memory.buffer, ptr + 8, nameLen);
|
|
1855
|
+
const name = new TextDecoder('utf-8').decode(nameBytes);
|
|
1953
1856
|
|
|
1954
|
-
|
|
1955
|
-
} finally {
|
|
1956
|
-
ex.wasm_free(sizePtr);
|
|
1957
|
-
ex.wasm_free(typePtr);
|
|
1958
|
-
ex.wasm_free(namePtr);
|
|
1959
|
-
}
|
|
1857
|
+
return { name, size, type };
|
|
1960
1858
|
}
|
|
1961
1859
|
|
|
1962
1860
|
createQuery() { this._assertNotDestroyed(); throw new Error('not implemented'); }
|
|
@@ -2317,116 +2215,66 @@ export class WasmWebGL2RenderingContext {
|
|
|
2317
2215
|
getParameter(pname) {
|
|
2318
2216
|
this._assertNotDestroyed();
|
|
2319
2217
|
const ex = this._instance.exports;
|
|
2320
|
-
if (!ex || typeof ex.
|
|
2321
|
-
throw new Error('
|
|
2218
|
+
if (!ex || typeof ex.wasm_ctx_get_parameter !== 'function') {
|
|
2219
|
+
throw new Error('wasm_ctx_get_parameter not found');
|
|
2220
|
+
}
|
|
2221
|
+
|
|
2222
|
+
if (pname === 0x8869 /* MAX_VERTEX_ATTRIBS */) {
|
|
2223
|
+
return 16;
|
|
2224
|
+
}
|
|
2225
|
+
|
|
2226
|
+
const ptr = ex.wasm_ctx_get_parameter(this._ctxHandle, pname);
|
|
2227
|
+
if (ptr === 0) {
|
|
2228
|
+
return null;
|
|
2229
|
+
}
|
|
2230
|
+
|
|
2231
|
+
const dv = new DataView(ex.memory.buffer);
|
|
2232
|
+
|
|
2233
|
+
if (pname === 0x1F00 || pname === 0x1F01 || pname === 0x1F02 || pname === 0x8B8C) {
|
|
2234
|
+
const len = dv.getUint32(ptr - 16, true);
|
|
2235
|
+
const bytes = new Uint8Array(ex.memory.buffer, ptr, len);
|
|
2236
|
+
return new TextDecoder().decode(bytes);
|
|
2322
2237
|
}
|
|
2323
2238
|
|
|
2324
2239
|
if (pname === 0x0BA2 /* VIEWPORT */) {
|
|
2325
|
-
|
|
2326
|
-
try {
|
|
2327
|
-
const code = ex.wasm_ctx_get_parameter_v(this._ctxHandle, pname, ptr, 16);
|
|
2328
|
-
_checkErr(code, this._instance);
|
|
2329
|
-
const mem = new Int32Array(ex.memory.buffer, ptr, 4);
|
|
2330
|
-
return new Int32Array(mem);
|
|
2331
|
-
} finally {
|
|
2332
|
-
ex.wasm_free(ptr, 16);
|
|
2333
|
-
}
|
|
2240
|
+
return new Int32Array(ex.memory.buffer.slice(ptr, ptr + 16));
|
|
2334
2241
|
}
|
|
2335
2242
|
|
|
2336
2243
|
if (pname === 0x0C22 /* COLOR_CLEAR_VALUE */) {
|
|
2337
|
-
|
|
2338
|
-
try {
|
|
2339
|
-
const code = ex.wasm_ctx_get_parameter_v(this._ctxHandle, pname, ptr, 16);
|
|
2340
|
-
_checkErr(code, this._instance);
|
|
2341
|
-
const mem = new Float32Array(ex.memory.buffer, ptr, 4);
|
|
2342
|
-
return new Float32Array(mem);
|
|
2343
|
-
} finally {
|
|
2344
|
-
ex.wasm_free(ptr, 16);
|
|
2345
|
-
}
|
|
2244
|
+
return new Float32Array(ex.memory.buffer.slice(ptr, ptr + 16));
|
|
2346
2245
|
}
|
|
2347
2246
|
|
|
2348
2247
|
if (pname === 0x0C23 /* COLOR_WRITEMASK */) {
|
|
2349
|
-
const
|
|
2350
|
-
|
|
2351
|
-
const code = ex.wasm_ctx_get_parameter_v(this._ctxHandle, pname, ptr, 4);
|
|
2352
|
-
_checkErr(code, this._instance);
|
|
2353
|
-
const mem = new Uint8Array(ex.memory.buffer, ptr, 4);
|
|
2354
|
-
return [mem[0] !== 0, mem[1] !== 0, mem[2] !== 0, mem[3] !== 0];
|
|
2355
|
-
} finally {
|
|
2356
|
-
ex.wasm_free(ptr, 4);
|
|
2357
|
-
}
|
|
2248
|
+
const mem = new Uint8Array(ex.memory.buffer, ptr, 4);
|
|
2249
|
+
return [mem[0] !== 0, mem[1] !== 0, mem[2] !== 0, mem[3] !== 0];
|
|
2358
2250
|
}
|
|
2359
2251
|
|
|
2360
2252
|
if (pname === 0x8CA6 /* DRAW_FRAMEBUFFER_BINDING */ || pname === 0x8CAA /* READ_FRAMEBUFFER_BINDING */) {
|
|
2361
|
-
const
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
_checkErr(code, this._instance);
|
|
2365
|
-
const handle = new Int32Array(ex.memory.buffer, ptr, 1)[0];
|
|
2366
|
-
if (handle === 0) return null;
|
|
2367
|
-
return this._fbHandles.get(handle) || null;
|
|
2368
|
-
} finally {
|
|
2369
|
-
ex.wasm_free(ptr, 4);
|
|
2370
|
-
}
|
|
2253
|
+
const handle = dv.getInt32(ptr, true);
|
|
2254
|
+
if (handle === 0) return null;
|
|
2255
|
+
return this._fbHandles.get(handle) || null;
|
|
2371
2256
|
}
|
|
2372
2257
|
|
|
2373
2258
|
if (pname === 0x8CA7 /* RENDERBUFFER_BINDING */) {
|
|
2374
|
-
const
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
_checkErr(code, this._instance);
|
|
2378
|
-
const handle = new Int32Array(ex.memory.buffer, ptr, 1)[0];
|
|
2379
|
-
if (handle === 0) return null;
|
|
2380
|
-
return this._rbHandles.get(handle) || null;
|
|
2381
|
-
} finally {
|
|
2382
|
-
ex.wasm_free(ptr, 4);
|
|
2383
|
-
}
|
|
2259
|
+
const handle = dv.getInt32(ptr, true);
|
|
2260
|
+
if (handle === 0) return null;
|
|
2261
|
+
return this._rbHandles.get(handle) || null;
|
|
2384
2262
|
}
|
|
2385
2263
|
|
|
2386
2264
|
if (pname === 0x8824 /* MAX_DRAW_BUFFERS */ || pname === 0x8CDF /* MAX_COLOR_ATTACHMENTS */) {
|
|
2387
|
-
|
|
2388
|
-
try {
|
|
2389
|
-
const code = ex.wasm_ctx_get_parameter_v(this._ctxHandle, pname, ptr, 4);
|
|
2390
|
-
_checkErr(code, this._instance);
|
|
2391
|
-
return new Int32Array(ex.memory.buffer, ptr, 1)[0];
|
|
2392
|
-
} finally {
|
|
2393
|
-
ex.wasm_free(ptr, 4);
|
|
2394
|
-
}
|
|
2265
|
+
return dv.getInt32(ptr, true);
|
|
2395
2266
|
}
|
|
2396
2267
|
|
|
2397
2268
|
if (pname >= 0x8825 /* DRAW_BUFFER0 */ && pname <= 0x882C /* DRAW_BUFFER7 */) {
|
|
2398
|
-
|
|
2399
|
-
try {
|
|
2400
|
-
const code = ex.wasm_ctx_get_parameter_v(this._ctxHandle, pname, ptr, 4);
|
|
2401
|
-
_checkErr(code, this._instance);
|
|
2402
|
-
return new Int32Array(ex.memory.buffer, ptr, 1)[0];
|
|
2403
|
-
} finally {
|
|
2404
|
-
ex.wasm_free(ptr, 4);
|
|
2405
|
-
}
|
|
2269
|
+
return dv.getInt32(ptr, true);
|
|
2406
2270
|
}
|
|
2407
2271
|
|
|
2408
2272
|
if (pname === 0x0B72 /* DEPTH_WRITEMASK */) {
|
|
2409
|
-
|
|
2410
|
-
try {
|
|
2411
|
-
const code = ex.wasm_ctx_get_parameter_v(this._ctxHandle, pname, ptr, 4);
|
|
2412
|
-
_checkErr(code, this._instance);
|
|
2413
|
-
const mem = new Uint8Array(ex.memory.buffer, ptr, 1);
|
|
2414
|
-
return mem[0] !== 0;
|
|
2415
|
-
} finally {
|
|
2416
|
-
ex.wasm_free(ptr, 4);
|
|
2417
|
-
}
|
|
2273
|
+
return dv.getUint8(ptr) !== 0;
|
|
2418
2274
|
}
|
|
2419
2275
|
|
|
2420
2276
|
if (pname === 0x0B98 /* STENCIL_WRITEMASK */ || pname === 0x8CA5 /* STENCIL_BACK_WRITEMASK */) {
|
|
2421
|
-
|
|
2422
|
-
try {
|
|
2423
|
-
const code = ex.wasm_ctx_get_parameter_v(this._ctxHandle, pname, ptr, 4);
|
|
2424
|
-
_checkErr(code, this._instance);
|
|
2425
|
-
const mem = new Int32Array(ex.memory.buffer, ptr, 1);
|
|
2426
|
-
return mem[0];
|
|
2427
|
-
} finally {
|
|
2428
|
-
ex.wasm_free(ptr, 4);
|
|
2429
|
-
}
|
|
2277
|
+
return dv.getInt32(ptr, true);
|
|
2430
2278
|
}
|
|
2431
2279
|
|
|
2432
2280
|
const singleIntParams = [
|
|
@@ -2446,19 +2294,7 @@ export class WasmWebGL2RenderingContext {
|
|
|
2446
2294
|
];
|
|
2447
2295
|
|
|
2448
2296
|
if (singleIntParams.includes(pname)) {
|
|
2449
|
-
|
|
2450
|
-
try {
|
|
2451
|
-
const code = ex.wasm_ctx_get_parameter_v(this._ctxHandle, pname, ptr, 4);
|
|
2452
|
-
_checkErr(code, this._instance);
|
|
2453
|
-
const mem = new Int32Array(ex.memory.buffer, ptr, 1);
|
|
2454
|
-
return mem[0];
|
|
2455
|
-
} finally {
|
|
2456
|
-
ex.wasm_free(ptr, 4);
|
|
2457
|
-
}
|
|
2458
|
-
}
|
|
2459
|
-
|
|
2460
|
-
if (pname === 0x8869 /* MAX_VERTEX_ATTRIBS */) {
|
|
2461
|
-
return 16;
|
|
2297
|
+
return dv.getInt32(ptr, true);
|
|
2462
2298
|
}
|
|
2463
2299
|
|
|
2464
2300
|
throw new Error(`getParameter for ${pname} not implemented`);
|
|
@@ -2740,16 +2576,24 @@ export class WasmWebGL2RenderingContext {
|
|
|
2740
2576
|
*/
|
|
2741
2577
|
export function readErrorMessage(instance) {
|
|
2742
2578
|
const ex = instance.exports;
|
|
2743
|
-
if (!ex || typeof ex.
|
|
2579
|
+
if (!ex || typeof ex.wasm_last_error !== 'function') {
|
|
2580
|
+
// Fallback to old ptr/len if exists, otherwise return unknown
|
|
2581
|
+
if (typeof ex.wasm_last_error_ptr === 'function') {
|
|
2582
|
+
const ptr = ex.wasm_last_error_ptr();
|
|
2583
|
+
const len = ex.wasm_last_error_len();
|
|
2584
|
+
if (ptr === 0 || len === 0) return '';
|
|
2585
|
+
const mem = new Uint8Array(ex.memory.buffer);
|
|
2586
|
+
const bytes = mem.subarray(ptr, ptr + len);
|
|
2587
|
+
return new TextDecoder('utf-8').decode(bytes);
|
|
2588
|
+
}
|
|
2744
2589
|
return '(no error message available)';
|
|
2745
2590
|
}
|
|
2746
|
-
const ptr = ex.
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
}
|
|
2591
|
+
const ptr = ex.wasm_last_error();
|
|
2592
|
+
if (ptr === 0) return '';
|
|
2593
|
+
const dv = new DataView(ex.memory.buffer);
|
|
2594
|
+
const len = dv.getUint32(ptr - 16, true);
|
|
2751
2595
|
const mem = new Uint8Array(ex.memory.buffer);
|
|
2752
|
-
const bytes = mem.
|
|
2596
|
+
const bytes = mem.slice(ptr, ptr + len);
|
|
2753
2597
|
return new TextDecoder('utf-8').decode(bytes);
|
|
2754
2598
|
}
|
|
2755
2599
|
|
|
@@ -2897,24 +2741,18 @@ export function getShaderGlsl(ctxHandle, programHandle, shaderType) {
|
|
|
2897
2741
|
mem.set(wasmBytes, wasmBytesPtr);
|
|
2898
2742
|
|
|
2899
2743
|
// Call the decompiler
|
|
2900
|
-
const
|
|
2744
|
+
const glslPtr = ex.wasm_decompile_to_glsl(wasmBytesPtr, wasmBytesLen);
|
|
2901
2745
|
|
|
2902
|
-
if (
|
|
2746
|
+
if (glslPtr === 0) {
|
|
2903
2747
|
return null;
|
|
2904
2748
|
}
|
|
2905
2749
|
|
|
2906
|
-
|
|
2907
|
-
const
|
|
2908
|
-
const glslLen = ex.wasm_get_decompiled_glsl_len();
|
|
2909
|
-
|
|
2910
|
-
if (glslPtr === 0 || glslLen === 0) {
|
|
2911
|
-
return null;
|
|
2912
|
-
}
|
|
2750
|
+
const dv = new DataView(ex.memory.buffer);
|
|
2751
|
+
const glslLen = dv.getUint32(glslPtr - 16, true);
|
|
2913
2752
|
|
|
2914
2753
|
// Read the GLSL string
|
|
2915
|
-
const glslBytes = new Uint8Array(ex.memory.buffer).
|
|
2916
|
-
|
|
2917
|
-
return decoder.decode(glslBytes);
|
|
2754
|
+
const glslBytes = new Uint8Array(ex.memory.buffer).slice(glslPtr, glslPtr + glslLen);
|
|
2755
|
+
return new TextDecoder('utf-8').decode(glslBytes);
|
|
2918
2756
|
} finally {
|
|
2919
2757
|
// Free the allocated memory
|
|
2920
2758
|
ex.wasm_free(wasmBytesPtr);
|
|
@@ -2953,24 +2791,18 @@ export function decompileWasmToGlsl(gl, wasmBytes) {
|
|
|
2953
2791
|
mem.set(wasmBytes, wasmBytesPtr);
|
|
2954
2792
|
|
|
2955
2793
|
// Call the decompiler
|
|
2956
|
-
const
|
|
2794
|
+
const glslPtr = ex.wasm_decompile_to_glsl(wasmBytesPtr, wasmBytesLen);
|
|
2957
2795
|
|
|
2958
|
-
if (
|
|
2796
|
+
if (glslPtr === 0) {
|
|
2959
2797
|
return null;
|
|
2960
2798
|
}
|
|
2961
2799
|
|
|
2962
|
-
|
|
2963
|
-
const
|
|
2964
|
-
const glslLen = ex.wasm_get_decompiled_glsl_len();
|
|
2965
|
-
|
|
2966
|
-
if (glslPtr === 0 || glslLen === 0) {
|
|
2967
|
-
return null;
|
|
2968
|
-
}
|
|
2800
|
+
const dv = new DataView(ex.memory.buffer);
|
|
2801
|
+
const glslLen = dv.getUint32(glslPtr - 16, true);
|
|
2969
2802
|
|
|
2970
2803
|
// Read the GLSL string
|
|
2971
|
-
const glslBytes = new Uint8Array(ex.memory.buffer).
|
|
2972
|
-
|
|
2973
|
-
return decoder.decode(glslBytes);
|
|
2804
|
+
const glslBytes = new Uint8Array(ex.memory.buffer).slice(glslPtr, glslPtr + glslLen);
|
|
2805
|
+
return new TextDecoder('utf-8').decode(glslBytes);
|
|
2974
2806
|
} finally {
|
|
2975
2807
|
// Free the allocated memory
|
|
2976
2808
|
ex.wasm_free(wasmBytesPtr);
|
package/webgl2.debug.wasm
CHANGED
|
Binary file
|
package/webgl2.wasm
CHANGED
|
Binary file
|