Made assets::data_stores thread safe.

This commit is contained in:
zy4n
2025-03-31 20:13:26 +02:00
parent 144126ee7a
commit 0acfe36118
39 changed files with 1772 additions and 1069 deletions

View File

@@ -68,28 +68,21 @@ void zgl::shader_source_manager::process(const store_type& shader_sources)
for (const auto& [ id, shader_source ] : shader_sources)
{
const auto meta = metadata_type{
.stage = shader_source.stage,
.components = shader_source.components,
.static_enable = shader_source.static_enable,
.dynamic_enable = shader_source.dynamic_enable
};
// Sorted insert should be faster than std::sort and std::unique
// for small numbers of elements and high numbers of duplicates.
const auto it = std::ranges::upper_bound(
m_shader_source_lookup,
meta,
shader_source.meta,
prioritized_metadata_comparator{},
&entry_type::first
);
if (it != m_shader_source_lookup.end() and it->first == meta)
if (it != m_shader_source_lookup.end() and it->first == shader_source.meta)
{
continue;
}
m_shader_source_lookup.emplace(it, meta, id);
m_shader_source_lookup.emplace(it, shader_source.meta, id);
}
}
@@ -132,7 +125,7 @@ void zgl::shader_source_manager::fetch(
while (
source_it != m_shader_source_lookup.end() and
source_it->first.geometry == req.geometry_type and
source_it->first.geometry_type == req.geometry_type and
source_it->first.stage == req.stage
) {
const auto& [ meta, id ] = *source_it;
@@ -146,7 +139,7 @@ void zgl::shader_source_manager::fetch(
to_be_enabled = req.components & meta.static_enable;
source_id = id;
res.static_enabled = meta.commponents & ~meta.dynamic_enable & ~unwanted_components;
res.static_enabled = meta.components & ~meta.dynamic_enable & ~unwanted_components;
res.dynamic_enable = meta.dynamic_enable;
break;