MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / garbage_collect

Method garbage_collect

modules/render/renderer/src/shader_map.cpp:208–239  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

206}
207
208void ShaderMapImpl::garbage_collect(uint64_t critical_frame) SKR_NOEXCEPT
209{
210 // erase request when exit this scope
211 // SKR_DEFER({factory->mShaderTasks.erase(identifier);});
212 for (auto it = mShaderMap.begin(); it != mShaderMap.end();)
213 {
214 auto status = skr_atomicu32_load_relaxed(&it->second->shader_status);
215 if (status == SKR_SHADER_MAP_SHADER_STATUS_INSTALLED)
216 {
217 mShaderTasks.erase(it->first);
218 }
219
220 if (skr_atomicu32_load_relaxed(&it->second->rc) == 0 &&
221 skr_atomicu64_load_relaxed(&it->second->frame) < critical_frame)
222 {
223 if (mShaderTasks.find(it->first) != mShaderTasks.end())
224 {
225 // shader is still loading, skip & wait for it to finish
226 // TODO: cancel shader loading
227 ++it;
228 }
229 else
230 {
231 it = mShaderMap.erase(it);
232 }
233 }
234 else
235 {
236 ++it;
237 }
238 }
239}
240} // namespace skr
241
242skr_shader_map_id skr_shader_map_t::Create(const struct skr_shader_map_root_t* desc) SKR_NOEXCEPT

Callers 3

main_module_execMethod · 0.80

Calls 6

beginMethod · 0.45
endMethod · 0.45
eraseMethod · 0.45
findMethod · 0.45

Tested by

no test coverage detected