Решил продолжить работу над редактором уровней, который ранее делал на основе GTK. Сейчас связываться с GTK для этой задачи уже как-то не хочется, поэтому решил написать для него собственный графический тулкит с использованием OpenGL. На данный момент готова оконная система, навигация по сцене и манипулятор для перемещения объектов.
dgl
Обновление всех проектов
На днях обновились библиотеки dlib, dmech, DGL и игра Atrium.
- В коллекции библиотек dlib 0.6.0 значительно улучшен декодер JPEG, добавлена поддержка новых типов прореживания и APP-маркеров. Улучшено управление памятью (удалять теперь объекты можно через интерфейсы и родительские классы), добавлены независимые от сборщика мусора реализации классов изображений и файловых потоков. В пакете dlib.math появилась реализация некоторых идиом комбинаторики (dlib.math.combinatorics).
- Физический движок dmech 0.2.0 включает необходимые изменения для поддержки dlib 0.6.x. Также к движку теперь прилагается небольшая документация в виде уроков.
- DGL/GC-free, независимая от сборщика мусора ветка проекта, теперь тоже переведена на dlib 0.6.x.
- Вышла первая альфа-версия Atrium (0.0.1a). Релиз, главным образом, обозначил перевод игры на последние версии вышеперечисленных библиотек. Есть готовые сборки для Windows и Linux.
DGL без сборки мусора
На данный момент на D, к сожалению, нет полноценных игровых движков с ручным управлением памятью. И, если в общем случае с производительностью мы ничего сделать не можем (Benjamin Thaut, чтобы оптимизировать производительность игровых приложений, использовал модифицированный рантайм языка), то пусть хотя бы управление ресурсами будет детерминированным.
Новая ветка проекта DGL — gc-free — является попыткой достичь этого путем полного отказа от выделения динамической памяти через сборщик мусора. Вместо этого все классы используют dlib.core.memory и dlib.container.array вместо оператора new и встроенных динамических массивов D.
В данный момент переписана примерно половина функциональности DGL, добавлено и много нового: например, новая система событий, поддержка многоязыкового ввода с клавиатуры и т.д.
Новая ветка проекта DGL — gc-free — является попыткой достичь этого путем полного отказа от выделения динамической памяти через сборщик мусора. Вместо этого все классы используют dlib.core.memory и dlib.container.array вместо оператора new и встроенных динамических массивов D.
В данный момент переписана примерно половина функциональности DGL, добавлено и много нового: например, новая система событий, поддержка многоязыкового ввода с клавиатуры и т.д.
Система освещения в DGL

Метод основан на рендеринге каждого объекта с учетом лишь нескольких ближайших источников света (в связи с ограничениями OpenGL — не более 8 штук на объект; на практике редко бывает нужно более 3-5). Движок сортирует источники света в порядке убывания яркости относительно текущего объекта, выбирает наиболее яркие и обновляет соответствующим образом контекст OpenGL.
На скриншоте показан пример использования этой системы в сцене со 100 источниками света и >100 объектами.
Итоги года
Вот и пролетел еще один год — самое время подводить итоги по проделанной работе!
- Вышли подряд нескольно новых версий dlib (0.3 и 0.4). Появилась поддержка абстрактных потоков ввода/вывода, а также платформонезависимый интерфейс файловой системы и его реализации для Windows и POSIX. Пакет обработки изображений теперь поддерживает JPEG, TGA и BMP, распараллеливание, HDRI. В пакете линейной алгебры состоялся серьезный рефакторинг матриц, появилась поддержка инверсии через LU-разложение.
- Было выпущено 6 номеров электронно-познавательного журнала «FPS» (№№ 28, 29, 30, 31, 32, 33). Появился новый сайт проекта (http://fps-magazine.cf). Также «FPS» теперь доступен в качестве мобильного приложения для Android и iOS. Кстати, в феврале 2015 года журналу исполняется уже 7 лет!
- Вышла игра 2048х2 — клон 2048 для двух игроков.
- Улучшен физический движок dmech: реализован новый кэш контактов, добавлена поддержка составных тел, улучшена поддержка ограничений, добавлены статические тримеши, поддержка raycast и игровой кинематики.
- Графический движок Atrium теперь развивается как самостоятельный проект — DGL. Это объектно-ориентированная надстройка над OpenGL, SDL и Freetype с собственной системой событий, виртуальной файловой системой с поддержкой ZIP-архивов, своим форматом хранения сцен, поддержкой шейдеров, мультитекстурирования, скелетной анимации, выводом текста в UTF-8, а также встроенными средствами интернационализации.
- Разработан скриптовый язык GScript — минималистичный императивный язык с динамической типизацией, идейно близкий к D, JavaScript и Python. GScript можно будет использовать в качестве скриптовой системы в игровых движках.
- Вышла новая версия системы сборки проектов Cook 2.0.1 — с новой системой аргументов командной строки, обновленным парсером импортов, поддержкой внешних зависимостей (в том числе из Git-репозиториев), улучшенной системой конфигурации.
- Обновилась страница проекта Atrium.
Поддержка IQM в DGL

IQM спроектирован в качестве замены MD5 известным разработчиком Ли Сальцманом, лидером проектов Sauerbraten, Tesseract и ENet. В настоящее время формат используется многими свободными играми и движками, в том числе Sauerbraten, DarkPlaces, Alien Arena, Xonotic и Warsow.
Формат бинарный, не привязан к какому-либо движку или графической технологии, легко читается и записывается. Существует полнофункциональный экспортер в IQM для Blender, что делает этот формат идеальным выбором для открытых игровых проектов.