274{
275 std::string tmpStr = FetchURL("https://api.polyhaven.com", "/files/" + textureStoreItems[id].name);
277
278 try
279 {
281 }
282
283 catch(...)
284 {
285 Log("Failed to download texture : " + textureStoreItems[id].name);
286 return;
287 }
288
289 std::string baseDir = GetExecutableDir() + PATH_SEPARATOR "Data"
290 PATH_SEPARATOR "textures" PATH_SEPARATOR + textureStoreItems[id].name;
291 MkDir(baseDir);
292 textureStoreItems[id].baseDir = baseDir;
293 tmpStr = tmpJ["Diffuse"][std::to_string(res) + "k"]["png"]["url"];
294 DownloadFile("https://dl.polyhaven.org", tmpStr.substr(24), baseDir + PATH_SEPARATOR "albedo.png");
295 textureStoreItems[id].abledo = baseDir + PATH_SEPARATOR "albedo.png";
296 tmpStr = tmpJ["nor_gl"][std::to_string(res) + "k"]["png"]["url"];
297 DownloadFile("https://dl.polyhaven.org", tmpStr.substr(24), baseDir + PATH_SEPARATOR "normal.png");
298 textureStoreItems[id].normal = baseDir + PATH_SEPARATOR "normal.png";
299 tmpStr = tmpJ["Rough"][std::to_string(res) + "k"]["png"]["url"];
300 DownloadFile("https://dl.polyhaven.org", tmpStr.substr(24), baseDir + PATH_SEPARATOR "roughness.png");
301 textureStoreItems[id].roughness = baseDir + PATH_SEPARATOR "roughness.png";
302 tmpStr = tmpJ["AO"][std::to_string(res) + "k"]["png"]["url"];
303 DownloadFile("https://dl.polyhaven.org", tmpStr.substr(24), baseDir + PATH_SEPARATOR "ao.png");
304 textureStoreItems[id].ao = baseDir + PATH_SEPARATOR "ao.png";
305 tmpStr = tmpJ["arm"][std::to_string(res) + "k"]["png"]["url"];
306 DownloadFile("https://dl.polyhaven.org", tmpStr.substr(24), baseDir + PATH_SEPARATOR "arm.png");
307 textureStoreItems[id].arm = baseDir + PATH_SEPARATOR "arm.png";
308 tmpStr = tmpJ["Displacement"][std::to_string(res) + "k"]["png"]["url"];
309 DownloadFile("https://dl.polyhaven.org", tmpStr.substr(24), baseDir + PATH_SEPARATOR "displacement.png");
310 textureStoreItems[id].downloaded = true;
311 downloadedTextureStoreItems.push_back(id);
312 SaveDownloadsDatabase();
313}
static JSON_HEDLEY_WARN_UNUSED_RESULT basic_json parse(InputType &&i, const parser_callback_t cb=nullptr, const bool allow_exceptions=true, const bool ignore_comments=false)
deserialize from a compatible input
a class to store JSON values