mirror of
https://github.com/gpujs/gpu.js.git
synced 2025-12-08 20:35:56 +00:00
fix: Move the flipPixels method to utilities, for reuse fix: Invert pixel orientation fix: Add text for issue #422
326 lines
4.3 KiB
JavaScript
326 lines
4.3 KiB
JavaScript
const { assert, test, module: describe, only, skip } = require('qunit');
|
|
const { GPU } = require('../../src');
|
|
|
|
describe('features: getPixels');
|
|
|
|
function getPixelsStandard(mode) {
|
|
const gpu = new GPU({ mode });
|
|
const kernel = gpu.createKernel(function(v) {
|
|
this.color(
|
|
v[this.thread.y][this.thread.x][0],
|
|
v[this.thread.y][this.thread.x][1],
|
|
v[this.thread.y][this.thread.x][2]
|
|
);
|
|
}, {
|
|
output: [2,2],
|
|
graphical: true,
|
|
});
|
|
kernel([
|
|
[
|
|
[.02,.04,.06,.08],
|
|
[.10,.12,.14,.16]
|
|
],
|
|
[
|
|
[.18,.20,.22,.24],
|
|
[.26,.28,.30,.32]
|
|
]
|
|
]);
|
|
const pixels = Array.from(kernel.getPixels());
|
|
gpu.destroy();
|
|
return pixels;
|
|
}
|
|
|
|
|
|
test('standard auto', () => {
|
|
const pixels = getPixelsStandard();
|
|
assert.deepEqual(pixels, [
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255,
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255
|
|
]);
|
|
});
|
|
|
|
test('standard gpu', () => {
|
|
const pixels = getPixelsStandard('gpu');
|
|
assert.deepEqual(pixels, [
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255,
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255
|
|
]);
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('standard webgl', () => {
|
|
const pixels = getPixelsStandard('webgl');
|
|
assert.deepEqual(pixels, [
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255,
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255
|
|
]);
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('standard webgl2', () => {
|
|
const pixels = getPixelsStandard('webgl2');
|
|
assert.deepEqual(pixels, [
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255,
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255
|
|
]);
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('standard headlessgl', () => {
|
|
const pixels = getPixelsStandard('headlessgl');
|
|
assert.deepEqual(pixels, [
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255,
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255
|
|
]);
|
|
});
|
|
|
|
(GPU.isCanvasSupported ? test : skip)('standard cpu', () => {
|
|
const pixels = getPixelsStandard('cpu');
|
|
assert.deepEqual(pixels, [
|
|
45,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255,
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
30,
|
|
35,
|
|
255
|
|
]);
|
|
});
|
|
|
|
|
|
function getPixelsFlipped(mode) {
|
|
const gpu = new GPU({ mode });
|
|
const kernel = gpu.createKernel(function(v) {
|
|
this.color(
|
|
v[this.thread.y][this.thread.x][0],
|
|
v[this.thread.y][this.thread.x][1],
|
|
v[this.thread.y][this.thread.x][2]
|
|
);
|
|
}, {
|
|
output: [2,2],
|
|
graphical: true,
|
|
});
|
|
kernel([
|
|
[
|
|
[.02,.04,.06,.08],
|
|
[.10,.12,.14,.16]
|
|
],
|
|
[
|
|
[.18,.20,.22,.24],
|
|
[.26,.28,.30,.32]
|
|
]
|
|
]);
|
|
const pixels = Array.from(kernel.getPixels(true));
|
|
gpu.destroy();
|
|
return pixels;
|
|
}
|
|
|
|
|
|
test('flipped auto', () => {
|
|
const pixels = getPixelsFlipped();
|
|
assert.deepEqual(pixels, [
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255,
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255
|
|
]);
|
|
});
|
|
|
|
test('flipped gpu', () => {
|
|
const pixels = getPixelsFlipped('gpu');
|
|
assert.deepEqual(pixels, [
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255,
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255
|
|
]);
|
|
});
|
|
|
|
(GPU.isWebGLSupported ? test : skip)('flipped webgl', () => {
|
|
const pixels = getPixelsFlipped('webgl');
|
|
assert.deepEqual(pixels, [
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255,
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255
|
|
]);
|
|
});
|
|
|
|
(GPU.isWebGL2Supported ? test : skip)('flipped webgl2', () => {
|
|
const pixels = getPixelsFlipped('webgl2');
|
|
assert.deepEqual(pixels, [
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255,
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255
|
|
]);
|
|
});
|
|
|
|
(GPU.isHeadlessGLSupported ? test : skip)('flipped headlessgl', () => {
|
|
const pixels = getPixelsFlipped('headlessgl');
|
|
assert.deepEqual(pixels, [
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
31,
|
|
36,
|
|
255,
|
|
46,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255
|
|
]);
|
|
});
|
|
|
|
(GPU.isCanvasSupported ? test : skip)('flipped cpu', () => {
|
|
const pixels = getPixelsFlipped('cpu');
|
|
assert.deepEqual(pixels, [
|
|
5,
|
|
10,
|
|
15,
|
|
255,
|
|
25,
|
|
30,
|
|
35,
|
|
255,
|
|
45,
|
|
51,
|
|
56,
|
|
255,
|
|
66,
|
|
71,
|
|
76,
|
|
255
|
|
]);
|
|
});
|