Публикация (фиксация) изменений содержимого окна
#include <screen/screen.h>int screen_post_window( screen_window_t win,screen_buffer_t buf,int count,const int *dirty_rects,int flags );
Composition
Manager
графической подсистемы Screen
осуществляет автоматическую ротацию доступных видео-буферов окна, сохраняя на первой позиции свободный видео-буфер.int
, содержащих координаты x1, y1, x2, и y2 прямоугольных областей, описывающих изменения в видео-буфере с момента предыдущего вызова данной функции. Массив dirty_rects должен содержать ровно count * 4
элементов типа int
.libscreen
Тип функции: Триггеры с перерисовкой
Выполнение данной функции приводит к тому, что результаты рендеринга содержимого видео-буфера становятся видимыми в пределах окна. Изменения, которые должны быть зафиксированы, характеризуются прямоугольными областями, определенными в свойстве функции dirty_rects.
В дополнение к областям, определенным свойством dirty_rects, Screen может принять решение о публикации всего содержимого видео-буфера. Screen
может извлекать данные из видео-буфера независимо от вызовов функции screen_post_window() (например, когда содержимое или параметры перекрывающего окна обновляются или когда окно является автономным и весь видео-буфер буден непрерывно считываться графическими устройствами до тех пор, пока не будет опубликован другой видео-буфер для замены текущего). Ваше приложение должно гарантировать пригодность содержимого видео-буфера (что в большинстве случаев соответствует неизменности контента) для чтения со стороны оборудования и последующего отображения до тех пор, пока не будет опубликован другой видео-буфер. Иными словами, операция публикации буфера определяет конкретный видео-буфер окна, к которому будет адресоваться Composition
Manager
из состава графической подсистемы Screen
.
screen_post_window() возвращает управление немедленно, если видео-буферы доступны и не установлен флаг SCREEN_WAIT_IDLE. Использование нескольких потоков или управление видео-буферами со стороны приложения при рендеринге с максимальной частотой обновления необязательны, поскольку вызов screen_post_window() не всегда блокируется, в отличие от эквивалентных вызовов в других графических подсистемах.
Если флаг SCREEN_WAIT_IDLE установлен, функция возвратит управление только после обновления изображения на экране. Обратите внимание на то, что содержимое окна не будет отображено графической подсистемой до тех пор, пока функция screen_post_window() не будет вызвана хотя бы один раз.
Вызов функции может приводить к изменению значения свойства SCREEN_PROPERTY_RENDER_BUFFERS окна. Если приложение использует несколько потоков, недопустимо чтение этого свойства другими потоками в то время, как один из потоков вызывает функцию screen_post_window() для того же самого окна. Если это все-таки случается, свойство SCREEN_PROPERTY_RENDER_BUFFERS будет с некоторой вероятностью возвращать устаревшую информацию, что может стать причиной появления артефактов при модификации содержимого окна. Публикация нового видео-буфера может приводить как к копированию информации, так и к смене активного буфера, в зависимости от предпочтений графической подсистемы. Используйте свойство SCREEN_PROPERTY_RENDER_BUFFER_COUNT для определения количества доступных окну для рендеринга видео-буферов.
Если count равен 0
, текущий буфер не будет опубликован и новое подмножество видео-буферов, готовых для рендеринга будет возвращено. Текущее состояние буфера кадров на экране не будет изменено.
ENOMEM
добавлен в ЗОСРВ
«Нейтрино»
редакции 2021
Графическая подсистема ЗОСРВ «Нейтрино», Screen
ЗОСРВ
«Нейтрино»
редакции 2020
Предыдущий раздел: Окна