wonder.js
Version:
267 lines (257 loc) • 12.1 kB
JavaScript
'use strict';
var Curry = require("bs-platform/lib/js/curry.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 ImageUtils$Wonderjs = require("../../utils/ImageUtils.js");
var BufferUtils$Wonderjs = require("../../utils/BufferUtils.js");
var ArrayService$Wonderjs = require("../../../service/atom/ArrayService.js");
var StateDataMain$Wonderjs = require("../../../service/state/main/data/StateDataMain.js");
var BuildMaterialUtils$Wonderjs = require("./utils/BuildMaterialUtils.js");
var IsDebugMainService$Wonderjs = require("../../../service/state/main/state/IsDebugMainService.js");
var BuildTextureDataUtils$Wonderjs = require("../utils/BuildTextureDataUtils.js");
var MutableHashMapService$WonderCommonlib = require("wonder-commonlib/lib/js/src/MutableHashMapService.js");
var TypeSourceTextureMainService$Wonderjs = require("../../../service/state/main/texture/source/TypeSourceTextureMainService.js");
var MutableSparseMapService$WonderCommonlib = require("wonder-commonlib/lib/js/src/MutableSparseMapService.js");
var OperateLightMaterialMainService$Wonderjs = require("../../../service/state/main/material/light/OperateLightMaterialMainService.js");
var NameBasicSourceTextureMainService$Wonderjs = require("../../../service/state/main/texture/source/basic_source/NameBasicSourceTextureMainService.js");
var OperateBasicSourceTextureMainService$Wonderjs = require("../../../service/state/main/texture/source/basic_source/OperateBasicSourceTextureMainService.js");
function _buildSamplerDataMapKey(wrapS, wrapT, magFilter, minFilter) {
return wrapS.toString() + (wrapT.toString() + (magFilter.toString() + minFilter.toString()));
}
function _addSamplerData(texture, samplerIndexMap, state, samplerDataArr) {
var wrapS = OperateBasicSourceTextureMainService$Wonderjs.getWrapS(texture, state);
var wrapT = OperateBasicSourceTextureMainService$Wonderjs.getWrapT(texture, state);
var magFilter = OperateBasicSourceTextureMainService$Wonderjs.getMagFilter(texture, state);
var minFilter = OperateBasicSourceTextureMainService$Wonderjs.getMinFilter(texture, state);
var key = _buildSamplerDataMapKey(wrapS, wrapT, magFilter, minFilter);
var match = MutableHashMapService$WonderCommonlib.get(key, samplerIndexMap);
if (match !== undefined) {
return /* tuple */[
match,
samplerIndexMap,
samplerDataArr
];
} else {
var samplerIndex = samplerDataArr.length;
return /* tuple */[
samplerIndex,
MutableHashMapService$WonderCommonlib.set(key, samplerIndex, samplerIndexMap),
ArrayService$Wonderjs.push(/* record */[
/* wrapS */BuildTextureDataUtils$Wonderjs.getWrapData(wrapS),
/* wrapT */BuildTextureDataUtils$Wonderjs.getWrapData(wrapT),
/* magFilter */BuildTextureDataUtils$Wonderjs.getFilterData(magFilter),
/* minFilter */BuildTextureDataUtils$Wonderjs.getFilterData(minFilter)
], samplerDataArr)
];
}
}
function _getImageUint8ArrayData(texture, source, imageUint8ArrayDataMap, getResultUint8ArrayDataFunc) {
var match = MutableSparseMapService$WonderCommonlib.get(texture, imageUint8ArrayDataMap);
var match$1;
if (match !== undefined) {
match$1 = match;
} else {
var imageBase64 = BuildTextureDataUtils$Wonderjs.getImageBase64(source);
match$1 = /* tuple */[
BufferUtils$Wonderjs.getBase64MimeType(imageBase64),
BufferUtils$Wonderjs.convertBase64ToBinary(imageBase64)
];
}
var imageUint8Array = match$1[1];
var imageResultUint8Array = Curry._1(getResultUint8ArrayDataFunc, imageUint8Array);
var imageResultUint8ArrayByteLength = imageResultUint8Array.byteLength;
var imageResultUint8ArrayAlignedByteLength = BufferUtils$Wonderjs.alignedLength(imageResultUint8ArrayByteLength);
return /* tuple */[
match$1[0],
imageUint8Array,
/* tuple */[
imageResultUint8Array,
imageResultUint8ArrayByteLength,
imageResultUint8ArrayAlignedByteLength
]
];
}
function _addImageData(param, param$1, imageUint8DataArr, param$2, getResultUint8ArrayDataFunc) {
var bufferViewDataArr = param$2[2];
var byteOffset = param$2[1];
var totalByteLength = param$2[0];
var imageResultUint8ArrayMap = param$1[1];
var imageUint8ArrayMap = param[2];
var imageMap = param[1];
var texture = param[0];
Contract$WonderLog.requireCheck((function (param) {
return Contract$WonderLog.test(Log$WonderLog.buildAssertMessage("byteOffset aligned with multiple of 4", "not"), (function (param) {
return Contract$WonderLog.Operators[/* = */0](byteOffset % 4, 0);
}));
}), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData));
var source = OperateBasicSourceTextureMainService$Wonderjs.unsafeGetSource(texture, param[3]);
var imageIndex = MutableSparseMapService$WonderCommonlib.indexOf(source, imageMap);
if (imageIndex === -1) {
var imageIndex$1 = imageUint8DataArr.length;
var match = _getImageUint8ArrayData(texture, source, param$1[0], getResultUint8ArrayDataFunc);
var match$1 = match[2];
var imageResultUint8ArrayAlignedByteLength = match$1[2];
var imageUint8Array = match[1];
var imageUint8ArrayMap$1 = MutableSparseMapService$WonderCommonlib.set(imageIndex$1, imageUint8Array, imageUint8ArrayMap);
var imageResultUint8ArrayMap$1 = MutableSparseMapService$WonderCommonlib.set(texture, imageUint8Array, imageResultUint8ArrayMap);
return /* tuple */[
imageIndex$1,
MutableSparseMapService$WonderCommonlib.set(imageIndex$1, source, imageMap),
imageUint8ArrayMap$1,
ArrayService$Wonderjs.push(/* record */[
/* name */Caml_option.nullable_to_opt(ImageUtils$Wonderjs.getImageName(source)),
/* bufferView */bufferViewDataArr.length,
/* mimeType */BuildTextureDataUtils$Wonderjs.convertBase64MimeTypeToWDBMimeType(match[0]),
/* uint8Array */match$1[0],
/* byteOffset */byteOffset
], imageUint8DataArr),
imageResultUint8ArrayMap$1,
/* tuple */[
totalByteLength + imageResultUint8ArrayAlignedByteLength | 0,
byteOffset + imageResultUint8ArrayAlignedByteLength | 0,
ArrayService$Wonderjs.push(/* record */[
/* buffer */0,
/* byteOffset */byteOffset,
/* byteLength */match$1[1]
], bufferViewDataArr)
]
];
} else {
var imageResultUint8ArrayMap$2 = MutableSparseMapService$WonderCommonlib.set(texture, MutableSparseMapService$WonderCommonlib.unsafeGet(imageIndex, imageUint8ArrayMap), imageResultUint8ArrayMap);
return /* tuple */[
imageIndex,
imageMap,
imageUint8ArrayMap,
imageUint8DataArr,
imageResultUint8ArrayMap$2,
/* tuple */[
totalByteLength,
byteOffset,
bufferViewDataArr
]
];
}
}
function _addTextureData(texture, param, state, textureDataArr) {
return ArrayService$Wonderjs.push(/* record */[
/* name */NameBasicSourceTextureMainService$Wonderjs.getName(texture, state),
/* sampler */param[0],
/* source */param[1],
/* format */OperateBasicSourceTextureMainService$Wonderjs.getFormat(texture, state),
/* type_ */OperateBasicSourceTextureMainService$Wonderjs.getType(texture, state),
/* flipY */OperateBasicSourceTextureMainService$Wonderjs.getFlipY(texture, state)
], textureDataArr);
}
function _addMaterialData(materialDataArr, param) {
return ArrayService$Wonderjs.push(/* record */[
/* baseColorFactor */param[0],
/* baseColorTexture */param[1],
/* name */param[2]
], materialDataArr);
}
function build(param, param$1, param$2, getResultUint8ArrayDataFunc, state) {
var bufferViewDataArr = param$2[2];
var byteOffset = param$2[1];
var totalByteLength = param$2[0];
var match = param$1[1];
var imageResultUint8ArrayMap = match[5];
var imageUint8ArrayMap = match[3];
var imageMap = match[2];
var samplerIndexMap = match[1];
var textureIndexMap = match[0];
var match$1 = param$1[0];
var imageUint8DataArr = match$1[3];
var samplerDataArr = match$1[2];
var textureDataArr = match$1[1];
var materialDataArr = match$1[0];
var name = param[2];
var diffuseMap = param[1];
Contract$WonderLog.requireCheck((function (param) {
return Contract$WonderLog.test(Log$WonderLog.buildAssertMessage("map be basicSourceTexture", "not"), (function (param) {
return Contract$WonderLog.assertTrue(TypeSourceTextureMainService$Wonderjs.isBasicSourceTexture(diffuseMap, state));
}));
}), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData));
var diffuseColor = OperateLightMaterialMainService$Wonderjs.getDiffuseColor(param[0], state);
var baseColorFactor = BuildMaterialUtils$Wonderjs.buildColorFactor(diffuseColor);
var match$2 = MutableSparseMapService$WonderCommonlib.get(diffuseMap, textureIndexMap);
if (match$2 !== undefined) {
return /* tuple */[
/* tuple */[
ArrayService$Wonderjs.push(/* record */[
/* baseColorFactor */baseColorFactor,
/* baseColorTexture */match$2,
/* name */name
], materialDataArr),
textureDataArr,
samplerDataArr,
imageUint8DataArr
],
/* tuple */[
textureIndexMap,
samplerIndexMap,
imageMap,
imageUint8ArrayMap,
imageResultUint8ArrayMap
],
/* tuple */[
totalByteLength,
byteOffset,
bufferViewDataArr
]
];
} else {
var textureIndex = textureDataArr.length;
var textureIndexMap$1 = MutableSparseMapService$WonderCommonlib.set(diffuseMap, textureIndex, textureIndexMap);
var match$3 = _addSamplerData(diffuseMap, samplerIndexMap, state, samplerDataArr);
var match$4 = _addImageData(/* tuple */[
diffuseMap,
imageMap,
imageUint8ArrayMap,
state
], /* tuple */[
match[4],
imageResultUint8ArrayMap
], imageUint8DataArr, /* tuple */[
totalByteLength,
byteOffset,
bufferViewDataArr
], getResultUint8ArrayDataFunc);
var match$5 = match$4[5];
return /* tuple */[
/* tuple */[
_addMaterialData(materialDataArr, /* tuple */[
baseColorFactor,
textureIndex,
name
]),
_addTextureData(diffuseMap, /* tuple */[
match$3[0],
match$4[0]
], state, textureDataArr),
match$3[2],
match$4[3]
],
/* tuple */[
textureIndexMap$1,
match$3[1],
match$4[1],
match$4[2],
match$4[4]
],
/* tuple */[
match$5[0],
match$5[1],
match$5[2]
]
];
}
}
exports._buildSamplerDataMapKey = _buildSamplerDataMapKey;
exports._addSamplerData = _addSamplerData;
exports._getImageUint8ArrayData = _getImageUint8ArrayData;
exports._addImageData = _addImageData;
exports._addTextureData = _addTextureData;
exports._addMaterialData = _addMaterialData;
exports.build = build;
/* Log-WonderLog Not a pure module */