останнім часом на міжнародних demoparty в обов’язковому порядку присутня номінація, яка спеціально створена для того, щоб залучати нових (або давно не з’являються) програмістів, і дозволяє робити демо без оглядки на будь-які обмеження. Обмежень в такій номінації на платформу, технології, розмір просто відсутні. Твори на чому можеш і як хочеш! умова тільки одна: в даній номінації демо може містити тільки один ефект, іншими словами, дозволена тільки одна сцена. На фестивалі cc2021 була така номінація, називалася вона one scene demo compo (combined).

про минуле… останній раз, коли я писав демо для demoparty-це був 1999 рік. Так, 22 роки тому в м ростов-на-дону проходила demoparty paradox-99 . Тоді я зробив відразу 2 демо: spear на номінацію 512 byte і storm на номінацію 256 byte. Демо storm писалася удвох з максимом журовичем: максим робив ефект хвилюється моря, а я додавав звук. Це була перша в світі демо розміром 256 byte зі звуком для платформи pc. Зараз вже навчилися робити демо розміром 64 byte зі звуком, але тоді засунути в 256 byte і графіку і звук – це було щось немислиме. Загалом, згадуючи про старий демосценерський досвід, я вирішив зробити нове демо для demoparty cc2021, щоб підтримати вітчизняну демосцену.

Так як я користуюся ос linux, то демо вирішено було робити за допомогою кроссплатформенних інструментів. А це означало, що для графіки слід використовувати opengl. Робити графіку на процесорі в часи, коли існують 3d-прискорювачі і шейдери, мені не дуже хотілося, тому я вирішив одним махом вирішити дві проблеми: вибрати кроссплатформенний фреймверк для шейдерів і знайти готову обв’язку по створенню контексту малювання 3d через opengl. Цим рішенням стала кроссплатформенная утиліта bonzomatic з відкритим вихідним кодом.

Утиліта bonzomatic призначена для проведення live coding compo (shader showdown), і не зовсім підходила для програвання демо: наприклад, в ній при запуску відразу відображається редактор тексту з кодом шейдера. Тому я форкнув бонзоматік і додав в нього підтримку трьох опцій: відключення показу коду шейдера при запуску, відключення курсора мишки, щоб він не заважав перегляду, настройка виходу по кнопці esc, як того вимагають правила compo. Далі була справа техніки: нарізка текстур, написання glsl шейдера для сцени, прикручування програвання музики в тлі.

В результаті з’явилося демо retrogram, яке зайняло i місце в one scene demo compo:

Дивитися live відео на youtube

Разом зі мною перше місце розділив товариш norduk, який відомий в інтернетах по стримах з проходженням ігор на ретроплатформах zx spectrum і радіо-86рк. Його гіпножаба зворушила серця всіх спектрумістів, присутніх на demoparty:). Однакова кількість очок-два перших місця, і таке буває.

У момент показу демо виникло відразу дві проблеми: новомодна картка nvidia rtx 2080 super не захотіла розуміти шейдери, прекрасно працюють на старіших картках nvidia, radeon і intel під win і lin (було заздалегідь протестовано чотири конфігурації), і плата захоплення не захотіла видавати зображення на проектор. Загалом, перше враження не вдалося, але організатори швидко підметилися і показали демо через hdmi з мого ноутбука з давньою видюшкой intel hd graphics 4000, яка для демосцени не підходить від слова “зовсім”, але яка якимось дивом видавала стерпний fps.

Готову збірку retrogram можна завантажити з офіційної сторінки retrogram на цьому сайті. Вихідні дані доступні на github https://github.com/xintrea/retrogram. Ця збірка містить підсумкову версію retrogram, що працює на gpu radeon, intel, nvidia в операційних системах windows 7/10 і linux debian 10.