gpu.js/test/features/read-color-texture.js
Robert Plummer 00ee2ba982 feat: Refactor dimensional values and expose the bitRatio all the way to the function node
fix: Added test suite for arrays and inputs for webgl and webgl2
fix: Rename "floatOutput" feature to "precision".  Values can be "unsigned" or "single"
fix: Add input and Input to typings
fix: Use Int32Array for input.size
2019-04-20 09:59:49 -04:00

178 lines
5.3 KiB
JavaScript

const { assert, skip, test, module: describe, only } = require('qunit');
const { GPU } = require('../../src');
describe('features: read color texture');
function colorSyntaxTest(mode) {
const gpu = new GPU({ mode });
const createTexture = gpu.createKernel(
function(value) {
this.color(
value[this.thread.y][this.thread.x],
value[this.thread.y][this.thread.x],
value[this.thread.y][this.thread.x],
value[this.thread.y][this.thread.x]
);
}
)
.setOutput([4, 4])
.setGraphical(true)
.setPipeline(true);
const readRTexture = gpu.createKernel(
function(texture) {
const pixel = texture[this.thread.y][this.thread.x];
return pixel.r;
}
)
.setOutput([4, 4]);
const readGTexture = gpu.createKernel(
function(texture) {
const pixel = texture[this.thread.y][this.thread.x];
return pixel.g;
}
)
.setOutput([4, 4]);
const readBTexture = gpu.createKernel(
function(texture) {
const pixel = texture[this.thread.y][this.thread.x];
return pixel.b;
}
)
.setOutput([4, 4]);
const readATexture = gpu.createKernel(
function(texture) {
const pixel = texture[this.thread.y][this.thread.x];
return pixel.a;
}
)
.setOutput([4, 4]);
const texture = createTexture([
[.01,.02,.03,.04],
[.05,.06,.07,.08],
[.09,.10,.11,.12],
[.13,.14,.15,.16]
]);
const resultR = readRTexture(texture);
const resultG = readGTexture(texture);
const resultB = readBTexture(texture);
const resultA = readATexture(texture);
assert.equal(texture.constructor.name, 'Texture');
// R
assert.equal(resultR[0][0].toFixed(2), '0.01');
assert.equal(resultR[0][1].toFixed(2), '0.02');
assert.equal(resultR[0][2].toFixed(2), '0.03');
assert.equal(resultR[0][3].toFixed(2), '0.04');
assert.equal(resultR[1][0].toFixed(2), '0.05');
assert.equal(resultR[1][1].toFixed(2), '0.06');
assert.equal(resultR[1][2].toFixed(2), '0.07');
assert.equal(resultR[1][3].toFixed(2), '0.08');
assert.equal(resultR[2][0].toFixed(2), '0.09');
assert.equal(resultR[2][1].toFixed(2), '0.10');
assert.equal(resultR[2][2].toFixed(2), '0.11');
assert.equal(resultR[2][3].toFixed(2), '0.12');
assert.equal(resultR[3][0].toFixed(2), '0.13');
assert.equal(resultR[3][1].toFixed(2), '0.14');
assert.equal(resultR[3][2].toFixed(2), '0.15');
assert.equal(resultR[3][3].toFixed(2), '0.16');
// G
assert.equal(resultG[0][0].toFixed(2), '0.01');
assert.equal(resultG[0][1].toFixed(2), '0.02');
assert.equal(resultG[0][2].toFixed(2), '0.03');
assert.equal(resultG[0][3].toFixed(2), '0.04');
assert.equal(resultG[1][0].toFixed(2), '0.05');
assert.equal(resultG[1][1].toFixed(2), '0.06');
assert.equal(resultG[1][2].toFixed(2), '0.07');
assert.equal(resultG[1][3].toFixed(2), '0.08');
assert.equal(resultG[2][0].toFixed(2), '0.09');
assert.equal(resultG[2][1].toFixed(2), '0.10');
assert.equal(resultG[2][2].toFixed(2), '0.11');
assert.equal(resultG[2][3].toFixed(2), '0.12');
assert.equal(resultG[3][0].toFixed(2), '0.13');
assert.equal(resultG[3][1].toFixed(2), '0.14');
assert.equal(resultG[3][2].toFixed(2), '0.15');
assert.equal(resultG[3][3].toFixed(2), '0.16');
// B
assert.equal(resultB[0][0].toFixed(2), '0.01');
assert.equal(resultB[0][1].toFixed(2), '0.02');
assert.equal(resultB[0][2].toFixed(2), '0.03');
assert.equal(resultB[0][3].toFixed(2), '0.04');
assert.equal(resultB[1][0].toFixed(2), '0.05');
assert.equal(resultB[1][1].toFixed(2), '0.06');
assert.equal(resultB[1][2].toFixed(2), '0.07');
assert.equal(resultB[1][3].toFixed(2), '0.08');
assert.equal(resultB[2][0].toFixed(2), '0.09');
assert.equal(resultB[2][1].toFixed(2), '0.10');
assert.equal(resultB[2][2].toFixed(2), '0.11');
assert.equal(resultB[2][3].toFixed(2), '0.12');
assert.equal(resultB[3][0].toFixed(2), '0.13');
assert.equal(resultB[3][1].toFixed(2), '0.14');
assert.equal(resultB[3][2].toFixed(2), '0.15');
assert.equal(resultB[3][3].toFixed(2), '0.16');
// A
assert.equal(resultA[0][0].toFixed(2), '0.01');
assert.equal(resultA[0][1].toFixed(2), '0.02');
assert.equal(resultA[0][2].toFixed(2), '0.03');
assert.equal(resultA[0][3].toFixed(2), '0.04');
assert.equal(resultA[1][0].toFixed(2), '0.05');
assert.equal(resultA[1][1].toFixed(2), '0.06');
assert.equal(resultA[1][2].toFixed(2), '0.07');
assert.equal(resultA[1][3].toFixed(2), '0.08');
assert.equal(resultA[2][0].toFixed(2), '0.09');
assert.equal(resultA[2][1].toFixed(2), '0.10');
assert.equal(resultA[2][2].toFixed(2), '0.11');
assert.equal(resultA[2][3].toFixed(2), '0.12');
assert.equal(resultA[3][0].toFixed(2), '0.13');
assert.equal(resultA[3][1].toFixed(2), '0.14');
assert.equal(resultA[3][2].toFixed(2), '0.15');
assert.equal(resultA[3][3].toFixed(2), '0.16');
gpu.destroy();
}
test('colorSyntaxTest auto', () => {
colorSyntaxTest(null);
});
test('colorSyntaxTest gpu', () => {
colorSyntaxTest('gpu');
});
(GPU.isWebGLSupported ? test : skip)('colorSyntaxTest webgl', () => {
colorSyntaxTest('webgl');
});
(GPU.isWebGL2Supported ? test : skip)('colorSyntaxTest webgl2', () => {
colorSyntaxTest('webgl2');
});
(GPU.isHeadlessGLSupported ? test : skip)('colorSyntaxTest headlessgl', () => {
colorSyntaxTest('headlessgl');
});
test('colorSyntaxTest (cpu) throws', () => {
assert.throws(() => {
colorSyntaxTest('cpu');
});
});