mirror of
https://github.com/visgl/luma.gl.git
synced 2026-01-25 14:08:58 +00:00
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
// luma.gl, MIT license
|
|
// Copyright (c) vis.gl contributors
|
|
|
|
import test from 'tape-promise/tape';
|
|
import {getWebGLTestDevices} from '@luma.gl/test-utils';
|
|
import {BufferTransform} from '@luma.gl/engine';
|
|
import {Buffer, Device, glsl} from '@luma.gl/core';
|
|
|
|
const VS = glsl`\
|
|
#version 300 es
|
|
in float src;
|
|
out float dst;
|
|
void main() { dst = src * src; }
|
|
`;
|
|
|
|
const FS = glsl`\
|
|
#version 300 es
|
|
in float dst;
|
|
out vec4 fragColor;
|
|
void main() { fragColor.x = dst; }
|
|
`;
|
|
|
|
test('BufferTransform#constructor', async (t) => {
|
|
for (const device of getWebGLTestDevices()) {
|
|
if (device.isWebGL1) {
|
|
t.throws(() => createBufferTransform(device), /transform feedback/i, 'WebGL 1 throws');
|
|
} else {
|
|
t.ok(createBufferTransform(device), 'WebGL 2 succeeds');
|
|
}
|
|
}
|
|
t.end();
|
|
});
|
|
|
|
test('BufferTransform#run', async (t) => {
|
|
const SRC_ARRAY = new Float32Array([0, 1, 2, 3, 4, 5]);
|
|
const DST_ARRAY = new Float32Array([0, 1, 4, 9, 16, 25]);
|
|
|
|
for (const device of getWebGLTestDevices()) {
|
|
if (device.isWebGL1) {
|
|
t.comment('Skipping WebGL 1 device.');
|
|
} else {
|
|
const src = device.createBuffer({data: SRC_ARRAY});
|
|
const dst = device.createBuffer({byteLength: 24});
|
|
const elementCount = 6;
|
|
const transform = createBufferTransform(device, src, dst, elementCount);
|
|
|
|
transform.run();
|
|
|
|
const bytes = await transform.readAsync('dst');
|
|
const array = new Float32Array(bytes.buffer, bytes.byteOffset, elementCount);
|
|
t.deepEqual(array, DST_ARRAY, 'output transformed');
|
|
}
|
|
}
|
|
t.end();
|
|
});
|
|
|
|
function createBufferTransform(device: Device, src?: Buffer, dst?: Buffer, vertexCount?: number): BufferTransform {
|
|
return new BufferTransform(device, {
|
|
vs: VS,
|
|
fs: FS,
|
|
vertexCount,
|
|
attributes: src ? {src} : undefined,
|
|
bufferLayout: [{name: 'src', format: 'float32'}],
|
|
feedbackBuffers: dst ? {dst} : undefined,
|
|
varyings: ['dst'],
|
|
topology: 'point-list',
|
|
});
|
|
} |