Skip to content

Commit 8a7baba

Browse files
feat: Read from OffscreenCanvas
And unit tests
1 parent 5f5e099 commit 8a7baba

13 files changed

+118
-17
lines changed

dist/gpu-browser-core.js

+15-3
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 2.11.3
8-
* @date Wed Apr 14 2021 16:49:13 GMT-0400 (Eastern Daylight Time)
7+
* @version 2.12.0
8+
* @date Wed Jan 26 2022 15:33:09 GMT-0500 (Eastern Standard Time)
99
*
1010
* @license MIT
1111
* The MIT License
1212
*
13-
* Copyright (c) 2021 gpu.js Team
13+
* Copyright (c) 2022 gpu.js Team
1414
*/(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.GPU = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
1515

1616
},{}],2:[function(require,module,exports){
@@ -3873,6 +3873,7 @@ const typeLookupMap = {
38733873
'Array3D': 'Number',
38743874
'Input': 'Number',
38753875
'HTMLCanvas': 'Array(4)',
3876+
'OffscreenCanvas': 'Array(4)',
38763877
'HTMLImage': 'Array(4)',
38773878
'HTMLVideo': 'Array(4)',
38783879
'HTMLImageArray': 'Array(4)',
@@ -8348,6 +8349,7 @@ class WebGLFunctionNode extends FunctionNode {
83488349
break;
83498350
case 'ArrayTexture(4)':
83508351
case 'HTMLCanvas':
8352+
case 'OffscreenCanvas':
83518353
case 'HTMLImage':
83528354
case 'HTMLVideo':
83538355
retArr.push(`getVec4FromSampler2D(${ markupName }, ${ markupName }Size, ${ markupName }Dim, `);
@@ -8741,6 +8743,7 @@ const kernelValueMaps = {
87418743
'ArrayTexture(4)': WebGLKernelValueDynamicNumberTexture,
87428744
'MemoryOptimizedNumberTexture': WebGLKernelValueDynamicMemoryOptimizedNumberTexture,
87438745
'HTMLCanvas': WebGLKernelValueDynamicHTMLImage,
8746+
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
87448747
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
87458748
'HTMLImageArray': false,
87468749
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
@@ -8770,6 +8773,7 @@ const kernelValueMaps = {
87708773
'ArrayTexture(4)': WebGLKernelValueNumberTexture,
87718774
'MemoryOptimizedNumberTexture': WebGLKernelValueMemoryOptimizedNumberTexture,
87728775
'HTMLCanvas': WebGLKernelValueHTMLImage,
8776+
'OffscreenCanvas': WebGLKernelValueHTMLImage,
87738777
'HTMLImage': WebGLKernelValueHTMLImage,
87748778
'HTMLImageArray': false,
87758779
'HTMLVideo': WebGLKernelValueHTMLVideo,
@@ -8801,6 +8805,7 @@ const kernelValueMaps = {
88018805
'ArrayTexture(4)': WebGLKernelValueDynamicNumberTexture,
88028806
'MemoryOptimizedNumberTexture': WebGLKernelValueDynamicMemoryOptimizedNumberTexture,
88038807
'HTMLCanvas': WebGLKernelValueDynamicHTMLImage,
8808+
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
88048809
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
88058810
'HTMLImageArray': false,
88068811
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
@@ -8830,6 +8835,7 @@ const kernelValueMaps = {
88308835
'ArrayTexture(4)': WebGLKernelValueNumberTexture,
88318836
'MemoryOptimizedNumberTexture': WebGLKernelValueMemoryOptimizedNumberTexture,
88328837
'HTMLCanvas': WebGLKernelValueHTMLImage,
8838+
'OffscreenCanvas': WebGLKernelValueHTMLImage,
88338839
'HTMLImage': WebGLKernelValueHTMLImage,
88348840
'HTMLImageArray': false,
88358841
'HTMLVideo': WebGLKernelValueHTMLVideo,
@@ -12022,6 +12028,7 @@ const kernelValueMaps = {
1202212028
'ArrayTexture(4)': WebGL2KernelValueDynamicNumberTexture,
1202312029
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
1202412030
'HTMLCanvas': WebGL2KernelValueDynamicHTMLImage,
12031+
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
1202512032
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
1202612033
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
1202712034
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
@@ -12051,6 +12058,7 @@ const kernelValueMaps = {
1205112058
'ArrayTexture(4)': WebGL2KernelValueNumberTexture,
1205212059
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
1205312060
'HTMLCanvas': WebGL2KernelValueHTMLImage,
12061+
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
1205412062
'HTMLImage': WebGL2KernelValueHTMLImage,
1205512063
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
1205612064
'HTMLVideo': WebGL2KernelValueHTMLVideo,
@@ -12082,6 +12090,7 @@ const kernelValueMaps = {
1208212090
'ArrayTexture(4)': WebGL2KernelValueDynamicNumberTexture,
1208312091
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
1208412092
'HTMLCanvas': WebGL2KernelValueDynamicHTMLImage,
12093+
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
1208512094
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
1208612095
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
1208712096
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
@@ -12111,6 +12120,7 @@ const kernelValueMaps = {
1211112120
'ArrayTexture(4)': WebGL2KernelValueNumberTexture,
1211212121
'MemoryOptimizedNumberTexture': WebGL2KernelValueMemoryOptimizedNumberTexture,
1211312122
'HTMLCanvas': WebGL2KernelValueHTMLImage,
12123+
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
1211412124
'HTMLImage': WebGL2KernelValueHTMLImage,
1211512125
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
1211612126
'HTMLVideo': WebGL2KernelValueHTMLVideo,
@@ -14229,6 +14239,8 @@ const utils = {
1422914239
return value.type;
1423014240
case Input:
1423114241
return 'Input';
14242+
case OffscreenCanvas:
14243+
return 'OffscreenCanvas';
1423214244
}
1423314245
switch (value.nodeName) {
1423414246
case 'IMG':

dist/gpu-browser-core.min.js

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/gpu-browser.js

+15-3
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 2.11.3
8-
* @date Wed Apr 14 2021 16:49:13 GMT-0400 (Eastern Daylight Time)
7+
* @version 2.12.0
8+
* @date Wed Jan 26 2022 15:33:09 GMT-0500 (Eastern Standard Time)
99
*
1010
* @license MIT
1111
* The MIT License
1212
*
13-
* Copyright (c) 2021 gpu.js Team
13+
* Copyright (c) 2022 gpu.js Team
1414
*/(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.GPU = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
1515
(function (global, factory) {
1616
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
@@ -8326,6 +8326,7 @@ const typeLookupMap = {
83268326
'Array3D': 'Number',
83278327
'Input': 'Number',
83288328
'HTMLCanvas': 'Array(4)',
8329+
'OffscreenCanvas': 'Array(4)',
83298330
'HTMLImage': 'Array(4)',
83308331
'HTMLVideo': 'Array(4)',
83318332
'HTMLImageArray': 'Array(4)',
@@ -12801,6 +12802,7 @@ class WebGLFunctionNode extends FunctionNode {
1280112802
break;
1280212803
case 'ArrayTexture(4)':
1280312804
case 'HTMLCanvas':
12805+
case 'OffscreenCanvas':
1280412806
case 'HTMLImage':
1280512807
case 'HTMLVideo':
1280612808
retArr.push(`getVec4FromSampler2D(${ markupName }, ${ markupName }Size, ${ markupName }Dim, `);
@@ -13194,6 +13196,7 @@ const kernelValueMaps = {
1319413196
'ArrayTexture(4)': WebGLKernelValueDynamicNumberTexture,
1319513197
'MemoryOptimizedNumberTexture': WebGLKernelValueDynamicMemoryOptimizedNumberTexture,
1319613198
'HTMLCanvas': WebGLKernelValueDynamicHTMLImage,
13199+
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
1319713200
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
1319813201
'HTMLImageArray': false,
1319913202
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
@@ -13223,6 +13226,7 @@ const kernelValueMaps = {
1322313226
'ArrayTexture(4)': WebGLKernelValueNumberTexture,
1322413227
'MemoryOptimizedNumberTexture': WebGLKernelValueMemoryOptimizedNumberTexture,
1322513228
'HTMLCanvas': WebGLKernelValueHTMLImage,
13229+
'OffscreenCanvas': WebGLKernelValueHTMLImage,
1322613230
'HTMLImage': WebGLKernelValueHTMLImage,
1322713231
'HTMLImageArray': false,
1322813232
'HTMLVideo': WebGLKernelValueHTMLVideo,
@@ -13254,6 +13258,7 @@ const kernelValueMaps = {
1325413258
'ArrayTexture(4)': WebGLKernelValueDynamicNumberTexture,
1325513259
'MemoryOptimizedNumberTexture': WebGLKernelValueDynamicMemoryOptimizedNumberTexture,
1325613260
'HTMLCanvas': WebGLKernelValueDynamicHTMLImage,
13261+
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
1325713262
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
1325813263
'HTMLImageArray': false,
1325913264
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
@@ -13283,6 +13288,7 @@ const kernelValueMaps = {
1328313288
'ArrayTexture(4)': WebGLKernelValueNumberTexture,
1328413289
'MemoryOptimizedNumberTexture': WebGLKernelValueMemoryOptimizedNumberTexture,
1328513290
'HTMLCanvas': WebGLKernelValueHTMLImage,
13291+
'OffscreenCanvas': WebGLKernelValueHTMLImage,
1328613292
'HTMLImage': WebGLKernelValueHTMLImage,
1328713293
'HTMLImageArray': false,
1328813294
'HTMLVideo': WebGLKernelValueHTMLVideo,
@@ -16475,6 +16481,7 @@ const kernelValueMaps = {
1647516481
'ArrayTexture(4)': WebGL2KernelValueDynamicNumberTexture,
1647616482
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
1647716483
'HTMLCanvas': WebGL2KernelValueDynamicHTMLImage,
16484+
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
1647816485
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
1647916486
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
1648016487
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
@@ -16504,6 +16511,7 @@ const kernelValueMaps = {
1650416511
'ArrayTexture(4)': WebGL2KernelValueNumberTexture,
1650516512
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
1650616513
'HTMLCanvas': WebGL2KernelValueHTMLImage,
16514+
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
1650716515
'HTMLImage': WebGL2KernelValueHTMLImage,
1650816516
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
1650916517
'HTMLVideo': WebGL2KernelValueHTMLVideo,
@@ -16535,6 +16543,7 @@ const kernelValueMaps = {
1653516543
'ArrayTexture(4)': WebGL2KernelValueDynamicNumberTexture,
1653616544
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
1653716545
'HTMLCanvas': WebGL2KernelValueDynamicHTMLImage,
16546+
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
1653816547
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
1653916548
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
1654016549
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
@@ -16564,6 +16573,7 @@ const kernelValueMaps = {
1656416573
'ArrayTexture(4)': WebGL2KernelValueNumberTexture,
1656516574
'MemoryOptimizedNumberTexture': WebGL2KernelValueMemoryOptimizedNumberTexture,
1656616575
'HTMLCanvas': WebGL2KernelValueHTMLImage,
16576+
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
1656716577
'HTMLImage': WebGL2KernelValueHTMLImage,
1656816578
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
1656916579
'HTMLVideo': WebGL2KernelValueHTMLVideo,
@@ -18682,6 +18692,8 @@ const utils = {
1868218692
return value.type;
1868318693
case Input:
1868418694
return 'Input';
18695+
case OffscreenCanvas:
18696+
return 'OffscreenCanvas';
1868518697
}
1868618698
switch (value.nodeName) {
1868718699
case 'IMG':

dist/gpu-browser.min.js

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

+6-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gpu.js",
3-
"version": "2.11.4",
3+
"version": "2.12.0",
44
"description": "GPU Accelerated JavaScript",
55
"engines": {
66
"node": ">=8.0.0"
@@ -21,7 +21,8 @@
2121
"acorn": "^7.1.1",
2222
"gl": "^4.5.2",
2323
"gl-wiretap": "^0.6.2",
24-
"gpu-mock.js": "^1.3.0"
24+
"gpu-mock.js": "^1.3.0",
25+
"webgpu": "^0.1.16"
2526
},
2627
"devDependencies": {
2728
"benchmark": "^2.1.4",

src/backend/function-node.js

+1
Original file line numberDiff line numberDiff line change
@@ -1470,6 +1470,7 @@ const typeLookupMap = {
14701470
'Array3D': 'Number',
14711471
'Input': 'Number',
14721472
'HTMLCanvas': 'Array(4)',
1473+
'OffscreenCanvas': 'Array(4)',
14731474
'HTMLImage': 'Array(4)',
14741475
'HTMLVideo': 'Array(4)',
14751476
'HTMLImageArray': 'Array(4)',

src/backend/web-gl/function-node.js

+1
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,7 @@ class WebGLFunctionNode extends FunctionNode {
12481248
break;
12491249
case 'ArrayTexture(4)':
12501250
case 'HTMLCanvas':
1251+
case 'OffscreenCanvas':
12511252
case 'HTMLImage':
12521253
case 'HTMLVideo':
12531254
retArr.push(`getVec4FromSampler2D(${ markupName }, ${ markupName }Size, ${ markupName }Dim, `);

src/backend/web-gl/kernel-value-maps.js

+4
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ const kernelValueMaps = {
6666
'ArrayTexture(4)': WebGLKernelValueDynamicNumberTexture,
6767
'MemoryOptimizedNumberTexture': WebGLKernelValueDynamicMemoryOptimizedNumberTexture,
6868
'HTMLCanvas': WebGLKernelValueDynamicHTMLImage,
69+
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
6970
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
7071
'HTMLImageArray': false,
7172
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
@@ -95,6 +96,7 @@ const kernelValueMaps = {
9596
'ArrayTexture(4)': WebGLKernelValueNumberTexture,
9697
'MemoryOptimizedNumberTexture': WebGLKernelValueMemoryOptimizedNumberTexture,
9798
'HTMLCanvas': WebGLKernelValueHTMLImage,
99+
'OffscreenCanvas': WebGLKernelValueHTMLImage,
98100
'HTMLImage': WebGLKernelValueHTMLImage,
99101
'HTMLImageArray': false,
100102
'HTMLVideo': WebGLKernelValueHTMLVideo,
@@ -126,6 +128,7 @@ const kernelValueMaps = {
126128
'ArrayTexture(4)': WebGLKernelValueDynamicNumberTexture,
127129
'MemoryOptimizedNumberTexture': WebGLKernelValueDynamicMemoryOptimizedNumberTexture,
128130
'HTMLCanvas': WebGLKernelValueDynamicHTMLImage,
131+
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
129132
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
130133
'HTMLImageArray': false,
131134
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
@@ -155,6 +158,7 @@ const kernelValueMaps = {
155158
'ArrayTexture(4)': WebGLKernelValueNumberTexture,
156159
'MemoryOptimizedNumberTexture': WebGLKernelValueMemoryOptimizedNumberTexture,
157160
'HTMLCanvas': WebGLKernelValueHTMLImage,
161+
'OffscreenCanvas': WebGLKernelValueHTMLImage,
158162
'HTMLImage': WebGLKernelValueHTMLImage,
159163
'HTMLImageArray': false,
160164
'HTMLVideo': WebGLKernelValueHTMLVideo,

src/backend/web-gl2/kernel-value-maps.js

+4
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ const kernelValueMaps = {
6969
'ArrayTexture(4)': WebGL2KernelValueDynamicNumberTexture,
7070
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
7171
'HTMLCanvas': WebGL2KernelValueDynamicHTMLImage,
72+
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
7273
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
7374
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
7475
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
@@ -98,6 +99,7 @@ const kernelValueMaps = {
9899
'ArrayTexture(4)': WebGL2KernelValueNumberTexture,
99100
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
100101
'HTMLCanvas': WebGL2KernelValueHTMLImage,
102+
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
101103
'HTMLImage': WebGL2KernelValueHTMLImage,
102104
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
103105
'HTMLVideo': WebGL2KernelValueHTMLVideo,
@@ -129,6 +131,7 @@ const kernelValueMaps = {
129131
'ArrayTexture(4)': WebGL2KernelValueDynamicNumberTexture,
130132
'MemoryOptimizedNumberTexture': WebGL2KernelValueDynamicMemoryOptimizedNumberTexture,
131133
'HTMLCanvas': WebGL2KernelValueDynamicHTMLImage,
134+
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
132135
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
133136
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
134137
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
@@ -158,6 +161,7 @@ const kernelValueMaps = {
158161
'ArrayTexture(4)': WebGL2KernelValueNumberTexture,
159162
'MemoryOptimizedNumberTexture': WebGL2KernelValueMemoryOptimizedNumberTexture,
160163
'HTMLCanvas': WebGL2KernelValueHTMLImage,
164+
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
161165
'HTMLImage': WebGL2KernelValueHTMLImage,
162166
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
163167
'HTMLVideo': WebGL2KernelValueHTMLVideo,

src/utils.js

+2
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ const utils = {
142142
return value.type;
143143
case Input:
144144
return 'Input';
145+
case OffscreenCanvas:
146+
return 'OffscreenCanvas';
145147
}
146148
switch (value.nodeName) {
147149
case 'IMG':

test/all.html

+1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
<script type="module" src="features/raw-output.js"></script>
9292
<script type="module" src="features/read-color-texture.js"></script>
9393
<script type="module" src="features/read-from-texture.js"></script>
94+
<script type="module" src="features/read-offscreen-canvas.js"></script>
9495
<script type="module" src="features/return-arrays.js"></script>
9596
<script type="module" src="features/single-precision-textures.js"></script>
9697
<script type="module" src="features/single-precision.js"></script>

0 commit comments

Comments
 (0)