gpu.js
Version:
GPU Accelerated JavaScript
30 lines (27 loc) • 1.17 kB
JavaScript
const { utils } = require('../../../utils');
const { WebGLKernelValueUnsignedInput } = require('./unsigned-input');
class WebGLKernelValueDynamicUnsignedInput extends WebGLKernelValueUnsignedInput {
getSource() {
return utils.linesToString([
`uniform sampler2D ${this.id}`,
`uniform ivec2 ${this.sizeId}`,
`uniform ivec3 ${this.dimensionsId}`,
]);
}
updateValue(value) {
let [w, h, d] = value.size;
this.dimensions = new Int32Array([w || 1, h || 1, d || 1]);
this.textureSize = utils.getMemoryOptimizedPackedTextureSize(this.dimensions, this.bitRatio);
this.uploadArrayLength = this.textureSize[0] * this.textureSize[1] * (4 / this.bitRatio);
this.checkSize(this.textureSize[0], this.textureSize[1]);
const Type = this.getTransferArrayType(value.value);
this.preUploadValue = new Type(this.uploadArrayLength);
this.uploadValue = new Uint8Array(this.preUploadValue.buffer);
this.kernel.setUniform3iv(this.dimensionsId, this.dimensions);
this.kernel.setUniform2iv(this.sizeId, this.textureSize);
super.updateValue(value);
}
}
module.exports = {
WebGLKernelValueDynamicUnsignedInput
};