Thank you very much, but I didn’t see why I traversed to clear the reference? And also keep the current frame in useless objects occupying memory after that? Imagine if I didn’t run renderer.render()
every frame? Has this part of the memory been wasted in vain soon? Besides, the efficiency is definitely far lower than the direct renderItems.length=0;
I am thinking whether there is a better solution, I have a little idea, I hope you can give suggestions, I can only use code to express mine Ideas:
function WebGLRenderList(properties) {
const renderItems = [];
const opaque = [];
const transparent = [];
const defaultProgram = { id: -1 };
// There is no need for init() here, because we have solved our own troubles in every frame
function getNextRenderItem(object, geometry, material, groupOrder, z, group) {
return {
id: object.id,
object: object,
geometry: geometry,
material: material,
program: properties.get(material).program || defaultProgram,
groupOrder: groupOrder,
renderOrder: object.renderOrder,
z: z,
group: group,
};
}
function push(object, geometry, material, groupOrder, z, group) {
const renderItem = getNextRenderItem(
object,
geometry,
material,
groupOrder,
z,
group
);
(material.transparent === true ? transparent : opaque).push(renderItem);
}
function unshift(object, geometry, material, groupOrder, z, group) {
const renderItem = getNextRenderItem(
object,
geometry,
material,
groupOrder,
z,
group
);
(material.transparent === true ? transparent : opaque).unshift(renderItem);
}
function sort(customOpaqueSort, customTransparentSort) {
if (opaque.length > 1) opaque.sort(customOpaqueSort || painterSortStable);
if (transparent.length > 1)
transparent.sort(customTransparentSort || reversePainterSortStable);
}
// `currentRenderList.finish();` is executed at the end of the `render()`, before `currentRenderList = null;`.
function finish() {
renderItems.length = 0;
opaque.length = 0;
transparent.length = 0;
}
return {
opaque: opaque,
transparent: transparent,
init: init,
push: push,
unshift: unshift,
finish: finish,
sort: sort,
};
}