Мини-проекты
За 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.