wonder.js
Version:
270 lines (261 loc) • 11.3 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 IsDebugMainService$Wonderjs = require("../../service/state/main/state/IsDebugMainService.js");
var BuildTextureDataUtils$Wonderjs = require("./utils/BuildTextureDataUtils.js");
var SkyboxSceneMainService$Wonderjs = require("../../service/state/main/scene/SkyboxSceneMainService.js");
var NameCubemapTextureMainService$Wonderjs = require("../../service/state/main/texture/cubemap/NameCubemapTextureMainService.js");
var OperateCubemapTextureMainService$Wonderjs = require("../../service/state/main/texture/cubemap/OperateCubemapTextureMainService.js");
function _addSamplerData(texture, state, samplerDataArr) {
var wrapS = OperateCubemapTextureMainService$Wonderjs.getWrapS(texture, state);
var wrapT = OperateCubemapTextureMainService$Wonderjs.getWrapT(texture, state);
var magFilter = OperateCubemapTextureMainService$Wonderjs.getMagFilter(texture, state);
var minFilter = OperateCubemapTextureMainService$Wonderjs.getMinFilter(texture, state);
return /* tuple */[
samplerDataArr.length,
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, getResultUint8ArrayDataFunc) {
var imageBase64 = BuildTextureDataUtils$Wonderjs.getImageBase64(source);
var mimeType = BufferUtils$Wonderjs.getBase64MimeType(imageBase64);
var imageUint8Array = BufferUtils$Wonderjs.convertBase64ToBinary(imageBase64);
var imageResultUint8Array = Curry._1(getResultUint8ArrayDataFunc, imageUint8Array);
var imageResultUint8ArrayByteLength = imageResultUint8Array.byteLength;
var imageResultUint8ArrayAlignedByteLength = BufferUtils$Wonderjs.alignedLength(imageResultUint8ArrayByteLength);
return /* tuple */[
mimeType,
imageUint8Array,
/* tuple */[
imageResultUint8Array,
imageResultUint8ArrayByteLength,
imageResultUint8ArrayAlignedByteLength
]
];
}
function _addOneFaceImageData(oneFaceSource, param, imageUint8DataArr, param$1, getResultUint8ArrayDataFunc) {
var bufferViewDataArr = param$1[2];
var byteOffset = param$1[1];
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 imageIndex = imageUint8DataArr.length;
var match = _getImageUint8ArrayData(param[0], oneFaceSource, getResultUint8ArrayDataFunc);
var match$1 = match[2];
var imageResultUint8ArrayAlignedByteLength = match$1[2];
return /* tuple */[
imageIndex,
ArrayService$Wonderjs.push(/* record */[
/* name */Caml_option.nullable_to_opt(ImageUtils$Wonderjs.getImageName(oneFaceSource)),
/* bufferView */bufferViewDataArr.length,
/* mimeType */BuildTextureDataUtils$Wonderjs.convertBase64MimeTypeToWDBMimeType(match[0]),
/* uint8Array */match$1[0],
/* byteOffset */byteOffset
], imageUint8DataArr),
/* tuple */[
param$1[0] + imageResultUint8ArrayAlignedByteLength | 0,
byteOffset + imageResultUint8ArrayAlignedByteLength | 0,
ArrayService$Wonderjs.push(/* record */[
/* buffer */0,
/* byteOffset */byteOffset,
/* byteLength */match$1[1]
], bufferViewDataArr)
]
];
}
function _addImageData(param, imageUint8DataArr, param$1, getResultUint8ArrayDataFunc) {
var state = param[1];
var texture = param[0];
var match = _addOneFaceImageData(OperateCubemapTextureMainService$Wonderjs.unsafeGetPXSource(texture, state), /* tuple */[
texture,
state
], imageUint8DataArr, /* tuple */[
param$1[0],
param$1[1],
param$1[2]
], getResultUint8ArrayDataFunc);
var match$1 = match[2];
var match$2 = _addOneFaceImageData(OperateCubemapTextureMainService$Wonderjs.unsafeGetNXSource(texture, state), /* tuple */[
texture,
state
], match[1], /* tuple */[
match$1[0],
match$1[1],
match$1[2]
], getResultUint8ArrayDataFunc);
var match$3 = match$2[2];
var match$4 = _addOneFaceImageData(OperateCubemapTextureMainService$Wonderjs.unsafeGetPYSource(texture, state), /* tuple */[
texture,
state
], match$2[1], /* tuple */[
match$3[0],
match$3[1],
match$3[2]
], getResultUint8ArrayDataFunc);
var match$5 = match$4[2];
var match$6 = _addOneFaceImageData(OperateCubemapTextureMainService$Wonderjs.unsafeGetNYSource(texture, state), /* tuple */[
texture,
state
], match$4[1], /* tuple */[
match$5[0],
match$5[1],
match$5[2]
], getResultUint8ArrayDataFunc);
var match$7 = match$6[2];
var match$8 = _addOneFaceImageData(OperateCubemapTextureMainService$Wonderjs.unsafeGetPZSource(texture, state), /* tuple */[
texture,
state
], match$6[1], /* tuple */[
match$7[0],
match$7[1],
match$7[2]
], getResultUint8ArrayDataFunc);
var match$9 = match$8[2];
var match$10 = _addOneFaceImageData(OperateCubemapTextureMainService$Wonderjs.unsafeGetNZSource(texture, state), /* tuple */[
texture,
state
], match$8[1], /* tuple */[
match$9[0],
match$9[1],
match$9[2]
], getResultUint8ArrayDataFunc);
var match$11 = match$10[2];
return /* tuple */[
/* tuple */[
match[0],
match$2[0],
match$4[0],
match$6[0],
match$8[0],
match$10[0]
],
match$10[1],
/* tuple */[
match$11[0],
match$11[1],
match$11[2]
]
];
}
function _addTextureData(texture, param, state, textureDataArr) {
var match = param[1];
return ArrayService$Wonderjs.push(/* record */[
/* name */NameCubemapTextureMainService$Wonderjs.getName(texture, state),
/* sampler */param[0],
/* pxSource */match[0],
/* nxSource */match[1],
/* pySource */match[2],
/* nySource */match[3],
/* pzSource */match[4],
/* nzSource */match[5],
/* pxFormat */OperateCubemapTextureMainService$Wonderjs.getPXFormat(texture, state),
/* nxFormat */OperateCubemapTextureMainService$Wonderjs.getNXFormat(texture, state),
/* pyFormat */OperateCubemapTextureMainService$Wonderjs.getPYFormat(texture, state),
/* nyFormat */OperateCubemapTextureMainService$Wonderjs.getNYFormat(texture, state),
/* pzFormat */OperateCubemapTextureMainService$Wonderjs.getPZFormat(texture, state),
/* nzFormat */OperateCubemapTextureMainService$Wonderjs.getNZFormat(texture, state),
/* pxType */OperateCubemapTextureMainService$Wonderjs.getPXType(texture, state),
/* nxType */OperateCubemapTextureMainService$Wonderjs.getNXType(texture, state),
/* pyType */OperateCubemapTextureMainService$Wonderjs.getPYType(texture, state),
/* nyType */OperateCubemapTextureMainService$Wonderjs.getNYType(texture, state),
/* pzType */OperateCubemapTextureMainService$Wonderjs.getPZType(texture, state),
/* nzType */OperateCubemapTextureMainService$Wonderjs.getNZType(texture, state),
/* flipY */OperateCubemapTextureMainService$Wonderjs.getFlipY(texture, state)
], textureDataArr);
}
function build(isBuildCubemapFromSceneSkybox, cubemapTextureDataArr, samplerDataArr, imageUint8DataArr, param, getResultUint8ArrayDataFunc, state) {
var bufferViewDataArr = param[2];
var byteOffset = param[1];
var totalByteLength = param[0];
var match = !isBuildCubemapFromSceneSkybox;
if (match) {
return /* tuple */[
undefined,
/* tuple */[
cubemapTextureDataArr,
samplerDataArr,
imageUint8DataArr
],
/* tuple */[
totalByteLength,
byteOffset,
bufferViewDataArr
]
];
} else {
var match$1 = SkyboxSceneMainService$Wonderjs.getCubemapTexture(state);
if (match$1 !== undefined) {
var cubemapTexture = match$1;
var match$2 = _addSamplerData(cubemapTexture, state, samplerDataArr);
var match$3 = _addImageData(/* tuple */[
cubemapTexture,
state
], imageUint8DataArr, /* tuple */[
totalByteLength,
byteOffset,
bufferViewDataArr
], getResultUint8ArrayDataFunc);
var match$4 = match$3[2];
var match$5 = match$3[0];
var skyboxCubemapTextureIndex = cubemapTextureDataArr.length;
var cubemapTextureDataArr$1 = _addTextureData(cubemapTexture, /* tuple */[
match$2[0],
/* tuple */[
match$5[0],
match$5[1],
match$5[2],
match$5[3],
match$5[4],
match$5[5]
]
], state, cubemapTextureDataArr);
return /* tuple */[
skyboxCubemapTextureIndex,
/* tuple */[
cubemapTextureDataArr$1,
match$2[1],
match$3[1]
],
/* tuple */[
match$4[0],
match$4[1],
match$4[2]
]
];
} else {
return /* tuple */[
undefined,
/* tuple */[
cubemapTextureDataArr,
samplerDataArr,
imageUint8DataArr
],
/* tuple */[
totalByteLength,
byteOffset,
bufferViewDataArr
]
];
}
}
}
exports._addSamplerData = _addSamplerData;
exports._getImageUint8ArrayData = _getImageUint8ArrayData;
exports._addOneFaceImageData = _addOneFaceImageData;
exports._addImageData = _addImageData;
exports._addTextureData = _addTextureData;
exports.build = build;
/* Log-WonderLog Not a pure module */