Представлен проект DoomPDF — Doom в PDF в браузере
Разработчик под ником ading2210 представил проект DoomPDF — это Doom в PDF в браузере. Код написан на C и опубликован на GitHub. Игровой PDF-файл открывается только в браузерах на базе Chromium, использующих движок PDFium.
«Можно было бы ожидать, что файлы PDF будут состоять только из статических документов, но, как ни странно, формат файла PDF поддерживает Javascript с собственной отдельной стандартной библиотекой. Современные браузеры (Chromium, Firefox) реализуют это как часть своих движков PDF. Однако API, доступные в браузере, гораздо более ограничены.
Полная спецификация для JS в PDF была реализована только Adobe Acrobat, и она содержит некоторые нелепые вещи, такие как возможность выполнять 3D‑рендеринг, делать HTTP‑запросы и обнаруживать каждый монитор, подключенный к системе пользователя. Однако в Chromium и других браузерах была реализована только крошечная часть этой поверхности API из‑за очевидных проблем безопасности. Благодаря этому мы можем выполнять любые вычисления, которые захотим, просто с очень ограниченным вводом‑выводом.
Код C можно скомпилировать для запуска в PDF с использованием старой версии Emscripten, которая нацелена на asm.js вместо WebAssembly. Затем всё, что нужно, — это способ получить ключевые входные данные и буфер кадра для вывода.
Вводные данные довольно просты, поскольку движок PDF Chromium поддерживает текстовые поля и кнопки. Однако получить красивый и достаточно быстрый буфер кадра — гораздо более сложная задача.
Предыдущие интерактивные проекты PDF, которые я видел, использовали отдельные текстовые поля, которые переключались между собой для создания отдельных пикселей. Однако разрешение Doom составляет 320×200, что означало бы, что тысячи текстовых полей должны переключаться
Читать на habr.com