Misc (#19)
* get image returns optional<Mat> instead of unique_ptr<Mat> * introduce complexity * rename image load function * add example for a basic reader for binary image files * fix windows build? * add a status bar underneath the menu bar * use status bar in custom_0 example app * clang formats * packing w/ pragma push * add "Save As" functions to image views * resize over reserve * rm local override uri * add simple thread pool * rename to simple_thread_pool * get rid of useless renderlib * document version inc * extract hardcoded values to in-header * clang format patch * clone registered image in custom_0 * document binary-file header * minor fixes * clang format * rm unused render cmake
This commit is contained in:
committed by
Maximilian Kueffner
parent
e3e161ce52
commit
b37814204f
@@ -0,0 +1,80 @@
|
||||
#include "RenderImageManager.hpp"
|
||||
|
||||
#include <format>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/// @brief Updates the collection of rendered images by removing images marked for deletion.
|
||||
/// This function iterates through the \c keys_to_delete_ list and removes the corresponding images from the collection.
|
||||
/// It does not acquire the mutex to avoid deadlocks with the `Remove` function.
|
||||
void pixelarium::application::RenderImageManager::UpdateCollection()
|
||||
{
|
||||
for (const auto& key : keys_to_delete_)
|
||||
{
|
||||
this->Remove(key);
|
||||
}
|
||||
|
||||
keys_to_delete_.clear();
|
||||
}
|
||||
|
||||
/// @brief Marks a resource for deletion.
|
||||
/// @param key The ID of the resource to mark for deletion.
|
||||
void pixelarium::application::RenderImageManager::MarkForDeletion(resources::ResourceKey key)
|
||||
{
|
||||
this->log_.Debug(std::format("{} marking key: \"{}\" for deletion.", __PRETTY_FUNCTION__, key));
|
||||
lock_guard<mutex> guard(this->mut_);
|
||||
keys_to_delete_.insert(key);
|
||||
}
|
||||
|
||||
/// @brief Removes a render image from the manager.
|
||||
/// @param key The key of the render image to remove.
|
||||
/// @return True if the render image was removed, false otherwise.
|
||||
bool pixelarium::application::RenderImageManager::Remove(resources::ResourceKey key) noexcept
|
||||
{
|
||||
bool remove_state{false};
|
||||
this->log_.Debug(std::format("{} removing key: \"{}\" from renderlist.", __PRETTY_FUNCTION__, key));
|
||||
{
|
||||
lock_guard<mutex> guard(this->mut_);
|
||||
remove_state = this->render_image_map_.erase(key) == 1;
|
||||
}
|
||||
|
||||
return remove_state;
|
||||
}
|
||||
|
||||
/// @brief Adds a resource to the render image map.
|
||||
/// @param key The ID of the resource to add.
|
||||
/// @return void. No exception is thrown.
|
||||
void pixelarium::application::RenderImageManager::Add(resources::ResourceKey key) noexcept
|
||||
{
|
||||
// we don't want to add what's already there
|
||||
// or empty render images
|
||||
if (this->render_image_map_.contains(key))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto current_view = this->view_factory_->RenderImage(key);
|
||||
if (current_view == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this->log_.Debug(std::format("{}: adding key: \"{}\" to renderlist.", __PRETTY_FUNCTION__, key));
|
||||
|
||||
lock_guard<mutex> guard(this->mut_);
|
||||
// clang-format off
|
||||
this->render_image_map_.insert(
|
||||
{
|
||||
key,
|
||||
RenderImageStateWrapper
|
||||
{
|
||||
.view{ std::move(current_view) },
|
||||
}
|
||||
}
|
||||
);
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
/// @brief Clears all render images from the manager.
|
||||
/// @note This function is noexcept.
|
||||
void pixelarium::application::RenderImageManager::Clear() noexcept { this->render_image_map_.clear(); }
|
||||
Reference in New Issue
Block a user