gf_layer_attach()

Подключение к слою

Прототип:

#include <gf/gf.h>
int gf_layer_attach( gf_layer_t *player,
gf_display_t display,
unsigned layer_index,
unsigned flags );

Аргументы:

player
Указатель на структуру gf_layer_t, где функция сможет сохранить дескриптор слоя.
display
Дескриптор дисплея, владеющего подключаемым слоем. Дескриптор возвращает функция gf_display_attach().
layer_index
Иднекс подключаемого слоя. Индексация слоев начинается с 0. Дисплеи всегда содержат хотя бы один слой.

Note: При использовании эмуляторов слоев или композитной оконной подсистемы Screen индексация слоёв становится более сложной (см. примечание ниже).

flags
Флаги, определяющие ход операции:
GF_LAYER_ATTACH_NODEFAULTS
при установке параметры подключаемого слоя не будут сброшены в исходные значения.
GF_LAYER_ATTACH_PASSIVE
флаг позволяет подключиться к слою даже в том случае, если он был подключен в другом процессе. По умолчанию использование слоя в нескольких процессах запрещено. Только один процесс может владеть слоем, но при использовании данного флага другие процессы смогут изменять его параметры. Например, владелец управляет потоком выводимой в слой информации, а другие процессы настраивают размер и позицию слоя. При использовании нефвно будет добавлен флаг GF_LAYER_ATTACH_NODEFAULTS.
GF_LAYER_ATTACH_NOAUTODISABLE
позволяет слою оставаться активным после отключения от него процесса-владельца. Данный флаг игнорируется при установке GF_LAYER_ATTACH_PASSIVE. По умолчанию io-display деактивирует слои в момент отключания клиентского приложения. Это осуществляется явно в функции gf_layer_detach() или неявно при терминировании процесса или использовании функции gf_dev_detach().

Библиотека:

gf

Описание:

Функция позволяет приложению подключиться к слою указанного в параметре display дисплея. Возвращаемый укзатель player позволяет осуществлять дальнейшие манипуляции со слоем.

Если в качестве flags передается значение 0, некотрые параметры слоя сбрасываются в исходные знчения:


Note: Если производится вызов gf_layer_attach() для уже используемого слоя, рекомендуется установать флаг GF_LAYER_ATTACH_NODEFAULTS для предотвращения сброса его параметров. Если подключаемый слой выключен и используется флаг GF_LAYER_ATTACH_NODEFAULTS, то при подключении слой останется отключенным и может потребоваться его принудительное включение посредством gf_layer_enable().

Для получения информации о возможностях подключаемого слоя используйте функцию gf_layer_query().


Note: При использовании эмуляторов слоев или композитной оконной подсистемы Screen индексация слоёв становится более сложной.

Так, например, в окружении Screen слои с минимальными индексами обычно соответствуют виртуальным слоям, эмулируемым композитно. Точное их число зависит от настроек оконной подсистемы. Старшие индексы соответствуют аппаратным слоям дисплея, причем, первым из них владеет оконная подсистема. В этот слой производится вывод композитного изображения оконной подсистемой и доступ к нему со стороны прикладных приложений может приводить к нежелательным эффектам.


Возвращаемое значение:

GF_ERR_OK
Успешное завершение.
GF_ERR_MEM
Ошибка выделения памяти.
GF_ERR_PARM
Индекс слоя выходит за границы допустимых значений для указанного дисплея, либо значение параметра player или display равно NULL
GF_ERR_INUSE
Слой уже используется, требуется наличие флага GF_LAYER_ATTACH_PASSIVE.
GF_ERR_IODISPLAY
Ошибка коммуникации с io-display. Следует проверить запущен ли в настоящий момент сервер io-display. Вывод sloginfo может содержать дополнительную информацию.

Классификация:

Графическая подсистема ЗОСРВ «Нейтрино», Graphics Framework

Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Предостережения:

При использовании флага GF_LAYER_ATTACH_NOAUTODISABLE ни одна из поверхностей, созданных приложением, не будет освобождена автоматически при терминировании приложения. В этом случае, во избежание утечек памяти, приложение должно удалять поверхности явно, используя gf_surface_free().

Тематические ссылки:

gf_display_attach(), gf_layer_detach(), gf_layer_disable(), gf_layer_enable(), gf_layer_query()




Предыдущий раздел: GF API