bring back multimap

This commit is contained in:
clasher113 2026-03-16 18:34:50 +02:00
parent 019fe68b48
commit 818a6bd6ae
2 changed files with 12 additions and 15 deletions

View file

@ -102,10 +102,13 @@ void BlockWrapsRenderer::refreshWrapper(BlockWrapper& wrapper) {
wrapper.texRegions[i] = texRegion; wrapper.texRegions[i] = texRegion;
wrapper.uvRegions[i] = texRegion.region; wrapper.uvRegions[i] = texRegion.region;
auto& wrappers = renderOrder[texRegion.texture]; auto range = renderOrder.equal_range(texRegion.texture);
if (std::find(wrappers.begin(), wrappers.end(), &wrapper) == auto it =
wrappers.end()) { std::find_if(range.first, range.second, [&wrapper](auto& elem) {
wrappers.emplace_back(&wrapper); return elem.second == &wrapper;
});
if (it == range.second) {
renderOrder.emplace(texRegion.texture, &wrapper);
} }
} }
wrapper.dirtySides = 0x0; wrapper.dirtySides = 0x0;
@ -147,12 +150,9 @@ void BlockWrapsRenderer::draw(const DrawContext& pctx) {
refreshWrapper(*wrapper); refreshWrapper(*wrapper);
} }
} }
for (const auto& [texture, wrapper] : renderOrder) {
for (const auto& [texture, wrappersArray] : renderOrder) {
batch->setTexture(texture); batch->setTexture(texture);
for (auto wrapper : wrappersArray) { draw(*wrapper, texture);
draw(*wrapper, texture);
}
} }
batch->flush(); batch->flush();
} }
@ -192,11 +192,7 @@ void BlockWrapsRenderer::remove(u64id_t id) {
void BlockWrapsRenderer::clearOrder(const BlockWrapper* const wrapper) { void BlockWrapsRenderer::clearOrder(const BlockWrapper* const wrapper) {
auto it = renderOrder.begin(); auto it = renderOrder.begin();
while (it != renderOrder.end()) { while (it != renderOrder.end()) {
it->second.erase( if (it->second == wrapper) {
std::remove(it->second.begin(), it->second.end(), wrapper),
it->second.end()
);
if (it->second.empty()) {
it = renderOrder.erase(it); it = renderOrder.erase(it);
} else { } else {
++it; ++it;

View file

@ -9,6 +9,7 @@
#include <string> #include <string>
#include <memory> #include <memory>
#include <unordered_map> #include <unordered_map>
#include <map>
class Assets; class Assets;
class Content; class Content;
@ -36,7 +37,7 @@ class BlockWrapsRenderer {
const Chunks& chunks; const Chunks& chunks;
std::unique_ptr<MainBatch> batch; std::unique_ptr<MainBatch> batch;
std::unordered_map<const Texture*, std::vector<BlockWrapper*>> renderOrder; std::multimap<const Texture*, BlockWrapper*> renderOrder;
std::unordered_map<u64id_t, std::unique_ptr<BlockWrapper>> wrappers; std::unordered_map<u64id_t, std::unique_ptr<BlockWrapper>> wrappers;
u64id_t nextWrapper = 1; u64id_t nextWrapper = 1;