in modules/mesh-layers/src/utils/matrix.js [75:150]
update(attribute, {startRow, endRow}) {
// NOTE(Tarek): "this" will be bound to a layer!
const {data, getOrientation, getScale, getTranslation, getTransformMatrix} = this.props;
const arrayMatrix = Array.isArray(getTransformMatrix);
const constantMatrix = arrayMatrix && getTransformMatrix.length === 16;
const constantScale = Array.isArray(getScale);
const constantOrientation = Array.isArray(getOrientation);
const constantTranslation = Array.isArray(getTranslation);
const hasMatrix = constantMatrix || (!arrayMatrix && Boolean(getTransformMatrix(data[0])));
if (hasMatrix) {
attribute.constant = constantMatrix;
} else {
attribute.constant = constantOrientation && constantScale && constantTranslation;
}
const instanceModelMatrixData = attribute.value;
if (attribute.constant) {
let matrix;
if (hasMatrix) {
modelMatrix.set(getTransformMatrix);
matrix = getExtendedMat3FromMat4(modelMatrix);
} else {
matrix = valueArray;
const orientation = getOrientation;
const scale = getScale;
calculateTransformMatrix(matrix, orientation, scale);
matrix.set(getTranslation, 9);
}
attribute.value = new Float32Array(matrix);
} else {
let i = startRow * attribute.size;
const {iterable, objectInfo} = createIterable(data, startRow, endRow);
for (const object of iterable) {
objectInfo.index++;
let matrix;
if (hasMatrix) {
modelMatrix.set(
constantMatrix ? getTransformMatrix : getTransformMatrix(object, objectInfo)
);
matrix = getExtendedMat3FromMat4(modelMatrix);
} else {
matrix = valueArray;
const orientation = constantOrientation
? getOrientation
: getOrientation(object, objectInfo);
const scale = constantScale ? getScale : getScale(object, objectInfo);
calculateTransformMatrix(matrix, orientation, scale);
matrix.set(constantTranslation ? getTranslation : getTranslation(object, objectInfo), 9);
}
instanceModelMatrixData[i++] = matrix[0];
instanceModelMatrixData[i++] = matrix[1];
instanceModelMatrixData[i++] = matrix[2];
instanceModelMatrixData[i++] = matrix[3];
instanceModelMatrixData[i++] = matrix[4];
instanceModelMatrixData[i++] = matrix[5];
instanceModelMatrixData[i++] = matrix[6];
instanceModelMatrixData[i++] = matrix[7];
instanceModelMatrixData[i++] = matrix[8];
instanceModelMatrixData[i++] = matrix[9];
instanceModelMatrixData[i++] = matrix[10];
instanceModelMatrixData[i++] = matrix[11];
}
}
}