// add factory void AssetManager::registerType(int type, AssetFactory* factory) { SCOPE_LOCK; if (type < 0 || type >= Asset::MAX_TYPES) Errorf("out of bound"); if (m_datas[type] != nullptr) { Errorf("already registered"); } int poolsize = factory->getPoolSize(); m_datas[type] = TypeNew<Data>(poolsize); m_datas[type]->factory = factory; m_datas[type]->poolHint = factory->getPoolHint(); Asset* defaulted = factory->getDefaulted(); if (defaulted == nullptr) { defaulted = factory->create(); if (!defaulted->doInit("default", 0)) { factory->destroy(defaulted); defaulted = nullptr; } } m_datas[type]->defaulted = defaulted; if (defaulted != nullptr) { defaulted->m_isDefaulted = true; } else { // TODO Debugf("%s: can't found defaulted asset for type\n", __func__); } }