wonder.js
Version:
94 lines (84 loc) • 3.09 kB
JavaScript
;
var Curry = require("bs-platform/lib/js/curry.js");
var BufferTextureService$Wonderjs = require("../../../record/main/texture/BufferTextureService.js");
var TextureFilterService$Wonderjs = require("../../../primitive/texture/TextureFilterService.js");
var OperateTypeArrayTextureService$Wonderjs = require("../../../record/all/texture/OperateTypeArrayTextureService.js");
function _isPowerOfTwo(value) {
if ((value & (value - 1 | 0)) === 0 && value !== 0) {
return value !== 1;
} else {
return false;
}
}
function _isSourcePowerOfTwo(width, height) {
if (_isPowerOfTwo(width)) {
return _isPowerOfTwo(height);
} else {
return false;
}
}
function _filterFallback(filter, gl) {
switch (filter) {
case 0 :
case 2 :
case 4 :
return gl.NEAREST;
case 1 :
case 3 :
case 5 :
return gl.LINEAR;
}
}
function _setTextureParameters(gl, target, isSourcePowerOfTwo, param) {
var minFilter = param[3];
var magFilter = param[2];
if (isSourcePowerOfTwo) {
gl.texParameteri(target, gl.TEXTURE_WRAP_S, param[0]);
gl.texParameteri(target, gl.TEXTURE_WRAP_T, param[1]);
gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, TextureFilterService$Wonderjs.getGlFilter(gl, magFilter));
gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, TextureFilterService$Wonderjs.getGlFilter(gl, minFilter));
return /* () */0;
} else {
gl.texParameteri(target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, _filterFallback(magFilter, gl));
gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, _filterFallback(minFilter, gl));
return /* () */0;
}
}
function _isFilterMipmaps(filter) {
return filter >= 2;
}
function update(param, param$1, param$2, param$3) {
var wholeTarget = param$1[9];
var minFilter = param$1[5];
var magFilter = param$1[4];
var gl = param[0];
var isSourcePowerOfTwo = _isSourcePowerOfTwo(param$1[0], param$1[1]);
Curry._3(param$3[1], gl, param$1[8], param$2[1]);
gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
_setTextureParameters(gl, wholeTarget, isSourcePowerOfTwo, /* tuple */[
param$1[2],
param$1[3],
magFilter,
minFilter
]);
Curry._3(param$3[0], gl, /* tuple */[
param$1[10],
param$1[6],
param$1[7]
], param[2]);
var match = isSourcePowerOfTwo && (_isFilterMipmaps(magFilter) || _isFilterMipmaps(minFilter));
if (match) {
gl.generateMipmap(wholeTarget);
}
OperateTypeArrayTextureService$Wonderjs.setIsNeedUpdate(param[1], BufferTextureService$Wonderjs.getNotNeedUpdate(/* () */0), param$2[0]);
return /* () */0;
}
exports._isPowerOfTwo = _isPowerOfTwo;
exports._isSourcePowerOfTwo = _isSourcePowerOfTwo;
exports._filterFallback = _filterFallback;
exports._setTextureParameters = _setTextureParameters;
exports._isFilterMipmaps = _isFilterMipmaps;
exports.update = update;
/* OperateTypeArrayTextureService-Wonderjs Not a pure module */