Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОУК / 09 семестр / Книги и методические указания / Руководство программиста в Photon.doc
Источник:
Скачиваний:
364
Добавлен:
04.03.2014
Размер:
7.99 Mб
Скачать

Внеэкранные замки

В основном Вы будете использовать внеэкранные замки с указателями, которые Вы получили от функций PdGetOffscreenContextPtr(). Замки обеспечивают, что

  • Команды потока рисования не рисуют, пока внеэкранный контекст заперт

  • Память действенна, пока приложение её использует.

 Ваше приложение должно запирать внеэкранную память на как можно меньший промежуток времени. Если графическому драйверу требуется выполнить что-то с внеэкранной памятью, он пытается захватить замок себе, потенциально блокируя io-graphics на длительное время (результатом чего будет то, что экран может не обновляться, и пользователь решит, что компьютер завис).

Замки реализованы как семафоры в памяти совместного доступа между io-graphics и приложением.

Основными шагами использования внеэкранных замков являются:

  1. Создание замка для внеэкранного контекста вызовом функции PdCreateOffcreenLock(). Вы можете принять меры, чтобы, если сделан запрос на удаление внеэкранного контекста, когда он блокирован, приложению был отослан сигнал.

  2. Запирание внеэкранного контекста, когда это требуется, путём вызова функции PdLockOffscreen(). Вы можете при желании задать таймаут блокирования.

  3. Отпирание внеэкранного контекста путём вызова функции PdUnlockOffscreen().

  4. Когда Вам больше не нужен замок внеэкранного контекста, удаление замка вызовом функции PdDestroyOffscreenLock(). Когда Вы отлаживаетесь, Вы можете вызвать функцию PdIsOffscreenLocked(), чтобы определить, заперт ли или не заперт внеэкранный контекст в настоящий момент.

 Если Вы заперли контекст, вызовите функцию PdLockOffscreen(), чтобы отпереть его, перед тем, как удалить замок или освободить внеэкранный контекст.

Поддержка альфа-сопряжения

Альфа-сопряжение – это технология прорисовки прозрачности при рисовании какого-то объекта. В этой технологии комбинируется цвет рисуемого обьекта (источник) и цвет чего-то того, на чём сверху рисуется объект (получатель). Чем больше объём цвета источника, тем более непрозрачным выглядит объект.

Математически фактор смешения представляет из себя вещественное число в диапазоне от 0 до 1 включительно. В Photon микроGUI этот фактор хранится в 8 битах, т.е. масштабирован в диапазоне от 0 до 255 включительно.

32-битовый цвет создаётся из четырёх 8-битовых каналов: альфа, красный, зелёный и синий. Эти каналы представлены как (А, R, G, B). При ссылке на источник, каналы обозначаются как As, Rs, Gs и Bs; для получателя они Ad, Rd, Gd и Bd. Альфа-сопряжение примитивов драйвера поддерживает только базовое непрозрачное сопряжение с сопряжением источника:

(As, As, As, As) + ((1, 1, 1, 1) - ( As, As, As, As)).

Альфа-сопряжение может быть использовано двумя способами:

  • Как глобальный фактор, применяемый на каждый пиксель источника

или

  • С картой, указывающей альфа-сопряжение для каждого отдельного пикселя. Альфа-карта "подцеплена" к началу Вашей команды прорисовки и является "черепичной", если размеры карты меньше, чем размеры операции прорисовки.

Функции включают:

PgAlphaOff()

Выключение операций альфа-сопряжения

PgAlphaOn()

Включение операций альфа-сопряжения

PgAlphaValue()

Извлечение альфа-компонента из значения цвета

PgARGB()

Преобразование значений альфа, красного, зелёного и синего в комбинированный формат цвета

PgSetAlpha()

Детальная установка параметров альфа-сопряжения

PgSetAlphaBlend()

Простая установка параметров альфа-сопряжения