| 86 | } |
| 87 | |
| 88 | void ResourceCache::registerField( |
| 89 | const std::string& name, |
| 90 | const RenderPassReflection::Field& field, |
| 91 | uint32_t timePoint, |
| 92 | const std::string& alias |
| 93 | ) |
| 94 | { |
| 95 | FALCOR_ASSERT(mNameToIndex.find(name) == mNameToIndex.end()); |
| 96 | |
| 97 | bool addAlias = (alias.empty() == false); |
| 98 | if (addAlias && mNameToIndex.count(alias) == 0) |
| 99 | { |
| 100 | FALCOR_THROW("Field named '{}' not found. Cannot register '{}' as an alias.", alias, name); |
| 101 | } |
| 102 | |
| 103 | // Add a new field |
| 104 | if (addAlias == false) |
| 105 | { |
| 106 | FALCOR_ASSERT(mNameToIndex.count(name) == 0); |
| 107 | mNameToIndex[name] = (uint32_t)mResourceData.size(); |
| 108 | bool resolveBindFlags = (field.getBindFlags() == ResourceBindFlags::None); |
| 109 | mResourceData.push_back({field, {timePoint, timePoint}, nullptr, resolveBindFlags, name}); |
| 110 | } |
| 111 | else // Add alias |
| 112 | { |
| 113 | uint32_t index = mNameToIndex[alias]; |
| 114 | mNameToIndex[name] = index; |
| 115 | mResourceData[index].field.merge(field); |
| 116 | mergeTimePoint(mResourceData[index].lifetime, timePoint); |
| 117 | mResourceData[index].pResource = nullptr; |
| 118 | mResourceData[index].resolveBindFlags = mResourceData[index].resolveBindFlags || (field.getBindFlags() == ResourceBindFlags::None); |
| 119 | } |
| 120 | } |
| 121 | |
| 122 | inline ref<Resource> createResourceForPass( |
| 123 | ref<Device> pDevice, |
no test coverage detected