Comments 11
Это приводит к тому, что программа может продолжать выполнение, игнорируя возникшую ошибку, что может вызвать некорректное поведение.
Я, кажется, догадываюсь, как там assert(0) появился в следующей строчке :)
Фрагмент 7 (О1, О2) : почему нельзя сделать поляпропертис табличными, в файл кидать таблицы и читать потоком поблочно?, циклов не будет будут поточныеитераторы поидее
тоесть перевести всё в блоки не в getchar
если всё в строке или строках есть split
без проверки(в годболте) по чуйке увидел, просто визуально показалось что можно улучшить
а извиняюсь может гетчар и лучше
Скрытый текст
std::ifstream file(filename);
// Find the bitmap file's size
file.seekg(0, std::ios_base::end);
std::istream::pos_type fileSize = file.tellg();
file.seekg(0);
std::vector<unsigned char> b;
b.resize((fileSize));
std::copy(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>(), b.begin());
почему-то об этом подумал
просто по закону сериализации все длины должны быть известны (длинна наименования -какоето наименование блоков по назначению - число блоков [[блокN[[число] - [данные]]])
как будто рекурсия но там можно в цикл превратить по известным значениям
наименование где-то было присвоено (посчиталась длинна в этот момент), в блоке что-то написали (длинна посчиталась в этот момент)
Копипаста
Фрагмент N1
Предупреждение PVS-Studio: V501_ There are identical sub-expressions 'irRequest.usage.type' to the left and to the right of the '==' operator. irGraphBuilder.cpp 719_
Это из Дагора перекочевало (было), но там исправили (стало).
Фрагмент N3
Предупреждения PVS-Studio:
V570_ The 'material->_textureSlots' variable is assigned to itself. CCMaterial.cpp 527_
V570_ The 'material->_textureSlotIndex' variable is assigned to itself. CCMaterial.cpp 528_
Это код cocos2d-x, т.е. 3rdParty.
Фрагмент N5
Предупреждение PVS-Studio: V637_ Two opposite conditions were encountered. The second condition is always false. Check lines: 711, 714. entityManager2.cpp 711_
В коде присутствует логическая ошибка, которая может ввести в заблуждение. Рассмотрим детали:
Условие if (EASTL_UNLIKELY(result != RequestResources::Loaded)): оно проверяет, что результат не равен RequestResources::Loaded. Если это условие истинно, значит, ресурсы не загружены.
Реализация createEntitySync()
в Дагоре, на первый взгляд, такая же:
EntityId EntityManager::createEntitySync(template_t templId, ComponentsInitializer &&initializer, ComponentsMap &&map)
{
/*,,,*/
if (DAGOR_UNLIKELY(result != RequestResources::AlreadyLoaded))
{
#if DAECS_EXTENSIVE_CHECKS
if (result == RequestResources::Loaded)
{
/*,,,*/
}
#endif
if (result == RequestResources::Error)
{
/*,,,*/
}
}
/*,,,*/
}
Но есть нюанс, перечисление RequestResources помимо константы Loaded
там содержит еще и AlreadyLoaded
(с ним и происходит сравнение сначала). Тогда как в Nau в этом же перечислении AlreadyLoaded нет. Отсюда может быть и ошибка.
Фрагмент N6
Предупреждение PVS-Studio: V668_ There is no sense in testing the 'ret' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error. asyncWrite.cpp 363_
В этом коде происходит проверка указателя ret на nullptr после вызова new
В Дагоре create_async_writer()
реализована точно также, только проверка с delete и обнулением завернута в макрос del_it. В Nau этот макрос просто развернули.
Фрагмент N7
Фрагмент N8
Фрагмент N9
Это опять код cocos2d-x. Обратите внимание на названия файлов, начинающихся на "CC" (типа CCLayer.cpp) - это все исходники кокоса. Добрая часть предупреждений на кокос2д.
если большая часть из встройки блин база получается, я как-то писал себе утилку, которая сканит мои файлы проекта С++ и даёт статистику и тоже с этим столкнулся, приходилось ради анализа копировать папку
На правах оффтопа и бесполезных фактов.
Когда боролся (да и сейчас борюсь) с DX12, я в образовательных целях изучал исходники DagorEngine и NauEngine, чтобы боевой код посмотреть, ну и как серьезные люди с в этим api работают и код оформляют, а то вдруг мне учебные фреймворки и всякие туториалы дичь втирают.
И почти сразу наткнулся на dag_comPtr.h с замечательным комментарием:
// copy paste (with some small changes) from wrl/client.h
// don't blame me for the stupid shit of this...
в Nau он тоже перекочевал.
тоже база, https://learn.microsoft.com/ru-ru/cpp/cppcx/wrl/comptr-class?view=msvc-170
этот птр рассматривается в рабочем туториале(тоесть если повторить будет работать), который в ютубе единственный, есть еще книги на амазоне но там придётся внимательно смотреть на содержание (эх правда версия там 11)
этот птр так же используется в улучшенном варианте апи виндовс по загрузке текстур, ну и в исходниках майкрософт можно посмотреть по мини движку на 11 на 12 не знаю есть ли
этот птр рассматривается в рабочем туториале(тоесть если повторить будет работать), который в ютубе единственный, есть еще книги на амазоне но там придётся внимательно смотреть на содержание (эх правда версия там 11)
Вникать в DX12 по видео, КМК, не очень благодарная затея. Видео на русском я видел, но сложилось впечатление, что автор сам недавно начал его изучать и повторял дословно за документацией и/или чуть модифицировал код HelloTriangle из DirectX-Graphics-Samples.
Хотя нового-то особо и придумывать действительно не надо.
Насчет Microsoft::WRL::ComPtr
- он уже в книге Фрэнка Луны по DX12 фигурирует, а ей почти десять лет (вот из репозитория автора с исходниками из нее). После самописных макросов/шаблонов SafeRelease() - это наверное удобная вещь для работы с COM, если работа с ним вообще может считаться удобной.
понял вас, я делал по PardCode повторил работало, дальше как глянул на код пока не хочется с таким кодом взаимодействовать, я немного по другому пытаюсь, и ушел на OpenGL, потом на С изза математики ( отговорка странная, но пока нормально всё ), меня отпугивает усложненность апи на dx11/12, поэтому пока решил уверенно постич гл
по моим наблюдениям есть некая усредненная последовательность, чуть упрощает начальное вхождение в 3д с последующей реализацией хотябы малюсенькой демки
я и вулкан на С смотрел по видео, смотря как проще воспринимать, правда потом всё равно возврат к началу, в то с чем проще и где можно вникнуть в базовые вещи
вертекс, нормаль, цвет, свет, базовая математика - грубо говоря, откуда появилась геометрия на екране, террейн, ходить камерой по террейну, скайбокс, далее моделинг, ригинг, порт моделек, и анимации. вот потом после этого порт в другое апи, просто потомучто в гл надо 1 буффер на треугольник и 1 команду и можно отследить весь процесс
моделинг/ригинг по желанию, ригинг скорее всего ближе к моделинг, помойму ригинг с ИК в блендере, я его пока тоже обхожу стороной, но у меня это компенсируется моделингом, тоесть мне пока проще подвигать боны, визуально, чтобы она напоминала о том что нужно
ну тоесть риг я научился делать, но с ИК пока нет желания работать, пока нормально Т позу или idle пошевелить руками визуально в блендере, професионально конечно надо через ИК, ну тоесть сделать модельку и зариговать её, потомучто если дальнейшие планы по созданию контента демки, в риг-аддоне не все существа есть
Первая часть исследования Nau Engine