← На главную

На Linux: проект 3DMMEx портировал Microsoft 3D Movie Maker

11.05.2026 17:17 · hackernews

Автор проекта 3DMMEx смог запустить старую программу Microsoft 3D Movie Maker нативно на Linux. Над форком 3DMMEx, где исходный код называется «Socrates», авторы поработали более 18 месяцев. Проект добрался до важной вехи: 3DMMEx стал первым известным вариантом 3D Movie Maker, работающим за пределами Windows. Источник, опубликованный Майкрософт в мае 2022 года с лицензией MIT, включал в себя код компилятора, разработчики инструментов и предварительно рендеренные активы. Исходные данные были достаточно полными для сборки собственных версий 3DMOVIE.EXE. Ключевой особенностью кодовой базы 1995 года стал высокий уровень качества: код хорошо закомментирован, стиль согласован, а проверочные условия (assert checks) встречаются на каждом шагу. Несмотря на это, портинг оказался сложным из-за использования нестандартного C++, встроенного x86-кода, а также зависимостей от Win32 API.

Авторы столкнулись с трудностями при компиляции на 64-битных системах из-за предположений относительно размеров указателей, а также с необходимостью переписывать статические библиотеки BRender и AudioMan. Бесполезный для Linux код AudioMan, тесно связанный со звуковыми API Windows, было решено не переносить. Вместо этого внедрили модуль воспроизведения Wave через miniaudio, что также решило проблему кроссплатформенного ввода звука. Хэнды-ролленый ассемблер в критических функциях памяти и сжатия заменили на оптимизированные реализации на C++. Это не только устранило архитектурные барьеры, но и позволило использовать современные memcpy/memmove из C-рантайма. Для упрощения отладки переписали устаревшие тесты на Google Test и написали визуализаторы NatVis для отладчика Visual Studio, чтобы правильно отображать кастомные типы данных.

Главный вызов заключался в замене графического интерфейса на основе Win32 на SDL. В отличие от простой замены функций Win32 на SDL, некоторые операции, например управление шрифтами или обработка горячих клавиш, требовали полной переработки логики. SDL не умеет перечислять шрифты напрямую, поэтому реализовали это самостоятельно для каждой платформы. Также пришлось добавить конвертацию в UTF-8, так как оригинальная программа работала с кодировками CP1252. Для работы в среде Linux команда подключила FluidSynth для MIDI и GStreamer для проигрывания сцен, а также написала модули поддержки POSIX. Основная проблема, с которой ещё предстоит справиться — управление мышью при перетаскивании объектов. Авторы планируют выпустить бинарные сборки для популярных дистрибутивов, хотя пока проект доступен только в виде исходного кода. Работа над кроссплатформенным портом продолжается, и авторы ждут помощи сообщества.

Читать оригинал →