bytev-charts
Version:
基于echarts和JavaScript及ES6封装的一个可以直接调用的图表组件库,内置主题设计,简单快捷,且支持用户自定义配置; npm 安装方式: npm install bytev-charts 若启动提示还需额外install插件,则运行 npm install @babel/runtime-corejs2 即可;
157 lines (141 loc) • 4.66 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";
import "core-js/modules/es.array.sort.js";
function painterSortStable(a, b) {
if (a.groupOrder !== b.groupOrder) {
return a.groupOrder - b.groupOrder;
} else if (a.renderOrder !== b.renderOrder) {
return a.renderOrder - b.renderOrder;
} else if (a.material.id !== b.material.id) {
return a.material.id - b.material.id;
} else if (a.z !== b.z) {
return a.z - b.z;
} else {
return a.id - b.id;
}
}
function reversePainterSortStable(a, b) {
if (a.groupOrder !== b.groupOrder) {
return a.groupOrder - b.groupOrder;
} else if (a.renderOrder !== b.renderOrder) {
return a.renderOrder - b.renderOrder;
} else if (a.z !== b.z) {
return b.z - a.z;
} else {
return a.id - b.id;
}
}
var WebGPURenderList = /*#__PURE__*/function () {
function WebGPURenderList() {
_classCallCheck(this, WebGPURenderList);
this.renderItems = [];
this.renderItemsIndex = 0;
this.opaque = [];
this.transparent = [];
}
_createClass(WebGPURenderList, [{
key: "init",
value: function init() {
this.renderItemsIndex = 0;
this.opaque.length = 0;
this.transparent.length = 0;
}
}, {
key: "getNextRenderItem",
value: function getNextRenderItem(object, geometry, material, groupOrder, z, group) {
var renderItem = this.renderItems[this.renderItemsIndex];
if (renderItem === undefined) {
renderItem = {
id: object.id,
object: object,
geometry: geometry,
material: material,
groupOrder: groupOrder,
renderOrder: object.renderOrder,
z: z,
group: group
};
this.renderItems[this.renderItemsIndex] = renderItem;
} else {
renderItem.id = object.id;
renderItem.object = object;
renderItem.geometry = geometry;
renderItem.material = material;
renderItem.groupOrder = groupOrder;
renderItem.renderOrder = object.renderOrder;
renderItem.z = z;
renderItem.group = group;
}
this.renderItemsIndex++;
return renderItem;
}
}, {
key: "push",
value: function push(object, geometry, material, groupOrder, z, group) {
var renderItem = this.getNextRenderItem(object, geometry, material, groupOrder, z, group);
(material.transparent === true ? this.transparent : this.opaque).push(renderItem);
}
}, {
key: "unshift",
value: function unshift(object, geometry, material, groupOrder, z, group) {
var renderItem = this.getNextRenderItem(object, geometry, material, groupOrder, z, group);
(material.transparent === true ? this.transparent : this.opaque).unshift(renderItem);
}
}, {
key: "sort",
value: function sort(customOpaqueSort, customTransparentSort) {
if (this.opaque.length > 1) this.opaque.sort(customOpaqueSort || painterSortStable);
if (this.transparent.length > 1) this.transparent.sort(customTransparentSort || reversePainterSortStable);
}
}, {
key: "finish",
value: function finish() {
// Clear references from inactive renderItems in the list
for (var i = this.renderItemsIndex, il = this.renderItems.length; i < il; i++) {
var renderItem = this.renderItems[i];
if (renderItem.id === null) break;
renderItem.id = null;
renderItem.object = null;
renderItem.geometry = null;
renderItem.material = null;
renderItem.program = null;
renderItem.group = null;
}
}
}]);
return WebGPURenderList;
}();
var WebGPURenderLists = /*#__PURE__*/function () {
function WebGPURenderLists() {
_classCallCheck(this, WebGPURenderLists);
this.lists = new _WeakMap();
}
_createClass(WebGPURenderLists, [{
key: "get",
value: function get(scene, camera) {
var lists = this.lists;
var cameras = lists.get(scene);
var list;
if (cameras === undefined) {
list = new WebGPURenderList();
lists.set(scene, new _WeakMap());
lists.get(scene).set(camera, list);
} else {
list = cameras.get(camera);
if (list === undefined) {
list = new WebGPURenderList();
cameras.set(camera, list);
}
}
return list;
}
}, {
key: "dispose",
value: function dispose() {
this.lists = new _WeakMap();
}
}]);
return WebGPURenderLists;
}();
export default WebGPURenderLists;