#include "GlUser.hpp"
#include "Debug.hpp"
#include <algorithm>
namespace wren {
std::vector<std::pair<GlUser *, GlUser::GlAction>> GlUser::cUsersRequiringAction;
void GlUser::setRequireAction(GlAction action) {
assert(std::find_if(cUsersRequiringAction.cbegin(), cUsersRequiringAction.cend(),
[&](const std::pair<GlUser *, GlAction> &p) { return p.first == this && p.second == action; }) ==
cUsersRequiringAction.cend());
cUsersRequiringAction.push_back(std::make_pair(this, action));
}
void GlUser::applyGl() {
for (size_t i = 0; i < cUsersRequiringAction.size(); ++i) {
if (cUsersRequiringAction[i].second == GL_ACTION_CLEANUP)
cUsersRequiringAction[i].first->cleanupGl();
else if (cUsersRequiringAction[i].second == GL_ACTION_DELETE) {
cUsersRequiringAction[i].first->cleanupGl();
auto it =
std::find_if(cUsersRequiringAction.begin(), cUsersRequiringAction.end(), [&](const std::pair<GlUser *, GlAction> &p) {
return p.first == cUsersRequiringAction[i].first && p.second == GL_ACTION_PREPARE;
});
if (it != cUsersRequiringAction.end())
it->first = NULL;
delete cUsersRequiringAction[i].first;
} else if (cUsersRequiringAction[i].second == GL_ACTION_PREPARE) {
if (cUsersRequiringAction[i].first)
cUsersRequiringAction[i].first->prepareGl();
}
}
cUsersRequiringAction.clear();
}
}