mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-11 22:11:51 +00:00
bring back multimap
This commit is contained in:
parent
019fe68b48
commit
818a6bd6ae
2 changed files with 12 additions and 15 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue