Сделал VarInt.
Начал Lua.
Добавил клёвые ассемблерные реализации математики и пачечных операций.
Сделал симплексный шум.
Добавил поддержку перекрытий MoveBits, и сделал Random.Open независимым от типа аргумента (⇒разрядности платформы).
Сделал Signed Distance Field.
Добавил кучи получше.
Хорошо, убедили, объектам GAPI нужен подсчёт ссылок.
Перевёл MultilevelLookup с Python-версии и сделал некоторые другие связанные с ним вещи, Parser вот.
Переделал строки на 0-индексацию.
Чекпоинт перед ZEROBASEDSTRINGS.
Сделал одиночные операции с битовыми полями (можно использовать как альтернативу индексам переменного размера!) и кривую Гильберта.
Сделал универсальный поиск пути, частично предусмотрел форматы картинок с дробной битностью, переделал разбор выражений на operator-precedence parser и искусственный стек.
Сделал кучу (heapq). И очередь скриншотов, т. к. много параллельно сохраняемых отбирают CPU у более важных вещей.
Теперь для случаев, когда переполнение должно быть предусмотрено, но происходит редко, можно использовать встроенную проверку переполнений вместо .Check*().
Сделал BigInt.
Сделал типизированные обёртки для хэш-таблиц и красно-чёрных деревьев.
Сделал красно-чёрные деревья.
Сделал хэш-таблицы.
Свернул вариативные записи в Math. Добавил CRC, WyHash и PCG128-64-DXSM :).
Убрал самые противные хелперы, а также LazyString, улучшил тесты (недостаточно) и математику.
Начал велосипедную базу Юникода. :D Сделал сон через MsgWait вместо Sleep. Чекпоинт перед попыткой убрать хелперы.
Сделал VecMask, решающую те же задачи, что bvec в GLSL. Хотел сделать унифицированную очередь в CompoundSink, но обосрался, попробую в другой раз.
Украл усовершенствование seed_seq у авторши PCG, начал жевалку PNG в стиле zlib и обёртку над GAPI.
Как оказалось на свежий взгляд, DoneBinding.CreatePerpetual — вообще единственный осмысленный сценарий для синглтонов, поэтому теперь они вместо костылей под BindingSet используют простой RobustList. Лол. Соответственно, DoneBinding переоформлен как (Session)DoneNode.
Для Session.pending и Session.BindOnDone больше не страшны новые задачи, возникшие в ходе ожидания старых. А специально для вечных синглтонов сделал DoneBinding.CreatePerpetual.
Переделал LazyGhost: теперь они не боятся финализации глобальных переменных и умеют бесследно выбрасываться компилятором. Добавил Zlib.
Перевёл LodePNG. :D Даже не то чтобы от хорошей жизни: ряд фатальных недостатков требовал устранения.
Починил сферы и добавил геосферы (зачем).
DimensionalPath для движения по траектории, теперь человеческий — характеризуемый типом, а не количеством измерений.
Сильно соптимизировал генерацию фрактального шума за счёт работы пачками вместо отдельных пикселей.
Noun — склоняемое существительное с грамматическими категориями, которым удобнее называть вещи, чем ad-hoc механизмами вроде nameGen.
Теперь Image можно обходить, помимо 2D-срезов, по MIP-уровням и слоям. Сделал генерацию мипов.
Сделал крутой способ упаковки кватернионов в 10-10-10-2 и базовую обёртку над GPU-текстурой. Исправил гонки в логе.
Перенёс и доработал *крутит колесо* FileWatch. Теперь они знают про рекурсивные слежения, наверное, более устойчивы к гонкам (лол, нет) и к изменениям из коллбэков.
Перенёс и доработал QuickLZ.
Перенёс нескучные MIDI, отделил BASS-плагины от их призраков. Сами призраки вместо прежнего Control'а теперь используют класс с виртуальным конструктором.
Перенёс BASS — плагины теперь являются призраками, как и основная библиотека. Функции MIDI поленился, сегодня доделаю.
Хэши и рандом.
Перенёс бенчмарки; переименовал FancyMessage в FancyString :).
Сделал массив индексов переменного размера, модели с динамической структурой вершины и КАНАЛАМИ — разными наборами индексов на одних и тех же вершинах, и FancyMessage со вложенностью и автоподсветкой.
— HTML-лог в несколько колонок!
Вынес RobustList из BindingManager, сделал захардкоженные ветки в Projection.
Теперь ограничение FPS может зависеть от частоты обновления экрана. Однажды может понадобиться управляемое заранее неизвестными параметрами, но тогда дёргать UpdateFPSLimit придётся пользователю.
Улучшил FancyMessage.Parse (и теперь она умеет вставлять другие FancyMessage!). Ухудшил Bindings. Исправил баг в LazyGhost.
Мелочи. Попробовал ускорить GDI/OpenGL-функции при помощи холостого вызова DescribePixelFormat на старте программы.
Добавил все нужные и ненужные векторы: (Vec2–4) × ((u)int8–64, float16–64), приложив некоторые усилия к тому, чтобы результат компилировался меньше чем за полминуты.
Более леденящие душу математические функции.
Клавиатура/мышка от 1 и 3 лица и полноэкранный режим. Ещё придумал зацикливать периоды.
Сделал OpenGL-окно :D, перенёс часть математики (матрицы/кватернионы/Transform) и СИЛЬНО оптимизировал.
Модификация списка биндингов во время обхода. Окно с поддержкой обновления по таймеру, помимо Sleep. Аутизм для EnumToString.
Предыдущее сообщение должно было звучать так: «Я всё понял.jpg. Ну, попробуем сначала».
Немножко починил таймеры: те, что с периодами, вообще нельзя закрывать в обработчике. (Ещё таймеры ResourcePool'а виснут, но с ними в другой раз разберусь).
Перенёс Format/IntFormat/FloatFormat в USystem.
Скиннинг теперь использует (сразу не догадался) комбинацию в одном преобразовании (1) обратного преобразования костью из исходной позиции (inverse bind), (2) прямого преобразования той же костью в актуальную позицию.
Настройки растеризатора теперь параметр DrawBatch, как и должно быть.
Исправил гонку в NewtonBodyTransformCallback, только из-за которой и казалось, что глючат деревья.
Ary теперь поддерживает RTTI и управляемые типы.
Флоатовый Equals по заветам https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/.
Ухудшил Tokenizer (чот Scanner очень медленно работает, потом разберусь).
kd-tree-v2 плохо работают, ну и ладно, потом доделаю.
Полуготовая визуализация kD-деревьев (доделаю —...
Запоминание параметров MIDI плеером по тому же ...
Полноценно переписать слежение за звуками на BA...
Моар рефакторинга манипуляций с массивами на од...
Исправил дедлок в ResourcePool.Deactivate и пад...
Хелперы!
WavPack в soundfont'ах.
Встроил прежнюю lang_amount (выбор формы множес...
Коль скоро @dynarray[0].field с выключенной ran...
Более-менее стандартизованные fpc.cfg.
Переписал MusicPlayer на таймеры.
Сделал автоматическое довоспроизведение освобож...
Переписал (ну и сломал) Sound & SoundNode. Дума...
Сделал FileWatch, можно автоматически перезагру...
Допереписывал на UintVec2. Надо будет атласы по...
Целочисленные векторы. Удобно, надо было раньше...
Добавил поддержку трёхмерных сжатых текстур (ве...
Допилил что хотел в DXT.
Теперь текстуры переворачиваются на лету при за...
Теперь можно подождать таска без дополнительных...
Если в очереди на выполнение висело более одног...
Внезапно, ReplaceVMT может не работать под WPO,...
( ´_ゝ`)
Формализовал некоторые безобразия с контейнерам...
Прикрутил красивенькие TaskDialogs.
Переписал пул ресурсов ещё раз, теперь без глюков.
Переписал ResourcePool на таймеры. Что-то оно д...
Разобрался с Thread Pool API из висты.
Пропатчил Lua на предмет пользовательской реали...
Переписал DLLoader на есключения (ну, правда, и...
Теперь флоаты преобразуются в строки на основе ...
Исправил mmap (там был почему-то ни разу не пой...
Поскольку при аварийном завершении приложения к...
Сделал key-value кэш для шейдеров, TODO: провер...
Сделал очередь команд, где их можно конструиров...
Полностью перешёл со старого пула строк на новы...
Заменил большую часть старых PoolString на новы...
FilePos & FileSize.