На камере Hasselblad X2D запустили Doom: для этого пришлось связать игровой движок со штатным интерфейсом

Разработчик Радиум Ван (Radium Wang) запустил движок Doom на среднеформатной камере Hasselblad X2D 100C. Нажатие кнопки спуска затвора отвечает за огонь по противникам, свайпы по экрану поворачивают Думгая, а встроенный динамик воспроизводит звук. Автор проекта опубликовал исходники.

Эксперименты разработчик проводил на первом поколении X2D 100C с прошивкой 4.2.0 сборки 24849. Камера оснащена 100-мегапиксельным сенсором и 3,6-дюймовым сенсорным дисплеем. Устройство поступило в продажу в 2022 году по цене в 8200 долларов без объектива.

Автор проекта обнаружил в прошивке 64-разрядную ARM‑платформу, Android API 28 и интерфейс на Qt 6.4.1 с Wayland. При этом Qt Quick встроен в штатную программу камеры, и отдельной библиотеки для запуска приложений в системе нет. Поэтому Ван разделил игру на независимый движок и отдельную страницу внутри интерфейса камеры. Для подключения загрузчика страницы использовали замену скомпилированного QML‑файла в памяти процесса без редактирования прошивки.

Проект построен на базе порта doomgeneric. Для вывода изображения, ввода данных и управления игровым циклом разработчик написал адаптер на языке C. Движок собрал с помощью Zig в статический исполняемый файл для ARM64.

Для передачи изображения используются файлы в оперативной памяти. Функция DG_DrawFrame() записывает кадр размером 320 × 200 пикселей во временный BMP и в конце меняет название на frame.bmp. Благодаря этому система не может прочитать недописанный кадр. После QML‑страница проверяет номер кадра, загружает новое изображение и растягивает его до соотношения сторон 4:3. Механизм работает по таймеру в 30 мс.

Управление реализовано также через файлы, но в обратную сторону. Интерфейс записывает состояния клавиш и смещения свайпов, а движок преобразует их в события. Мультитач позволяет одновременно двигаться и поворачивать.

Звуковой модуль считывает эффекты из WAD‑файла игры и формирует 16-битный стереопоток с частотой 48 кГц. Система буфера в общей памяти передаёт поток процессу, который «общается» напрямую с динамиком камеры. Устройство пока может воспроизводить только звуковые эффекты, поддержки музыки — нет.

Код проекта опубликован на GitHub по лицензии GPL. Готовый установщик для версии Doom под Hasselblad X2D разработчик не реализовал.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев