diff --git a/src/mol-io/common/simple-buffer.ts b/src/mol-io/common/simple-buffer.ts index 45f4d85d5c27b1f023e44bad3af06234ef08d97a..3ecbaecbc5c7498fa901b27d96e38813f80ae49a 100644 --- a/src/mol-io/common/simple-buffer.ts +++ b/src/mol-io/common/simple-buffer.ts @@ -4,6 +4,8 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ +import { defaults } from 'mol-util'; + export interface SimpleBuffer extends Uint8Array { readInt8: (offset: number) => number readUInt8: (offset: number) => number @@ -38,6 +40,8 @@ export interface SimpleBuffer extends Uint8Array { writeUInt32BE: (value: number, offset: number) => void writeFloatBE: (value: number, offset: number) => void writeDoubleBE: (value: number, offset: number) => void + + copy: (targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number) => number } export namespace SimpleBuffer { @@ -76,6 +80,14 @@ export namespace SimpleBuffer { writeUInt32BE: (value: number, offset: number) => dv.setUint32(offset, value, false), writeFloatBE: (value: number, offset: number) => dv.setFloat32(offset, value, false), writeDoubleBE: (value: number, offset: number) => dv.setFloat64(offset, value, false), + + copy: (targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number) => { + targetStart = defaults(targetStart, 0) + sourceStart = defaults(sourceStart, 0) + sourceEnd = defaults(sourceEnd, array.length) + targetBuffer.set(array.subarray(sourceStart, sourceEnd), targetStart) + return sourceEnd - sourceStart + } }) } diff --git a/src/servers/volume/pack/writer.ts b/src/servers/volume/pack/writer.ts index e63750780a0f9241ce105ad9980a7a0887d98fb7..bdd1348b4f42a02802ddbe546eabfdc8a503580a 100644 --- a/src/servers/volume/pack/writer.ts +++ b/src/servers/volume/pack/writer.ts @@ -46,8 +46,7 @@ function fillCubeBuffer(ctx: Data.Context, sampling: Data.Sampling, u: number, v for (let k = offsetK; k < maxK; k++) { // copying the bytes direct is faster than using buffer.write* functions. const start = (l * sizeHK + k * sizeH + offsetH) * elementSize; - // TODO - cubeBuffer.set(src.subarray(start, start + copyH), writeOffset) + src.copy(cubeBuffer, writeOffset, start, start + copyH); writeOffset += copyH; } }