Made assets::data_stores thread safe.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user