gpu.js/test/features/get-pixels.js
Robert Plummer e3aded43b1 feat: Allow for pixel flipping
fix: Move the flipPixels method to utilities, for reuse
fix: Invert pixel orientation
fix: Add text for issue #422
2019-05-18 17:25:47 -04:00

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
]);
});