本文整理匯總了TypeScript中neuroglancer/util/array.getFortranOrderStrides函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript getFortranOrderStrides函數的具體用法?TypeScript getFortranOrderStrides怎麽用?TypeScript getFortranOrderStrides使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了getFortranOrderStrides函數的3個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: encodeChannels
export function encodeChannels(
output: Uint32ArrayBuilder, blockSize: ArrayLike<number>, rawData: Uint32Array,
volumeSize: ArrayLike<number>, baseInputOffset: number = 0,
inputStrides = getFortranOrderStrides(volumeSize, 2)) {
return encodeChannelsCommon(
output, blockSize, rawData, volumeSize, baseInputOffset, inputStrides, encodeBlock);
}
示例2: getFortranOrderStrides
export function chunkFormatTest<TextureLayout extends Disposable>(
dataType: DataType, volumeSize: Vec4,
getChunkFormatAndTextureLayout:
(gl: GL) => [SingleTextureChunkFormat<TextureLayout>, TextureLayout],
rawData: TypedArray, encodedData: TypedArray) {
const numChannels = volumeSize[3];
let strides = getFortranOrderStrides(volumeSize);
let outputChannelsPerChannel = dataType === DataType.UINT64 ? 2 : 1;
it(`volumeSize = ${vec3Key(volumeSize)}, numChannels = ${volumeSize[3]}, dataType = ${DataType[dataType]}`,
() => {
fragmentShaderTest(outputChannelsPerChannel * numChannels, tester => {
let {gl, builder} = tester;
let [chunkFormat, textureLayout] = getChunkFormatAndTextureLayout(gl);
builder.addUniform('vec3', 'vChunkPosition');
builder.addUniform('vec3', 'uChunkDataSize');
builder.addFragmentCode(glsl_getPositionWithinChunk);
chunkFormat.defineShader(builder);
{
let fragmentMain = '';
let outputChannel = 0;
for (let channel = 0; channel < numChannels; ++channel) {
switch (dataType) {
case DataType.UINT64:
fragmentMain += `
{
uint64_t value = getDataValue(${channel});
gl_FragData[${outputChannel++}] = value.low;
gl_FragData[${outputChannel++}] = value.high;
}
`;
break;
case DataType.UINT8:
fragmentMain += `
gl_FragData[${outputChannel++}] = vec4(getDataValue(${channel}).value, 0, 0, 0);
`;
break;
case DataType.FLOAT32:
fragmentMain += `
gl_FragData[${outputChannel++}] = packFloatIntoVec4(getDataValue(${channel}));
`;
break;
case DataType.UINT16:
fragmentMain += `
gl_FragData[${outputChannel++}] = vec4(getDataValue(${channel}).value, 0, 0);
`;
break;
case DataType.UINT32:
fragmentMain += `
gl_FragData[${outputChannel++}] = getDataValue(${channel}).value;
`;
break;
}
}
builder.setFragmentMain(fragmentMain);
}
tester.build();
let {shader} = tester;
shader.bind();
gl.uniform3fv(shader.uniform('uChunkDataSize'), volumeSize.subarray(0, 3));
let texture = gl.createTexture();
tester.registerDisposer(() => { gl.deleteTexture(texture); });
chunkFormat.beginDrawing(gl, shader);
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
setRawTextureParameters(gl);
chunkFormat.setTextureData(gl, textureLayout, encodedData);
chunkFormat.setupTextureLayout(gl, shader, textureLayout);
// Position within chunk in floating point range [0, chunkDataSize].
function checkPosition(positionInChunk: Vec3) {
gl.uniform3fv(shader.uniform('vChunkPosition'), positionInChunk);
chunkFormat.beginDrawing(gl, shader);
chunkFormat.beginSource(gl, shader);
chunkFormat.setupTextureLayout(gl, shader, textureLayout);
gl.bindTexture(gl.TEXTURE_2D, texture);
tester.execute();
chunkFormat.endDrawing(gl, shader);
let offset = 0;
for (let i = 0; i < 3; ++i) {
offset += Math.floor(Math.max(0, Math.min(positionInChunk[i], volumeSize[i] - 1))) *
strides[i];
}
let outputChannel = 0;
for (let channel = 0; channel < numChannels; ++channel) {
const curOffset = offset + channel * strides[3];
const msg =
`volumeSize = ${vec3Key(volumeSize)}, positionInChunk = ${vec3Key(positionInChunk)}, channel = ${channel}, offset = ${curOffset}`;
switch (dataType) {
case DataType.UINT64: {
let low = tester.readUint32(outputChannel++);
let high = tester.readUint32(outputChannel++);
expect(low).toEqual(rawData[curOffset * 2], `${msg} (low)`);
expect(high).toEqual(rawData[curOffset * 2 + 1], `${msg} (high)`);
break;
}
case DataType.FLOAT32: {
let result = tester.readFloat(outputChannel++);
//.........這裏部分代碼省略.........
示例3: getFortranOrderStrides
export function chunkFormatTest<TextureLayout extends Disposable>(
dataType: DataType, volumeSize: vec4,
getChunkFormatAndTextureLayout:
(gl: GL) => [SingleTextureChunkFormat<TextureLayout>, TextureLayout],
rawData: TypedArray, encodedData: TypedArray) {
const numChannels = volumeSize[3];
let strides = getFortranOrderStrides(volumeSize);
const outputType = dataType === DataType.FLOAT32 ? 'float' : 'uint';
const outputs: FragmentShaderTestOutputs = {};
for (let channelIndex = 0; channelIndex < numChannels; ++channelIndex) {
if (dataType === DataType.UINT64) {
outputs[`output${channelIndex}Low`] = outputType;
outputs[`output${channelIndex}High`] = outputType;
} else {
outputs[`output${channelIndex}`] = outputType;
}
}
it(`volumeSize = ${vec3Key(volumeSize)}, numChannels = ${volumeSize[3]}, ` +
`dataType = ${DataType[dataType]}`,
() => {
fragmentShaderTest(outputs, tester => {
let {gl, builder} = tester;
let [chunkFormat, textureLayout] = getChunkFormatAndTextureLayout(gl);
builder.addUniform('highp vec3', 'vChunkPosition');
builder.addUniform('vec3', 'uChunkDataSize');
builder.addFragmentCode(glsl_getPositionWithinChunk);
chunkFormat.defineShader(builder);
{
let fragmentMain = '';
for (let channel = 0; channel < numChannels; ++channel) {
switch (dataType) {
case DataType.UINT64:
fragmentMain += `
{
uint64_t value = getDataValue(${channel});
output${channel}Low = value.value[0];
output${channel}High = value.value[1];
}
`;
break;
case DataType.FLOAT32:
fragmentMain += `
output${channel} = getDataValue(${channel});
`;
break;
default:
fragmentMain += `
output${channel} = getDataValue(${channel}).value;
`;
break;
}
}
builder.setFragmentMain(fragmentMain);
}
tester.build();
let {shader} = tester;
shader.bind();
gl.uniform3fv(shader.uniform('uChunkDataSize'), volumeSize.subarray(0, 3));
let texture = gl.createTexture();
tester.registerDisposer(() => {
gl.deleteTexture(texture);
});
const textureTarget = textureTargetForSamplerType[chunkFormat.shaderSamplerType];
chunkFormat.beginDrawing(gl, shader);
gl.bindTexture(textureTarget, texture);
chunkFormat.setTextureData(gl, textureLayout, encodedData);
chunkFormat.setupTextureLayout(gl, shader, textureLayout);
// Position within chunk in floating point range [0, chunkDataSize].
function checkPosition(positionInChunk: vec3) {
gl.uniform3fv(shader.uniform('vChunkPosition'), positionInChunk);
chunkFormat.beginDrawing(gl, shader);
chunkFormat.beginSource(gl, shader);
chunkFormat.setupTextureLayout(gl, shader, textureLayout);
gl.bindTexture(textureTarget, texture);
tester.execute();
chunkFormat.endDrawing(gl, shader);
let offset = 0;
for (let i = 0; i < 3; ++i) {
offset += Math.floor(Math.max(0, Math.min(positionInChunk[i], volumeSize[i] - 1))) *
strides[i];
}
const values = tester.values;
for (let channel = 0; channel < numChannels; ++channel) {
const curOffset = offset + channel * strides[3];
const msg = `volumeSize = ${vec3Key(volumeSize)}, ` +
`positionInChunk = ${vec3Key(positionInChunk)}, ` +
`channel = ${channel}, offset = ${curOffset}`;
switch (dataType) {
case DataType.UINT64: {
let low = values[`output${channel}Low`];
let high = values[`output${channel}High`];
expect(low).toBe(rawData[curOffset * 2], `${msg} (low)`);
expect(high).toEqual(rawData[curOffset * 2 + 1], `${msg} (high)`);
break;
}
default: {
let result = values[`output${channel}`];
//.........這裏部分代碼省略.........