я конечно понимаю что это просто пример кода но тем не менее
name = name.substr(0, name.find(".png"));
а что если в названии файла нету .png?(ну мало ли по ошибке там тхт файлик окажется где-нибудь)
if(const auto index = name.find(".png"); index != std::string::npos)
{
name = name.substr(0, index);
...
}
и ресурсы имеет смысл заворачивать в RAII.
stbi_load
...
stbi_image_free
это С.
если в ... ты return'ешься или вылетит исключение(например майкрософтовское(их ловить можно чтобы не крашило.
/EHa
)) то ты получается не освобождаешь ресурс. если ты крашишь от майкрософтовского исключения - то конкретно в данном случае похуй(ибо краш = закрытие процесса = освобождение оперативки), но что если бы тут была не оперативка а условно какой-нибудь другой супер сложный ресурс который не освобождался бы при смерти процесса(например иконка в трее. если приложуха крашится - иконка в трее так и остаётся висеть. иконку в трее прога должна сама подчищать если она выходит)?
я уже не говорю про тот ад который в С наступает когда у тебя несколько ресурсов в одном масштабе(goto cleanup и тд))) нафига это тебе?
в общем лично я советую ловить майкрософтовские исключения(чтобы потом тебе логнуло и ты пошел в сурсы смотреть. если же ничего не нашел в сурсах интересного тогда перестаешь ловить и идешь дебажить. ну и плюс просто неприятно когда тебе крашит), а если уж с исключениями работать то нужно тогда RAII везде делать. да и даже без исключений RAII мастхев. я лично считаю что с++ код без раии нельзя называть с++.
и еще не совсем понимаю что значит
if (image_data == NULL)
return;
это значит что если произошла ошибка то ты тупо ее игноришь и абсолютно нихуя с ней не делаешь и потенциально даже не знаешь о том что она произошла(логгинга не вижу никаких еррор кодов и исключений тоже не вижу) xD?
бтв, не надо так писать
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
ZeroMemory(&srvDesc, sizeof(srvDesc));
пиши
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc{};
структура D3D11_SHADER_RESOURCE_VIEW_DESC это aggregate, следовательно {} это Aggregate initialization с пустым листом, следовательно все нон-класс(инт и тд) члены value-инитятся(по факту = zero-инитятся). то есть все то же самое что и твой ZeroMemory делает можно сделать двумя символами {}