1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Reduce size of ContentFeatures structure

On my system this is a reduction from 4664 to 3704 bytes.
This is not for the sake of saving RAM but ensuring
commonly used structures fit into caches better.
This commit is contained in:
sfan5 2022-05-09 20:59:28 +02:00
parent 9a01581cdd
commit 8b74257bf3
4 changed files with 143 additions and 125 deletions

View file

@ -266,10 +266,12 @@ void transformNodeBox(const MapNode &n, const NodeBox &nodebox,
std::vector<aabb3f> &boxes = *p_boxes;
if (nodebox.type == NODEBOX_FIXED || nodebox.type == NODEBOX_LEVELED) {
const std::vector<aabb3f> &fixed = nodebox.fixed;
const auto &fixed = nodebox.fixed;
int facedir = n.getFaceDir(nodemgr, true);
u8 axisdir = facedir>>2;
facedir&=0x03;
boxes.reserve(boxes.size() + fixed.size());
for (aabb3f box : fixed) {
if (nodebox.type == NODEBOX_LEVELED)
box.MaxEdge.Y = (-0.5f + n.getLevel(nodemgr) / 64.0f) * BS;
@ -437,41 +439,43 @@ void transformNodeBox(const MapNode &n, const NodeBox &nodebox,
{
size_t boxes_size = boxes.size();
boxes_size += nodebox.fixed.size();
const auto &c = nodebox.getConnected();
if (neighbors & 1)
boxes_size += nodebox.connect_top.size();
boxes_size += c.connect_top.size();
else
boxes_size += nodebox.disconnected_top.size();
boxes_size += c.disconnected_top.size();
if (neighbors & 2)
boxes_size += nodebox.connect_bottom.size();
boxes_size += c.connect_bottom.size();
else
boxes_size += nodebox.disconnected_bottom.size();
boxes_size += c.disconnected_bottom.size();
if (neighbors & 4)
boxes_size += nodebox.connect_front.size();
boxes_size += c.connect_front.size();
else
boxes_size += nodebox.disconnected_front.size();
boxes_size += c.disconnected_front.size();
if (neighbors & 8)
boxes_size += nodebox.connect_left.size();
boxes_size += c.connect_left.size();
else
boxes_size += nodebox.disconnected_left.size();
boxes_size += c.disconnected_left.size();
if (neighbors & 16)
boxes_size += nodebox.connect_back.size();
boxes_size += c.connect_back.size();
else
boxes_size += nodebox.disconnected_back.size();
boxes_size += c.disconnected_back.size();
if (neighbors & 32)
boxes_size += nodebox.connect_right.size();
boxes_size += c.connect_right.size();
else
boxes_size += nodebox.disconnected_right.size();
boxes_size += c.disconnected_right.size();
if (neighbors == 0)
boxes_size += nodebox.disconnected.size();
boxes_size += c.disconnected.size();
if (neighbors < 4)
boxes_size += nodebox.disconnected_sides.size();
boxes_size += c.disconnected_sides.size();
boxes.reserve(boxes_size);
@ -484,47 +488,47 @@ void transformNodeBox(const MapNode &n, const NodeBox &nodebox,
BOXESPUSHBACK(nodebox.fixed);
if (neighbors & 1) {
BOXESPUSHBACK(nodebox.connect_top);
BOXESPUSHBACK(c.connect_top);
} else {
BOXESPUSHBACK(nodebox.disconnected_top);
BOXESPUSHBACK(c.disconnected_top);
}
if (neighbors & 2) {
BOXESPUSHBACK(nodebox.connect_bottom);
BOXESPUSHBACK(c.connect_bottom);
} else {
BOXESPUSHBACK(nodebox.disconnected_bottom);
BOXESPUSHBACK(c.disconnected_bottom);
}
if (neighbors & 4) {
BOXESPUSHBACK(nodebox.connect_front);
BOXESPUSHBACK(c.connect_front);
} else {
BOXESPUSHBACK(nodebox.disconnected_front);
BOXESPUSHBACK(c.disconnected_front);
}
if (neighbors & 8) {
BOXESPUSHBACK(nodebox.connect_left);
BOXESPUSHBACK(c.connect_left);
} else {
BOXESPUSHBACK(nodebox.disconnected_left);
BOXESPUSHBACK(c.disconnected_left);
}
if (neighbors & 16) {
BOXESPUSHBACK(nodebox.connect_back);
BOXESPUSHBACK(c.connect_back);
} else {
BOXESPUSHBACK(nodebox.disconnected_back);
BOXESPUSHBACK(c.disconnected_back);
}
if (neighbors & 32) {
BOXESPUSHBACK(nodebox.connect_right);
BOXESPUSHBACK(c.connect_right);
} else {
BOXESPUSHBACK(nodebox.disconnected_right);
BOXESPUSHBACK(c.disconnected_right);
}
if (neighbors == 0) {
BOXESPUSHBACK(nodebox.disconnected);
BOXESPUSHBACK(c.disconnected);
}
if (neighbors < 4) {
BOXESPUSHBACK(nodebox.disconnected_sides);
BOXESPUSHBACK(c.disconnected_sides);
}
}