| 1210 | } |
| 1211 | |
| 1212 | Result SetResource(HFactory factory, uint64_t hashed_name, void* data, uint32_t datasize) |
| 1213 | { |
| 1214 | DM_PROFILE(__FUNCTION__); |
| 1215 | |
| 1216 | dmMutex::ScopedLock lk(factory->m_LoadMutex); |
| 1217 | |
| 1218 | assert(data); |
| 1219 | |
| 1220 | ResourceDescriptor* rd = factory->m_Resources->Get(hashed_name); |
| 1221 | if (!rd) { |
| 1222 | return RESULT_RESOURCE_NOT_FOUND; |
| 1223 | } |
| 1224 | |
| 1225 | ResourceType* resource_type = (ResourceType*) rd->m_ResourceType; |
| 1226 | if (!resource_type->m_RecreateFunction) |
| 1227 | return RESULT_NOT_SUPPORTED; |
| 1228 | |
| 1229 | assert(data); |
| 1230 | assert(datasize > 0); |
| 1231 | |
| 1232 | ResourceRecreateParams params; |
| 1233 | params.m_Factory = factory; |
| 1234 | params.m_Type = resource_type; |
| 1235 | params.m_Context = resource_type->m_Context; |
| 1236 | params.m_Message = 0; |
| 1237 | params.m_Buffer = data; |
| 1238 | params.m_BufferSize = datasize; |
| 1239 | params.m_Resource = rd; |
| 1240 | params.m_Filename = 0; |
| 1241 | params.m_FilenameHash = hashed_name; |
| 1242 | Result create_result = (Result)resource_type->m_RecreateFunction(¶ms); |
| 1243 | if (create_result == RESULT_OK) |
| 1244 | { |
| 1245 | if (factory->m_ResourceReloadedCallbacks) |
| 1246 | { |
| 1247 | for (uint32_t i = 0; i < factory->m_ResourceReloadedCallbacks->Size(); ++i) |
| 1248 | { |
| 1249 | ResourceReloadedCallbackPair& pair = (*factory->m_ResourceReloadedCallbacks)[i]; |
| 1250 | ResourceReloadedParams params; |
| 1251 | params.m_UserData = pair.m_UserData; |
| 1252 | params.m_Resource = rd; |
| 1253 | params.m_Type = resource_type; |
| 1254 | params.m_Filename = 0; |
| 1255 | params.m_FilenameHash = hashed_name; |
| 1256 | pair.m_Callback(¶ms); |
| 1257 | } |
| 1258 | } |
| 1259 | return RESULT_OK; |
| 1260 | } |
| 1261 | else |
| 1262 | { |
| 1263 | return create_result; |
| 1264 | } |
| 1265 | |
| 1266 | return RESULT_OK; |
| 1267 | } |
| 1268 | |
| 1269 | Result SetResource(HFactory factory, uint64_t hashed_name, void* message) |