Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Ну как я сказал, я не ничего не делал, кроме как почекал дампы. Моя задача выполнена, спасибо за разъяснение всем остальным. (Реакции не могу еще ставить)
я конечно понимаю что это просто пример кода но тем не менее
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.
C:
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 делает можно сделать двумя символами {}
я конечно понимаю что это просто пример кода но тем не менее
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.
C:
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 делает можно сделать двумя символами {}
Ой, да забей, это писал мой кохай. Молодой, не опытный. Код работает -- я даже не брался его ревьюить, не до этого пока.
Насчет отлова ошибок -- там вроде всё так работает, что просто картинка не загрузится и там в ID3D11ShaderResourceView будет nullptr, что я чекаю в функе рендера.
Ну и типа в худшем случае я получу нихуя вместо картинки. Понятно дело, это хуевая практика\кодстайл. Но, опять же, ревьюить каждый его коммит -- у меня нет столько времени.
панорама имба конечно но там пиздец сколько оффсетов хуетов индексов и прочего дерьма( = фиксить при апдейтах сложно. а апдейты там частые с учетом того что сурс 2 еще в бете) и алгоритм градиента там у габена нестандартный(не как в стандартном CSS)
панорама имба конечно но там пиздец сколько оффсетов хуетов индексов и прочего дерьма( = фиксить при апдейтах сложно. а апдейты там частые с учетом того что сурс 2 еще в бете) и алгоритм градиента там у габена нестандартный(не как в стандартном CSS)
Эм. Ну, да. Ты можешь рендерить пикчи через панараму, окей.
Но я вижу, что ты делаешь через аймгуи, следовательно, представим, что завтра они переделают любую иконку, что-то еще - тебе заново надо анпакать и заливать в лаунчер, людям перекачивать, слишком много лишнего, нет? А что если ты возьмешь класс CBaseFileSystem, найдешь там вт функу на чтение и будешь читать? Ты получишь например vtex, но на том же github куча кода как из vtex перегонять в png. Не хочешь искать, зайди в panorama.dll. Там есть конвертер, почти точно такой же как в ксго. Если будет интересно - на юц найдешь связанные по этой теме треды. Типо ты находишь нужную пикчу - конвертируешь в памяти её в нужный формат, отдаешь Imgui.
Просто есть вещи которые я могу понять, зачем хранить на компе у юзера, например кастом партикли сделанные тобою, еще можно понять. Но пикчи. Как говориться, нипонял.
Эм. Ну, да. Ты можешь рендерить пикчи через панараму, окей.
Но я вижу, что ты делаешь через аймгуи, следовательно, представим, что завтра они переделают любую иконку, что-то еще - тебе заново надо анпакать и заливать в лаунчер, людям перекачивать, слишком много лишнего, нет? А что если ты возьмешь класс CBaseFileSystem, найдешь там вт функу на чтение и будешь читать? Ты получишь например vtex, но на том же github куча кода как из vtex перегонять в png. Не хочешь искать, зайди в panorama.dll. Там есть конвертер, почти точно такой же как в ксго. Если будет интересно - на юц найдешь связанные по этой теме треды. Типо ты находишь нужную пикчу - конвертируешь в памяти её в нужный формат, отдаешь Imgui.
Просто есть вещи которые я могу понять, зачем хранить на компе у юзера, например кастом партикли сделанные тобою, еще можно понять. Но пикчи. Как говориться, нипонял.
На самом деле всё супер-просто объясняется. Нужно было сию-минутное решение (читать: костыль), когда я доделал панель со скиллами. А дальше были более приоритетные задачи, и это как-то ушло на второй план.
Но, да, разумеется ты прав. И спасибо за подсказку, я давно хотел в эту сторону посмотреть. AFAIK в IVGuiPaintSurface есть загрузка картинок, а CBaseFileSystem у меня давно отревершена.
На самом деле всё супер-просто объясняется. Нужно было сию-минутное решение (читать: костыль), когда я доделал панель со скиллами. А дальше были более приоритетные задачи, и это как-то ушло на второй план.
Но, да, разумеется ты прав. И спасибо за подсказку, я давно хотел в эту сторону посмотреть. AFAIK в IVGuiPaintSurface есть загрузка картинок, а CBaseFileSystem у меня давно отревершена.