feat: move editor to project / add post processing etc

This commit is contained in:
2026-10-23 20:54:12 +02:00
parent f7e7c56392
commit a3d3da4a67
104 changed files with 11750 additions and 2675 deletions
+27 -6
View File
@@ -46,6 +46,7 @@ void MaterialCache::cleanup(GfxDevice& gfxDevice)
materialDataBuffer = {};
materials.clear();
materialKeys.clear();
freeIds = std::make_shared<std::vector<MaterialID>>();
placeholderMaterialId = NULL_MATERIAL_ID;
device = nullptr;
}
@@ -54,7 +55,7 @@ MaterialID MaterialCache::addMaterial(Material material, std::string key)
{
MaterialData* data = static_cast<MaterialData*>(materialDataBuffer.info.pMappedData);
const auto id = getFreeMaterialId();
const MaterialID id = getFreeMaterialId();
if (id >= MAX_MATERIALS) {
throw std::runtime_error("MaterialCache capacity exhausted");
}
@@ -70,7 +71,7 @@ MaterialID MaterialCache::addMaterial(Material material, std::string key)
static_cast<VkDeviceSize>(id) * sizeof(MaterialData),
sizeof(MaterialData));
const auto materialId = static_cast<MaterialID>(materials.size());
const MaterialID materialId = id;
if (key.empty() && !material.assetReference.empty()) {
key = material.assetReference.cacheKey();
} else if (key.empty()) {
@@ -84,12 +85,29 @@ MaterialID MaterialCache::addMaterial(Material material, std::string key)
key = baseKey + "#" + std::to_string(suffix++);
}
materials.push_back(std::move(material));
materialKeys.push_back(std::move(key));
if (materialId == materials.size()) {
materials.push_back(std::move(material));
materialKeys.push_back(std::move(key));
} else {
std::erase(*freeIds, materialId);
materials[materialId] = std::move(material);
materialKeys[materialId] = std::move(key);
}
return materialId;
}
void MaterialCache::removeMaterial(MaterialID id)
{
if (!isValid(id) || id == placeholderMaterialId) {
return;
}
materials[id] = {};
materialKeys[id].clear();
device->deferDestroy([ids = freeIds, id] { ids->push_back(id); });
}
MaterialID MaterialCache::addSimpleTextureMaterial(ImageID textureID)
{
Material material = Material::SimpleColor(
@@ -117,6 +135,9 @@ const std::string& MaterialCache::getMaterialKey(MaterialID id) const
std::optional<MaterialID> MaterialCache::findMaterialByKey(std::string_view key) const
{
if (key.empty()) {
return std::nullopt;
}
const auto it = std::find(materialKeys.begin(), materialKeys.end(), key);
if (it == materialKeys.end()) {
return std::nullopt;
@@ -131,7 +152,7 @@ std::optional<MaterialID> MaterialCache::findMaterialByName(
std::optional<MaterialID> fallback;
for (MaterialID id = 0; id < materials.size(); ++id) {
const auto& material = materials[id];
if (material.name != name) {
if (!isValid(id) || material.name != name) {
continue;
}
@@ -186,7 +207,7 @@ MaterialData MaterialCache::toMaterialData(const Material& material) const
MaterialID MaterialCache::getFreeMaterialId() const
{
return static_cast<MaterialID>(materials.size());
return freeIds->empty() ? static_cast<MaterialID>(materials.size()) : freeIds->back();
}
MaterialID MaterialCache::getPlaceholderMaterialId() const