Skip to content

Commit c209412

Browse files
committedJan 26, 2022
Merge branch 'master' into develop
2 parents 2ff65b1 + 8dcd054 commit c209412

15 files changed

+127
-19
lines changed
 

Diff for: ‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,7 @@ Types that can be used with GPU.js are as follows:
753753
* 'OffscreenCanvas' **New in V2.13**
754754
* 'HTMLImage'
755755
* 'ImageBitmap' **New in V2.14**
756+
* 'ImageData' **New in V2.15**
756757
* 'HTMLImageArray'
757758
* 'HTMLVideo' **New in V2!**
758759
* 'Number'

Diff for: ‎dist/gpu-browser-core.js

+25-5
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 2.14.0
8-
* @date Wed Jan 26 2022 16:31:42 GMT-0500 (Eastern Standard Time)
7+
* @version 2.15.0
8+
* @date Wed Jan 26 2022 17:11:45 GMT-0500 (Eastern Standard Time)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -1617,6 +1617,7 @@ class CPUKernel extends Kernel {
16171617
case 'OffscreenCanvas':
16181618
case 'HTMLImage':
16191619
case 'ImageBitmap':
1620+
case 'ImageData':
16201621
case 'HTMLVideo':
16211622
result.push(` const constants_${p} = this._mediaTo2DArray(this.constants.${p});\n`);
16221623
break;
@@ -1662,6 +1663,7 @@ class CPUKernel extends Kernel {
16621663
case 'OffscreenCanvas':
16631664
case 'HTMLImage':
16641665
case 'ImageBitmap':
1666+
case 'ImageData':
16651667
case 'HTMLVideo':
16661668
result.push(` ${variableName} = this._mediaTo2DArray(${variableName});\n`);
16671669
break;
@@ -1709,8 +1711,13 @@ class CPUKernel extends Kernel {
17091711
canvas.height = height;
17101712
}
17111713
const ctx = this.context;
1712-
ctx.drawImage(media, 0, 0, width, height);
1713-
const pixelsData = ctx.getImageData(0, 0, width, height).data;
1714+
let pixelsData;
1715+
if (media.constructor === ImageData) {
1716+
pixelsData = media.data;
1717+
} else {
1718+
ctx.drawImage(media, 0, 0, width, height);
1719+
pixelsData = ctx.getImageData(0, 0, width, height).data;
1720+
}
17141721
const imageArray = new Array(height);
17151722
let index = 0;
17161723
for (let y = height - 1; y >= 0; y--) {
@@ -3880,6 +3887,7 @@ const typeLookupMap = {
38803887
'OffscreenCanvas': 'Array(4)',
38813888
'HTMLImage': 'Array(4)',
38823889
'ImageBitmap': 'Array(4)',
3890+
'ImageData': 'Array(4)',
38833891
'HTMLVideo': 'Array(4)',
38843892
'HTMLImageArray': 'Array(4)',
38853893
'NumberTexture': 'Number',
@@ -8357,6 +8365,7 @@ class WebGLFunctionNode extends FunctionNode {
83578365
case 'OffscreenCanvas':
83588366
case 'HTMLImage':
83598367
case 'ImageBitmap':
8368+
case 'ImageData':
83608369
case 'HTMLVideo':
83618370
retArr.push(`getVec4FromSampler2D(${ markupName }, ${ markupName }Size, ${ markupName }Dim, `);
83628371
this.memberExpressionXYZ(xProperty, yProperty, zProperty, retArr);
@@ -8559,6 +8568,7 @@ class WebGLFunctionNode extends FunctionNode {
85598568
case 'OffscreenCanvas':
85608569
case 'HTMLImage':
85618570
case 'ImageBitmap':
8571+
case 'ImageData':
85628572
case 'HTMLImageArray':
85638573
case 'HTMLVideo':
85648574
case 'ArrayTexture(1)':
@@ -8673,6 +8683,7 @@ const typeMap = {
86738683
'OffscreenCanvas': 'sampler2D',
86748684
'HTMLImage': 'sampler2D',
86758685
'ImageBitmap': 'sampler2D',
8686+
'ImageData': 'sampler2D',
86768687
'HTMLImageArray': 'sampler2DArray',
86778688
};
86788689

@@ -8684,7 +8695,6 @@ const operatorMap = {
86848695
module.exports = {
86858696
WebGLFunctionNode
86868697
};
8687-
86888698
},{"../../utils":113,"../function-node":9}],38:[function(require,module,exports){
86898699
const { WebGLKernelValueBoolean } = require('./kernel-value/boolean');
86908700
const { WebGLKernelValueFloat } = require('./kernel-value/float');
@@ -8757,6 +8767,7 @@ const kernelValueMaps = {
87578767
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
87588768
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
87598769
'ImageBitmap': WebGLKernelValueDynamicHTMLImage,
8770+
'ImageData': WebGLKernelValueDynamicHTMLImage,
87608771
'HTMLImageArray': false,
87618772
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
87628773
},
@@ -8788,6 +8799,7 @@ const kernelValueMaps = {
87888799
'OffscreenCanvas': WebGLKernelValueHTMLImage,
87898800
'HTMLImage': WebGLKernelValueHTMLImage,
87908801
'ImageBitmap': WebGLKernelValueHTMLImage,
8802+
'ImageData': WebGLKernelValueHTMLImage,
87918803
'HTMLImageArray': false,
87928804
'HTMLVideo': WebGLKernelValueHTMLVideo,
87938805
}
@@ -8821,6 +8833,7 @@ const kernelValueMaps = {
88218833
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
88228834
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
88238835
'ImageBitmap': WebGLKernelValueDynamicHTMLImage,
8836+
'ImageData': WebGLKernelValueDynamicHTMLImage,
88248837
'HTMLImageArray': false,
88258838
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
88268839
},
@@ -8852,6 +8865,7 @@ const kernelValueMaps = {
88528865
'OffscreenCanvas': WebGLKernelValueHTMLImage,
88538866
'HTMLImage': WebGLKernelValueHTMLImage,
88548867
'ImageBitmap': WebGLKernelValueHTMLImage,
8868+
'ImageData': WebGLKernelValueHTMLImage,
88558869
'HTMLImageArray': false,
88568870
'HTMLVideo': WebGLKernelValueHTMLVideo,
88578871
}
@@ -12046,6 +12060,7 @@ const kernelValueMaps = {
1204612060
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
1204712061
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
1204812062
'ImageBitmap': WebGL2KernelValueDynamicHTMLImage,
12063+
'ImageData': WebGL2KernelValueDynamicHTMLImage,
1204912064
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
1205012065
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
1205112066
},
@@ -12077,6 +12092,7 @@ const kernelValueMaps = {
1207712092
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
1207812093
'HTMLImage': WebGL2KernelValueHTMLImage,
1207912094
'ImageBitmap': WebGL2KernelValueHTMLImage,
12095+
'ImageData': WebGL2KernelValueHTMLImage,
1208012096
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
1208112097
'HTMLVideo': WebGL2KernelValueHTMLVideo,
1208212098
}
@@ -12110,6 +12126,7 @@ const kernelValueMaps = {
1211012126
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
1211112127
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
1211212128
'ImageBitmap': WebGL2KernelValueDynamicHTMLImage,
12129+
'ImageData': WebGL2KernelValueDynamicHTMLImage,
1211312130
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
1211412131
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
1211512132
},
@@ -12141,6 +12158,7 @@ const kernelValueMaps = {
1214112158
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
1214212159
'HTMLImage': WebGL2KernelValueHTMLImage,
1214312160
'ImageBitmap': WebGL2KernelValueHTMLImage,
12161+
'ImageData': WebGL2KernelValueHTMLImage,
1214412162
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
1214512163
'HTMLVideo': WebGL2KernelValueHTMLVideo,
1214612164
}
@@ -14262,6 +14280,8 @@ const utils = {
1426214280
return 'OffscreenCanvas';
1426314281
case ImageBitmap:
1426414282
return 'ImageBitmap';
14283+
case ImageData:
14284+
return 'ImageData';
1426514285
}
1426614286
switch (value.nodeName) {
1426714287
case 'IMG':

Diff for: ‎dist/gpu-browser-core.min.js

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

Diff for: ‎dist/gpu-browser.js

+25-5
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*
55
* GPU Accelerated JavaScript
66
*
7-
* @version 2.14.0
8-
* @date Wed Jan 26 2022 16:31:43 GMT-0500 (Eastern Standard Time)
7+
* @version 2.15.0
8+
* @date Wed Jan 26 2022 17:11:45 GMT-0500 (Eastern Standard Time)
99
*
1010
* @license MIT
1111
* The MIT License
@@ -6070,6 +6070,7 @@ class CPUKernel extends Kernel {
60706070
case 'OffscreenCanvas':
60716071
case 'HTMLImage':
60726072
case 'ImageBitmap':
6073+
case 'ImageData':
60736074
case 'HTMLVideo':
60746075
result.push(` const constants_${p} = this._mediaTo2DArray(this.constants.${p});\n`);
60756076
break;
@@ -6115,6 +6116,7 @@ class CPUKernel extends Kernel {
61156116
case 'OffscreenCanvas':
61166117
case 'HTMLImage':
61176118
case 'ImageBitmap':
6119+
case 'ImageData':
61186120
case 'HTMLVideo':
61196121
result.push(` ${variableName} = this._mediaTo2DArray(${variableName});\n`);
61206122
break;
@@ -6162,8 +6164,13 @@ class CPUKernel extends Kernel {
61626164
canvas.height = height;
61636165
}
61646166
const ctx = this.context;
6165-
ctx.drawImage(media, 0, 0, width, height);
6166-
const pixelsData = ctx.getImageData(0, 0, width, height).data;
6167+
let pixelsData;
6168+
if (media.constructor === ImageData) {
6169+
pixelsData = media.data;
6170+
} else {
6171+
ctx.drawImage(media, 0, 0, width, height);
6172+
pixelsData = ctx.getImageData(0, 0, width, height).data;
6173+
}
61676174
const imageArray = new Array(height);
61686175
let index = 0;
61696176
for (let y = height - 1; y >= 0; y--) {
@@ -8333,6 +8340,7 @@ const typeLookupMap = {
83338340
'OffscreenCanvas': 'Array(4)',
83348341
'HTMLImage': 'Array(4)',
83358342
'ImageBitmap': 'Array(4)',
8343+
'ImageData': 'Array(4)',
83368344
'HTMLVideo': 'Array(4)',
83378345
'HTMLImageArray': 'Array(4)',
83388346
'NumberTexture': 'Number',
@@ -12810,6 +12818,7 @@ class WebGLFunctionNode extends FunctionNode {
1281012818
case 'OffscreenCanvas':
1281112819
case 'HTMLImage':
1281212820
case 'ImageBitmap':
12821+
case 'ImageData':
1281312822
case 'HTMLVideo':
1281412823
retArr.push(`getVec4FromSampler2D(${ markupName }, ${ markupName }Size, ${ markupName }Dim, `);
1281512824
this.memberExpressionXYZ(xProperty, yProperty, zProperty, retArr);
@@ -13012,6 +13021,7 @@ class WebGLFunctionNode extends FunctionNode {
1301213021
case 'OffscreenCanvas':
1301313022
case 'HTMLImage':
1301413023
case 'ImageBitmap':
13024+
case 'ImageData':
1301513025
case 'HTMLImageArray':
1301613026
case 'HTMLVideo':
1301713027
case 'ArrayTexture(1)':
@@ -13126,6 +13136,7 @@ const typeMap = {
1312613136
'OffscreenCanvas': 'sampler2D',
1312713137
'HTMLImage': 'sampler2D',
1312813138
'ImageBitmap': 'sampler2D',
13139+
'ImageData': 'sampler2D',
1312913140
'HTMLImageArray': 'sampler2DArray',
1313013141
};
1313113142

@@ -13137,7 +13148,6 @@ const operatorMap = {
1313713148
module.exports = {
1313813149
WebGLFunctionNode
1313913150
};
13140-
1314113151
},{"../../utils":114,"../function-node":10}],39:[function(require,module,exports){
1314213152
const { WebGLKernelValueBoolean } = require('./kernel-value/boolean');
1314313153
const { WebGLKernelValueFloat } = require('./kernel-value/float');
@@ -13210,6 +13220,7 @@ const kernelValueMaps = {
1321013220
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
1321113221
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
1321213222
'ImageBitmap': WebGLKernelValueDynamicHTMLImage,
13223+
'ImageData': WebGLKernelValueDynamicHTMLImage,
1321313224
'HTMLImageArray': false,
1321413225
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
1321513226
},
@@ -13241,6 +13252,7 @@ const kernelValueMaps = {
1324113252
'OffscreenCanvas': WebGLKernelValueHTMLImage,
1324213253
'HTMLImage': WebGLKernelValueHTMLImage,
1324313254
'ImageBitmap': WebGLKernelValueHTMLImage,
13255+
'ImageData': WebGLKernelValueHTMLImage,
1324413256
'HTMLImageArray': false,
1324513257
'HTMLVideo': WebGLKernelValueHTMLVideo,
1324613258
}
@@ -13274,6 +13286,7 @@ const kernelValueMaps = {
1327413286
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
1327513287
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
1327613288
'ImageBitmap': WebGLKernelValueDynamicHTMLImage,
13289+
'ImageData': WebGLKernelValueDynamicHTMLImage,
1327713290
'HTMLImageArray': false,
1327813291
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
1327913292
},
@@ -13305,6 +13318,7 @@ const kernelValueMaps = {
1330513318
'OffscreenCanvas': WebGLKernelValueHTMLImage,
1330613319
'HTMLImage': WebGLKernelValueHTMLImage,
1330713320
'ImageBitmap': WebGLKernelValueHTMLImage,
13321+
'ImageData': WebGLKernelValueHTMLImage,
1330813322
'HTMLImageArray': false,
1330913323
'HTMLVideo': WebGLKernelValueHTMLVideo,
1331013324
}
@@ -16499,6 +16513,7 @@ const kernelValueMaps = {
1649916513
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
1650016514
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
1650116515
'ImageBitmap': WebGL2KernelValueDynamicHTMLImage,
16516+
'ImageData': WebGL2KernelValueDynamicHTMLImage,
1650216517
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
1650316518
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
1650416519
},
@@ -16530,6 +16545,7 @@ const kernelValueMaps = {
1653016545
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
1653116546
'HTMLImage': WebGL2KernelValueHTMLImage,
1653216547
'ImageBitmap': WebGL2KernelValueHTMLImage,
16548+
'ImageData': WebGL2KernelValueHTMLImage,
1653316549
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
1653416550
'HTMLVideo': WebGL2KernelValueHTMLVideo,
1653516551
}
@@ -16563,6 +16579,7 @@ const kernelValueMaps = {
1656316579
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
1656416580
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
1656516581
'ImageBitmap': WebGL2KernelValueDynamicHTMLImage,
16582+
'ImageData': WebGL2KernelValueDynamicHTMLImage,
1656616583
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
1656716584
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
1656816585
},
@@ -16594,6 +16611,7 @@ const kernelValueMaps = {
1659416611
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
1659516612
'HTMLImage': WebGL2KernelValueHTMLImage,
1659616613
'ImageBitmap': WebGL2KernelValueHTMLImage,
16614+
'ImageData': WebGL2KernelValueHTMLImage,
1659716615
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
1659816616
'HTMLVideo': WebGL2KernelValueHTMLVideo,
1659916617
}
@@ -18715,6 +18733,8 @@ const utils = {
1871518733
return 'OffscreenCanvas';
1871618734
case ImageBitmap:
1871718735
return 'ImageBitmap';
18736+
case ImageData:
18737+
return 'ImageData';
1871818738
}
1871918739
switch (value.nodeName) {
1872018740
case 'IMG':

Diff for: ‎dist/gpu-browser.min.js

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

Diff for: ‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gpu.js",
3-
"version": "2.14.0",
3+
"version": "2.15.0",
44
"description": "GPU Accelerated JavaScript",
55
"engines": {
66
"node": ">=8.0.0"

Diff for: ‎src/backend/cpu/kernel.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ class CPUKernel extends Kernel {
269269
case 'OffscreenCanvas':
270270
case 'HTMLImage':
271271
case 'ImageBitmap':
272+
case 'ImageData':
272273
case 'HTMLVideo':
273274
result.push(` const constants_${p} = this._mediaTo2DArray(this.constants.${p});\n`);
274275
break;
@@ -314,6 +315,7 @@ class CPUKernel extends Kernel {
314315
case 'OffscreenCanvas':
315316
case 'HTMLImage':
316317
case 'ImageBitmap':
318+
case 'ImageData':
317319
case 'HTMLVideo':
318320
result.push(` ${variableName} = this._mediaTo2DArray(${variableName});\n`);
319321
break;
@@ -361,8 +363,13 @@ class CPUKernel extends Kernel {
361363
canvas.height = height;
362364
}
363365
const ctx = this.context;
364-
ctx.drawImage(media, 0, 0, width, height);
365-
const pixelsData = ctx.getImageData(0, 0, width, height).data;
366+
let pixelsData;
367+
if (media.constructor === ImageData) {
368+
pixelsData = media.data;
369+
} else {
370+
ctx.drawImage(media, 0, 0, width, height);
371+
pixelsData = ctx.getImageData(0, 0, width, height).data;
372+
}
366373
const imageArray = new Array(height);
367374
let index = 0;
368375
for (let y = height - 1; y >= 0; y--) {

Diff for: ‎src/backend/function-node.js

+1
Original file line numberDiff line numberDiff line change
@@ -1473,6 +1473,7 @@ const typeLookupMap = {
14731473
'OffscreenCanvas': 'Array(4)',
14741474
'HTMLImage': 'Array(4)',
14751475
'ImageBitmap': 'Array(4)',
1476+
'ImageData': 'Array(4)',
14761477
'HTMLVideo': 'Array(4)',
14771478
'HTMLImageArray': 'Array(4)',
14781479
'NumberTexture': 'Number',

Diff for: ‎src/backend/web-gl/function-node.js

+3
Original file line numberDiff line numberDiff line change
@@ -1251,6 +1251,7 @@ class WebGLFunctionNode extends FunctionNode {
12511251
case 'OffscreenCanvas':
12521252
case 'HTMLImage':
12531253
case 'ImageBitmap':
1254+
case 'ImageData':
12541255
case 'HTMLVideo':
12551256
retArr.push(`getVec4FromSampler2D(${ markupName }, ${ markupName }Size, ${ markupName }Dim, `);
12561257
this.memberExpressionXYZ(xProperty, yProperty, zProperty, retArr);
@@ -1469,6 +1470,7 @@ class WebGLFunctionNode extends FunctionNode {
14691470
case 'OffscreenCanvas':
14701471
case 'HTMLImage':
14711472
case 'ImageBitmap':
1473+
case 'ImageData':
14721474
case 'HTMLImageArray':
14731475
case 'HTMLVideo':
14741476
case 'ArrayTexture(1)':
@@ -1590,6 +1592,7 @@ const typeMap = {
15901592
'OffscreenCanvas': 'sampler2D',
15911593
'HTMLImage': 'sampler2D',
15921594
'ImageBitmap': 'sampler2D',
1595+
'ImageData': 'sampler2D',
15931596
'HTMLImageArray': 'sampler2DArray',
15941597
};
15951598

Diff for: ‎src/backend/web-gl/kernel-value-maps.js

+4
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ const kernelValueMaps = {
6969
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
7070
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
7171
'ImageBitmap': WebGLKernelValueDynamicHTMLImage,
72+
'ImageData': WebGLKernelValueDynamicHTMLImage,
7273
'HTMLImageArray': false,
7374
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
7475
},
@@ -100,6 +101,7 @@ const kernelValueMaps = {
100101
'OffscreenCanvas': WebGLKernelValueHTMLImage,
101102
'HTMLImage': WebGLKernelValueHTMLImage,
102103
'ImageBitmap': WebGLKernelValueHTMLImage,
104+
'ImageData': WebGLKernelValueHTMLImage,
103105
'HTMLImageArray': false,
104106
'HTMLVideo': WebGLKernelValueHTMLVideo,
105107
}
@@ -133,6 +135,7 @@ const kernelValueMaps = {
133135
'OffscreenCanvas': WebGLKernelValueDynamicHTMLImage,
134136
'HTMLImage': WebGLKernelValueDynamicHTMLImage,
135137
'ImageBitmap': WebGLKernelValueDynamicHTMLImage,
138+
'ImageData': WebGLKernelValueDynamicHTMLImage,
136139
'HTMLImageArray': false,
137140
'HTMLVideo': WebGLKernelValueDynamicHTMLVideo,
138141
},
@@ -164,6 +167,7 @@ const kernelValueMaps = {
164167
'OffscreenCanvas': WebGLKernelValueHTMLImage,
165168
'HTMLImage': WebGLKernelValueHTMLImage,
166169
'ImageBitmap': WebGLKernelValueHTMLImage,
170+
'ImageData': WebGLKernelValueHTMLImage,
167171
'HTMLImageArray': false,
168172
'HTMLVideo': WebGLKernelValueHTMLVideo,
169173
}

Diff for: ‎src/backend/web-gl2/kernel-value-maps.js

+4
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ const kernelValueMaps = {
7272
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
7373
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
7474
'ImageBitmap': WebGL2KernelValueDynamicHTMLImage,
75+
'ImageData': WebGL2KernelValueDynamicHTMLImage,
7576
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
7677
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
7778
},
@@ -103,6 +104,7 @@ const kernelValueMaps = {
103104
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
104105
'HTMLImage': WebGL2KernelValueHTMLImage,
105106
'ImageBitmap': WebGL2KernelValueHTMLImage,
107+
'ImageData': WebGL2KernelValueHTMLImage,
106108
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
107109
'HTMLVideo': WebGL2KernelValueHTMLVideo,
108110
}
@@ -136,6 +138,7 @@ const kernelValueMaps = {
136138
'OffscreenCanvas': WebGL2KernelValueDynamicHTMLImage,
137139
'HTMLImage': WebGL2KernelValueDynamicHTMLImage,
138140
'ImageBitmap': WebGL2KernelValueDynamicHTMLImage,
141+
'ImageData': WebGL2KernelValueDynamicHTMLImage,
139142
'HTMLImageArray': WebGL2KernelValueDynamicHTMLImageArray,
140143
'HTMLVideo': WebGL2KernelValueDynamicHTMLVideo,
141144
},
@@ -167,6 +170,7 @@ const kernelValueMaps = {
167170
'OffscreenCanvas': WebGL2KernelValueHTMLImage,
168171
'HTMLImage': WebGL2KernelValueHTMLImage,
169172
'ImageBitmap': WebGL2KernelValueHTMLImage,
173+
'ImageData': WebGL2KernelValueHTMLImage,
170174
'HTMLImageArray': WebGL2KernelValueHTMLImageArray,
171175
'HTMLVideo': WebGL2KernelValueHTMLVideo,
172176
}

Diff for: ‎src/index.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ export type KernelVariable =
399399
| HTMLImageElement
400400
| HTMLImageElement[]
401401
| ImageBitmap
402+
| ImageData
402403
| Float32Array
403404
| Uint8Array
404405
| Uint16Array

Diff for: ‎src/utils.js

+2
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ const utils = {
146146
return 'OffscreenCanvas';
147147
case ImageBitmap:
148148
return 'ImageBitmap';
149+
case ImageData:
150+
return 'ImageData';
149151
}
150152
switch (value.nodeName) {
151153
case 'IMG':

Diff for: ‎test/all.html

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
<script type="module" src="features/read-color-texture.js"></script>
9393
<script type="module" src="features/read-from-texture.js"></script>
9494
<script type="module" src="features/read-image-bitmap.js"></script>
95+
<script type="module" src="features/read-image-data.js"></script>
9596
<script type="module" src="features/read-offscreen-canvas.js"></script>
9697
<script type="module" src="features/return-arrays.js"></script>
9798
<script type="module" src="features/single-precision-textures.js"></script>

Diff for: ‎test/features/read-image-data.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const { assert, skip, test, module: describe } = require('qunit');
2+
const { GPU } = require('../../src');
3+
4+
describe('features: read from image data');
5+
6+
function readImageData(mode) {
7+
const gpu = new GPU({ mode });
8+
const dataArray = new Uint8ClampedArray([255, 255, 255, 255]);
9+
const imageData = new ImageData(dataArray, 1, 1);
10+
const kernel = gpu.createKernel(function(imageData) {
11+
const pixel = imageData[this.thread.y][this.thread.x];
12+
return pixel[0] + pixel[1] + pixel[2] + pixel[3];
13+
}, {
14+
output: [1]
15+
});
16+
const result = kernel(imageData);
17+
assert.equal(result.length, 1);
18+
assert.equal(result[0], 4);
19+
gpu.destroy();
20+
}
21+
22+
test('readImageData auto', () => {
23+
readImageData(null);
24+
});
25+
26+
test('readImageData gpu', () => {
27+
readImageData('gpu');
28+
});
29+
30+
(GPU.isWebGLSupported ? test : skip)('readImageData webgl', () => {
31+
readImageData('webgl');
32+
});
33+
34+
(GPU.isWebGL2Supported ? test : skip)('readImageData webgl2', () => {
35+
readImageData('webgl2');
36+
});
37+
38+
(GPU.isHeadlessGLSupported ? test : skip)('readImageData headlessgl', () => {
39+
readImageData('headlessgl');
40+
});
41+
42+
test('readImageData cpu', () => {
43+
readImageData('cpu');
44+
});

0 commit comments

Comments
 (0)
Please sign in to comment.