За 20 лет программирования как хобби у меня было множество разных поделок и экспериментов — здесь опубликована информация только о самых интересных и актуальных, которые легко собрать и протестировать.

MiniGL

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

Весь исходный код умещается в одном файле (<1000 строк), не считая бибилиотеки dlib и биндинга к SDL для вывода изображения. Можете использовать его для самообразования или как основу для собственного программного рендера.

К растеризатору прилагается пример игры от первого лица в стиле классических 2.5D-шутеров. Реализована проверка столкновений со стенами, отрисовка спрайта оружия и механика стрельбы.

https://github.com/gecko0307/minigl

WASM-WebGL

Мой эксперимент по созданию кроссплатформенного графического приложения на D, которое может быть скомпилировано в нативный код и WebAssembly, сохраняя при этом общую логику. Рендерит графику с использованием OpenGL 3.3 / WebGL 2.

https://github.com/gecko0307/wasm-webgl

GScript

GScript — это мой скриптовый язык и виртуальная машина к нему, которые уже много лет существуют в качестве рабочего прототипа. Язык напоминает D и JavaScript — это язык с фигурными скобками, динамической типизацией, поддержкой модулей и прототипной объектной системой.

Актуальной версией языка является GScript2. В этой версии была реализована поддержка прототипного ООП. Скрипты могут быть скомпилированы в промежуточное представление.

Пример кода на GScript2:

import "std/array.gs";

func main()
{
    var x = 10;
    var arr = [x, "foo", [1, 2, 3]];

    assert(arr is Array);
    assert(arr:length == 3);

    foreach (var i, v in arr)
    {
        writeln("%0: %1" % (i, v));
    }

    var arr2 = arr:flatten;
    assert(arr2:length == 5);
    writeln(arr2);
}

Wallet

Приложение для ведения персональных финансов. Написано на Python с использованием Chromium Embedded Framework.

https://github.com/gecko0307/wallet

Gecko’s Editor

Мини-редактор кода на D. Использует DLang UI в качестве UI-тулкита. Отличается встроенным diff в реальном времени на основе Myers Diff — внося изменения в файл, вы сразу видите разницу по сравнению с несохраненным оригиналом (или оригиналом из HEAD, если это git-репозиторий).

Есть также поддержка вкладок и всех базовых возможностей редактора, за исключением поиска и автозамены. Редактор без проблем открывает большие многомегабайтные файлы.

https://github.com/gecko0307/geditor

Xtreme3D 3.x-4.x

Xtreme3D — это весьма своеобразный проект с интересной многолетней историей и собственным сообществом. Его, на самом деле, сложно назвать «мини» 😀 Под этим названием с середины нулевых выпускается враппер библиотеки GLScene для Game Maker, скомпилированный в DLL-библиотеку. Изначально он был написан немецким программистом под ником Xception, но после выхода версии 2.0.2.0 автор, к сожалению, забросил свою разработку, и проект был подхвачен русскоязычным сообществом. Для дальнейшего развития Xtreme3D, мы решили переписать движок с нуля, сохранив обратную совместимость. На данный момент актуальной версией является уже Xtreme3D 4.0 на базе Delphi 10 и GLScene 2.2, совместимый с современными 64-битными версиями GameMaker (бывший GameMaker: Studio 2). Xtreme3D позволяет писать на GameMaker 3D-игры с относительно современной графикой и быстрым рендерингом. Есть также поддержка Python и C/C++.

Репозиторий проекта: https://github.com/xtreme3d/xtreme3d

Помимо всех версий Xtreme3D и дополнительных материалов к нему, на этом же сайте https://xtreme3d.ru мы сохранили и собрали воедино огромный архив всевозможных расширений, DLL-библиотек, движков и демок, относящихся к 3D-графике, а также полезных утилит, документации, бесплатных ресурсов и т.д. Не исключено, что все это кому-нибудь еще пригодится. Сайт является своеобразным музеем любительского геймдева нулевых.

Разработка под PlayStation

У меня есть уголок по программированию под PlayStation с использованием PsyQ SDK: https://psxdev.xtreme3d.ru/, а также собственная мини-библиотека PSXLib: http://github.com/gecko0307/psxlib.

Я продолжаю изучать SDK и документацию, надеюсь в ближайшем будущем выложить еще кое-какие наработки — в частности, движок игры-лабиринтника.

Mathom

В легендариуме Толкина словом «mathom» хоббиты обозначали то, что в общем-то, не нужно, но выкинуть жалко. Я так назвал репозиторий, куда складываю старый неактуальный код, представляющий исторический интерес:

  • DGL — мой старый 3D-движок, предшественник Dagon;
  • DIOS (бывший MyOS) — минимальное ядро операционной системы для x86, написанное на D. Представляет собой программу уровнем чуть выше «Hello, World» — умеет печатать текст в VGA-режиме, включает поддержку Multiboot. Система оформлена как Live CD, в качестве загрузчика используется GRUB. Тестировал в эмуляторе VirtualBox, на реальном железе не тестировал, так что сразу предупреждаю: никаких гарантий, запускайте на свой страх и риск;
  • Gefest — незаконченный Vulkan-фреймворк на D. С Vulkan я не продвинулся дальше вращающегося кубика, но сумел портировать простейшее приложение с использованием биндинга Derelict-Vulkan. Для создания окна и чтения пользовательского ввода используется SDL;
  • GScript — первая версия GScript;
  • Sparx — моя старая библиотека общего назначения, предшественница dlib.