суббота, 28 марта 2015 г.

xtreme3d.narod.ru

Вновь полноценно работает сайт http://xtreme3d.narod.ru, посвященный Xtreme3D, трехмерному движку для Game Maker. Как многим известно, я активно поддерживал этот движок в русскоязычной части Интернета с 2008 по 2011 г., создал не только сайт по нему, но и множество примеров использования Xtreme3D, работал над документацией по движку (которая так и не была закончена, но, тем не менее, является крупнейшим источником информации по нему).

Кроме того, в 2009-2011 годах силами нашего сообщества было предпринято несколько попыток переписать Xtreme3D заново, сохранив обратную совместимость. Этот проект так и не был завершен, но все исходники сохранились - любой желающий может продолжить начатое нами дело, либо использовать эту кодовую базу для создания собственного движка. 
Одно время у меня была даже идея написать свой собственный 3D-движок для Game Maker - по образцу Xtreme3D, но с более продуманной архитектурой и с учетом современных технологий. Эта инициатива также не имела успеха, но от нее тоже сохранились любопытные материалы, которые вскоре будут доступны на сайте всем желающим.

На сайте также есть подборка полезных утилит для разработчиков, многие из которых раритетны - больше вы их нигде не найдете. В ближайшее время на сайте появится новый большой раздел "Музей", в котором я планирую разместить архив раритетного ПО, мои старые наработки в Game Maker и разного рода другую историческую информацию.

пятница, 20 марта 2015 г.

Введение в D

На официальном википроекте D появилась хорошая вводная статья по языку на русском. Для начинающих программистов она, правда, не подходит - скорее, для тех, кто уже состоялся в одном из других C-подобных языков.

http://wiki.dlang.org/Reading_the_documentation_(in_Russian)

воскресенье, 15 марта 2015 г.

DGL без сборки мусора

На данный момент на D, к сожалению, нет полноценных игровых движков с ручным управлением памятью. И, если в общем случае с производительностью мы ничего сделать не можем (Benjamin Thaut, чтобы оптимизировать производительность игровых приложений, использовал модифицированный рантайм языка), то пусть хотя бы управление ресурсами будет детерминированным.
Новая ветка проекта DGL - gc-free - является попыткой достичь этого путем полного отказа от выделения динамической памяти через сборщик мусора. Вместо этого все классы  используют dlib.core.memory и dlib.container.array вместо оператора new и встроенных динамических массивов D.
В данный момент переписана примерно половина функциональности DGL, добавлено и много нового: например, новая система событий, поддержка многоязыкового ввода с клавиатуры и т.д.

воскресенье, 1 марта 2015 г.

dlib 0.5

Не так давно состоялось очередное крупное обновление коллекции библиотек dlib - вышла версия 0.5, наиболее значительным нововведением которой стала поддержка ручного управления памятью (РУП). Но - обо всем по порядку...
  • Новый модуль dlib.core.memory предоставляет средства для ручного выделения и высвобождения динамической памяти, независимые от сборщика мусора и основанные на malloc/free. Имеется поддержка структур, классов и массивов. При использовании классов рекомендуется использовать интерфейс ManuallyAllocatable и перегружать метод free, который ответственен за удаление объекта - в противном случае корректное удаление в некоторых случаях не гарантировано (например, при доступе через интерфейс или родительский класс).
  • Началась работа по переводу всей dlib на РУП. Так, загрузчики изрбражений (PNG, JPEG, TGA, BMP) в новой версии полностью независимы от сборщика мусора. Для этого активно используется паттерн абстрактной фабрики, ответственный за создание изображений  в памяти. Кстати, в загрузчике PNG значительно улучшена поддержка индексированных изображений, для них добавлена поддержка альфа-канала.
  • Кроме того, на РУП переведены некоторые контейнеры из dlib.container - BST, ассоциативный массив. Реализован полностью ручной динамический массив (dlib.container.array).
  • Еще одна новинка - ООП для структур (dlib.core.oop). Это экспериментальный модуль, реализующий для структур прототипный стиль ООП с поддержкой множественного наследования и параметрического полиморфизма. Полностью заменить классы он, конечно, не может, но окажется весьма полезен, если нужно создавать объекты с наследованием в стеке. В будущем планируется переписать некоторые внутренние механизмы dlib с использованием этой легковесной объектной системы.
  • В пакете dlib.math появилась поддержка дуальных кватернионов. Это частный случай алгербы Клиффорда, обобщение кватернионов на поле дуальных чисел. Их можно использовать, например, для описания движения тел в кинематике - один дуальный кватернион охватывает и перенос, и вращение. Кстати, реализация обычных кватернионов через инкапсуляцию теперь совместима с векторами.
  • Изменения коснулись и пакета вычислительной геометрии. Усеченная пирамида (dlib.geometry.frustum) теперь задается с нормалями ограничивающих плоскостей, указывающими наружу пирамиды. Подвергся изменению API проверки пересечения Frustum с AABB. Исправлены ошибки в реализации AABB и плоскости.