vislite
Version:
灵活、快速、简单的数据可视化交互式跨端前端库
56 lines (54 loc) • 2.44 kB
JavaScript
var initTexture = function (painter, type, unit) {
var texture = painter.createTexture();
painter.activeTexture(painter['TEXTURE' + unit]);
painter.bindTexture(type, texture);
return texture;
};
var linkImage = function (painter, type, level, format, textureType, image) {
painter.texImage2D(type, level, format, format, textureType, image);
};
var linkCube = function (painter, type, level, format, textureType, images, width, height, texture) {
var types = [
painter.TEXTURE_CUBE_MAP_POSITIVE_X,
painter.TEXTURE_CUBE_MAP_NEGATIVE_X,
painter.TEXTURE_CUBE_MAP_POSITIVE_Y,
painter.TEXTURE_CUBE_MAP_NEGATIVE_Y,
painter.TEXTURE_CUBE_MAP_POSITIVE_Z,
painter.TEXTURE_CUBE_MAP_NEGATIVE_Z
];
var target;
for (var i = 0; i < types.length; i++) {
if (images[i]) {
target = types[i];
painter.texImage2D(target, level, format, width, height, 0, format, textureType, null);
painter.bindTexture(type, texture);
painter.texImage2D(target, level, format, format, textureType, images[i]);
}
}
painter.generateMipmap(type);
};
var TextureObject = (function () {
function TextureObject(painter, type, unit) {
if (unit === void 0) { unit = 0; }
this.__painter = painter;
this.__type = {
"2d": painter.TEXTURE_2D,
"cube": painter.TEXTURE_CUBE_MAP
}[type];
this.__texture = initTexture(painter, this.__type, unit);
painter.texParameteri(this.__type, painter.TEXTURE_MIN_FILTER, painter.NEAREST);
painter.texParameteri(this.__type, painter.TEXTURE_MAG_FILTER, painter.NEAREST);
painter.texParameteri(this.__type, painter.TEXTURE_WRAP_S, painter.CLAMP_TO_EDGE);
painter.texParameteri(this.__type, painter.TEXTURE_WRAP_T, painter.CLAMP_TO_EDGE);
}
TextureObject.prototype.useImage = function (image) {
linkImage(this.__painter, this.__type, 0, this.__painter.RGBA, this.__painter.UNSIGNED_BYTE, image);
return this;
};
TextureObject.prototype.useCube = function (images, width, height) {
linkCube(this.__painter, this.__type, 0, this.__painter.RGBA, this.__painter.UNSIGNED_BYTE, images, width, height, this.__texture);
return this;
};
return TextureObject;
}());
export { TextureObject as default };