Sharfik писал(а):Читаю и суть вопроса не совсем ясна, что в конце. Наверно шифр для избранных.
Ну извиняюсь что  "не в стихах"...  

   Но если серьезно, то мне нужно что-то вроде "записи макроса", то есть запись событий от клавиатуры мышки (и прочих источников данных) в реальном  масштабе времени с последующим  воспроизведением . (Еще есть загвоздка в том, что часть событий работает только последовательно, а мне желательно сделать "перемотку" в обе стороны ) 
Если еще не понятно, то объясню более конкретно :
Сейчас я пишу 
управляемую 3D/VR техно демку, а раз она 
управляемая   значит не содержит заранее заданного сценария, а это и хорошо  и плохо . Хорошо, потому что  с ней можно провозится "в ручном режиме" и вообще использовать как полезную  утилиту, но плохо если я хочу просто показать  "возможности  технологии" и похвастаться достижениями.  А поскольку технодемка постепенно усложняется, то сходу четко показать ее возможности чем дальше тем сложнее (Получается эдакий "орган" на котором нужно сходу "слабать мурку" )     
Да, для "простого 3D" можно просто записать с экрана ролик  ....

(Запуск оп клику.)
Но во первых, это местами проблемно (в программе уже сейчас несколько окон с настройками + есть неизбежная потеря качества  ) а вторых демка рассчитана на поддержку VR, что вообще делает "плоскую" запись изрядно бессмысленной,  а если пытаться записывать "сферическое стерео"  это еще сложнее и файлы выходят чудовищными по размеру + такой ролик не  позволит показать работу программы в целом . 
Вывод прост: нужно сделать запись и воспроизведение  "полетов фантазии " в самой программе .
Добавлено спустя 44 минуты 21 секунду:Скалогрыз, спасибо за отзыв  и участие в мозговом штурме ! 
скалогрыз писал(а):Alex2013 писал(а):В моем проекте "Цифрова оптика" есть возможность записи и воспроизведения состояния, но это разумеется, не то что нужно мне сейчас ( как-то пробовал сделать там "анимацию" из набора "сэйвов состояния" вместо кадров но это как-то криво работает дискретно и без "ощущения полета" ) .
запись состояния это то, что тебе нужно.
при воспроизведении списка состояний, тебе просто нужно интерполировать результат, и тогда будет "ощущения полёта", потому что всё будет плавно.
 
В принципе мысль годная . Но как это совместить с кучей настроек и переключений режимов во "внешнем интерфейсе" программы  большой вопрос.   
Естественно, сохранять состояние "целиком" может быть избыточным. Но это уже вопрос к "движку".
Если в "движке" есть некоторые данные, которые можно надёжно интерполировать опираясь на предыдущее значение + время, тогда такие данные не нужно сохранять на "каждое состояние", а только в те моменты, когда эти данные меняются.
Количество данных не проблема( Все равно сильно меньше записи видео )  проблема в переключение режимов  и изменениях настроек, часть которых к "движку" вообще не относятся . То есть просто записывать координаты камеры и состояние движка может быть недостаточно.          
Как в видео кодировке, есть "ключевой кадр" (который по сути - картинка целиком), есть последующие слайды, которые "только изменения к ключевом".
Общий подход прост:
* снимать состояние на каждый "кадр" ("тик", "апдейт") движка
* сохранять те данные, которые невозможно надёжно интерполировать
* те данные, которое можно интерполировать, сохранять только с тем "кадрами", когда значение данных меняется/задано впервые.
По моем большая часть реализаций "записи ролика на движке" делается существенно проще! Просто записывается не состояние движка, а поток данных идущий от клавиатуры мышки и т.д.,  а при воспроизведении  записанный поток тупо подменяет реальный. (Запись состояния нужна  только одна и исключительно  для задания верной "стартовой позиции" )