mirror of
https://github.com/gpujs/gpu.js.git
synced 2026-01-18 16:04:10 +00:00
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
178 lines
5.3 KiB
JavaScript
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');
|
|
});
|
|
});
|