wonder.js
Version:
161 lines (149 loc) • 7.67 kB
JavaScript
;
var Curry = require("bs-platform/lib/js/curry.js");
var Caml_int32 = require("bs-platform/lib/js/caml_int32.js");
var Caml_option = require("bs-platform/lib/js/caml_option.js");
var Log$WonderLog = require("wonder-log/lib/js/src/Log.js");
var Contract$WonderLog = require("wonder-log/lib/js/src/Contract.js");
var BufferUtils$Wonderjs = require("../utils/BufferUtils.js");
var OptionService$Wonderjs = require("../../service/atom/OptionService.js");
var StateDataMain$Wonderjs = require("../../service/state/main/data/StateDataMain.js");
var IsDebugMainService$Wonderjs = require("../../service/state/main/state/IsDebugMainService.js");
var IndicesGeometryMainService$Wonderjs = require("../../service/state/main/geometry/IndicesGeometryMainService.js");
var NormalsGeometryMainService$Wonderjs = require("../../service/state/main/geometry/NormalsGeometryMainService.js");
var VerticesGeometryMainService$Wonderjs = require("../../service/state/main/geometry/VerticesGeometryMainService.js");
var TexCoordsGeometryMainService$Wonderjs = require("../../service/state/main/geometry/TexCoordsGeometryMainService.js");
function _getBufferData(param, param$1) {
var bytes_per_element = param$1[2];
var accessorIndex = param$1[0];
var accessors = param[/* accessors */10];
var bufferViews = param[/* bufferViews */9];
Contract$WonderLog.requireCheck((function (param) {
return Contract$WonderLog.test(Log$WonderLog.buildAssertMessage("not support interleaved buffer data", "is interleaved"), (function (param) {
var accessor = accessors[accessorIndex];
var match = bufferViews[accessor[/* bufferView */0]];
var byteStride = match[/* byteStride */3];
var match$1 = OptionService$Wonderjs.isJsonSerializedValueNone(byteStride);
if (match$1) {
return Contract$WonderLog.assertPass(/* () */0);
} else {
return Contract$WonderLog.Operators[/* = */0](OptionService$Wonderjs.unsafeGetJsonSerializedValue(byteStride), Caml_int32.imul(BufferUtils$Wonderjs.getAccessorTypeSize(accessor[/* type_ */4]), bytes_per_element));
}
}));
}), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData));
var accessor = accessors[accessorIndex];
var bufferView = bufferViews[accessor[/* bufferView */0]];
var dataView = param$1[1][bufferView[/* buffer */0]];
var offset = accessor[/* byteOffset */1] + bufferView[/* byteOffset */1] | 0;
return /* tuple */[
dataView.buffer,
offset,
BufferUtils$Wonderjs.computeTypeArrayLengthByAccessorData(accessor[/* count */2], accessor[/* type_ */4])
];
}
function _getBufferPointData(param, fromBufferRangeFunc) {
var match = _getBufferData(param[3], /* tuple */[
param[0],
param[2],
param[1]
]);
return Curry._3(fromBufferRangeFunc, match[0], match[1], match[2]);
}
function getBufferAttributeData(accessorIndex, dataViewArr, wd) {
return _getBufferPointData(/* tuple */[
accessorIndex,
Float32Array.BYTES_PER_ELEMENT,
dataViewArr,
wd
], (function (prim, prim$1, prim$2) {
return new Float32Array(prim, prim$1, prim$2);
}));
}
function getAccessorComponentType(param, accessorIndex) {
return param[/* accessors */10][accessorIndex][/* componentType */3];
}
function getBufferIndex16Data(componentType, accessorIndex, dataViewArr, wd) {
switch (componentType) {
case 1 :
return Caml_option.some(Uint16Array.from(_getBufferPointData(/* tuple */[
accessorIndex,
Uint8Array.BYTES_PER_ELEMENT,
dataViewArr,
wd
], (function (prim, prim$1, prim$2) {
return new Uint8Array(prim, prim$1, prim$2);
}))));
case 2 :
return undefined;
case 3 :
return Caml_option.some(_getBufferPointData(/* tuple */[
accessorIndex,
Uint16Array.BYTES_PER_ELEMENT,
dataViewArr,
wd
], (function (prim, prim$1, prim$2) {
return new Uint16Array(prim, prim$1, prim$2);
})));
default:
return undefined;
}
}
function getBufferIndex32Data(componentType, accessorIndex, dataViewArr, wd) {
if (componentType !== 4) {
return undefined;
} else {
return Caml_option.some(_getBufferPointData(/* tuple */[
accessorIndex,
Uint32Array.BYTES_PER_ELEMENT,
dataViewArr,
wd
], (function (prim, prim$1, prim$2) {
return new Uint32Array(prim, prim$1, prim$2);
})));
}
}
function _makeEmptyAttributePoints(param) {
return new Float32Array(/* array */[]);
}
function _setIndexData(geometry, param, state) {
var index = param[2];
var dataViewArr = param[1];
var wd = param[0];
var componentType = getAccessorComponentType(wd, index);
var match = getBufferIndex16Data(componentType, index, dataViewArr, wd);
if (match !== undefined) {
return IndicesGeometryMainService$Wonderjs.setIndicesByUint16Array(geometry, Caml_option.valFromOption(match), state);
} else {
var match$1 = getBufferIndex32Data(componentType, index, dataViewArr, wd);
if (match$1 !== undefined) {
return IndicesGeometryMainService$Wonderjs.setIndicesByUint32Array(geometry, Caml_option.valFromOption(match$1), state);
} else {
return Log$WonderLog.fatal(Log$WonderLog.buildFatalMessage("_batchSetGeometryData", "unknown componentType: " + (String(componentType) + ""), "", "", ""));
}
}
}
function setGeometryData(geometry, wd, dataViewArr, param, state) {
var texCoord = param[/* texCoord */3];
var normal = param[/* normal */2];
var state$1 = VerticesGeometryMainService$Wonderjs.setVerticesByTypeArray(geometry, getBufferAttributeData(param[/* position */1], dataViewArr, wd), state);
var match = OptionService$Wonderjs.isJsonSerializedValueNone(normal);
var normals = match ? new Float32Array(/* array */[]) : getBufferAttributeData(OptionService$Wonderjs.unsafeGetJsonSerializedValue(normal), dataViewArr, wd);
var state$2 = NormalsGeometryMainService$Wonderjs.setNormalsByTypeArray(geometry, normals, state$1);
var match$1 = OptionService$Wonderjs.isJsonSerializedValueNone(texCoord);
var texCoords = match$1 ? new Float32Array(/* array */[]) : getBufferAttributeData(OptionService$Wonderjs.unsafeGetJsonSerializedValue(texCoord), dataViewArr, wd);
var state$3 = TexCoordsGeometryMainService$Wonderjs.setTexCoordsByTypeArray(geometry, texCoords, state$2);
return _setIndexData(geometry, /* tuple */[
wd,
dataViewArr,
param[/* index */4]
], state$3);
}
exports._getBufferData = _getBufferData;
exports._getBufferPointData = _getBufferPointData;
exports.getBufferAttributeData = getBufferAttributeData;
exports.getAccessorComponentType = getAccessorComponentType;
exports.getBufferIndex16Data = getBufferIndex16Data;
exports.getBufferIndex32Data = getBufferIndex32Data;
exports._makeEmptyAttributePoints = _makeEmptyAttributePoints;
exports._setIndexData = _setIndexData;
exports.setGeometryData = setGeometryData;
/* Log-WonderLog Not a pure module */