bytev-charts
Version:
基于echarts和JavaScript及ES6封装的一个可以直接调用的图表组件库,内置主题设计,简单快捷,且支持用户自定义配置; npm 安装方式: npm install bytev-charts 若启动提示还需额外install插件,则运行 npm install @babel/runtime-corejs2 即可;
82 lines (72 loc) • 2.54 kB
JavaScript
import _classCallCheck from "@babel/runtime-corejs2/helpers/classCallCheck";
import _createClass from "@babel/runtime-corejs2/helpers/createClass";
import _WeakMap from "@babel/runtime-corejs2/core-js/weak-map";
var WebGPUAttributes = /*#__PURE__*/function () {
function WebGPUAttributes(device) {
_classCallCheck(this, WebGPUAttributes);
this.buffers = new _WeakMap();
this.device = device;
}
_createClass(WebGPUAttributes, [{
key: "get",
value: function get(attribute) {
return this.buffers.get(attribute);
}
}, {
key: "remove",
value: function remove(attribute) {
var data = this.buffers.get(attribute);
if (data) {
data.buffer.destroy();
this.buffers["delete"](attribute);
}
}
}, {
key: "update",
value: function update(attribute) {
var isIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var data = this.buffers.get(attribute);
if (data === undefined) {
var usage = isIndex === true ? GPUBufferUsage.INDEX : GPUBufferUsage.VERTEX;
data = this._createBuffer(attribute, usage);
this.buffers.set(attribute, data);
} else if (data.version < attribute.version) {
this._writeBuffer(data.buffer, attribute);
data.version = attribute.version;
}
}
}, {
key: "_createBuffer",
value: function _createBuffer(attribute, usage) {
var array = attribute.array;
var size = array.byteLength + array.byteLength % 4; // ensure 4 byte alignment
var buffer = this.device.createBuffer({
size: size,
usage: usage | GPUBufferUsage.COPY_DST,
mappedAtCreation: true
});
new array.constructor(buffer.getMappedRange()).set(array);
buffer.unmap();
attribute.onUploadCallback();
return {
version: attribute.version,
buffer: buffer
};
}
}, {
key: "_writeBuffer",
value: function _writeBuffer(buffer, attribute) {
var array = attribute.array;
var updateRange = attribute.updateRange;
if (updateRange.count === -1) {
// Not using update ranges
this.device.defaultQueue.writeBuffer(buffer, 0, array, 0);
} else {
this.device.defaultQueue.writeBuffer(buffer, 0, array, updateRange.offset * array.BYTES_PER_ELEMENT, updateRange.count * array.BYTES_PER_ELEMENT);
updateRange.count = -1; // reset range
}
}
}]);
return WebGPUAttributes;
}();
export default WebGPUAttributes;