#include #include #include #include #include #include namespace Light { LayerStack *LayerStack::s_context = nullptr; auto LayerStack::create() -> Scope { return make_scope(new LayerStack()); } LayerStack::LayerStack(): m_layers {}, m_begin(), m_end() { lt_assert( !s_context, "An instance of 'LayerStack' already exists, do not construct this class!" ) s_context = this; } LayerStack::~LayerStack() { for (auto *layer : m_layers) delete layer; } void LayerStack::attach_layer_impl(Layer *layer) { // #todo: handle attaching layer inside a for loop m_layers.push_back(layer); m_begin = m_layers.begin(); m_end = m_layers.end(); log_trc("Attached [{}]", layer->get_name()); } void LayerStack::detach_layer_impl(Layer *layer) { // #todo: handle detaching layer inside a for loop m_layers.erase(std::find(m_layers.begin(), m_layers.end(), layer)); m_begin = m_layers.begin(); m_end = m_layers.end(); log_trc("Detached [{}]", layer->get_name()); } } // namespace Light