[ SunDog Engine
  Window Manager ]


Основы

1. Реальное окно приложения имеет размеры real_window_width и real_window_height (в пикселях конкретного устройства).

2. Далее, при рисовании, мы имеем дело только с виртуальным экраном (screen), который ограничен  реальным окном и может иметь свои собственные параметры (разрешение, размер пикселя и т. д.).

3. Для перевода контента экрана на поверхность реального окна используется функция device_redraw_framebuffer() (переход на следующий кадр).
Возможны случаи, когда контент экрана переводится сразу же (прямой доступ к видеопамяти).

4. Окно (sundog_window) — объект графической системы SunDog, основа интерфейса приложения.
Внутри движка их может быть сколько угодно.
Все они будут отображаться в рамках виртуального экрана, не выходя за пределы реального окна.
Окна рисуются по очереди: сначала дальние (стоят первыми в массиве), потом ближние (передний план).
Окно имеет внутри набор регионов, в которых разрешается рисовать.
При изменении структуры интерфейса происходит пересчет всех регионов всех окон приложения (функция recalc_regions()): при этом сначала рассчитываются регионы передних (последних в массиве) окон.

5. Есть несколько примитивных функций (device_draw_line(), device_draw_frect(), device_draw_image()), рисующих прямо на поверхности экрана.
Но более сложное рисование происходит сначала внутри буфера окна (через подсистему WBD), а потом в виде картинки переносится на экран.


[ Способы отрисовки контента на виртуальном экране ]

1. Стандартный
Сохранение содержимого экрана после device_redraw_framebuffer().
screen_buffer_preserved = true;
Рисование происходит исключительно в рамках региона конкретного окна.

2. Альтернативный
Содержимое экрана может теряться после device_redraw_framebuffer().
screen_buffer_preserved = false;
Мы не можем рисовать в регионе одного окна, оставляя другие окна в покое, т. к. их контент может быть нарушен при переходе на следующий кадр.
Поэтому приходится перерисовывать все окна приложения в каждом кадре.
