Example #1
0
	void AssetManager::runFrame() {
		SCOPE_LOCK;

		AX_ASSERT(m_frameId < std::numeric_limits<int>::max());
		m_frameId++;

		// TODO: free old asset
		for (int i = 0; i < Asset::MAX_TYPES; i++) {
			Data* d = m_datas[i];
			if (!d) {
				continue;
			}

			if (d->poolHint == AssetFactory::Immortal) {
				continue;
			}

#if 0
			if (d->poolHint == AssetFactory::Pooled) {

			}
#endif
			AssetList::iterator it = d->assetNotRefed.begin();
			while (it != d->assetNotRefed.end()) {
				Asset* asset = *it;
				if (asset->getRefCount()) {
					it = d->assetNotRefed.erase(it);
					asset->m_isInDeleteList = false;
					continue;
				}

				if (asset->m_frameId < m_frameId - 2) {
					d->assetDict.erase(asset->m_key);
					it = d->assetNotRefed.erase(it);
					d->factory->destroy(asset);
				} else {
					++it;
				}
			}
		}
	}