Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйверы и оборудование дисплея не требуются для поддержки многоплановых наложений. Однако для обеспечения поддержки многопланового наложения оборудование должно соответствовать следующим требованиям:
- Оборудование должно поддерживать неперекрывающихся плоскостей:
- Одна плоскость может охватывать одну часть экрана, в то время как другая плоскость может охватывать другую, взаимоисключаемую часть экрана.
- Если какая-либо часть экрана не покрыта плоскостью, оборудование должно отсканировать черный цвет для этой области. Оборудование может предполагать, что есть виртуальная плоскость в нижнем порядке z , заполненная черным цветом.
- Оборудование должно поддерживать перекрывающиеся плоскости:
- Оборудование должно иметь возможность включать или отключать альфа-наложение на уровне. (Альфа-смешивание — это метод, при котором цвет в исходном растровом рисунке сочетается с цветом в целевом растровом рисунке для создания нового растрового изображения назначения.)
- Необходимо поддерживать смешивание между плоскостями с помощью предварительно умноженного альфа-канала.
- Если активен только один целевой объект вывода, активные выходные данные должны поддерживать многоплановые наложения. В режиме клонирования, где одновременно активны несколько выходов, оборудование не должно сообщать о том, что оно поддерживает многоплановые наложения, если только все активные выходы не поддерживают многоплановые наложения.
- Цепочка буферов диспетчера окон рабочего стола (DWM) (плоскость 0) должна иметь возможность взаимодействия с другими плоскостями наложения.
- Все плоскости должны быть включены и отключены, включая плоскость 0 (цепочка буферов DWM).
- Все плоскости должны поддерживать отсечение источника и назначения, включая плоскость 0 (своп-цепочку DWM).
- По крайней мере одна плоскость должна поддерживать сжатие и растягивание независимо от других плоскостей, которые могут быть включены.
- Плоскости, поддерживающие масштабирование, должны поддерживать как билинейную фильтрацию, так и качество фильтрации, которое лучше, чем билинейное.
- По крайней мере одна плоскость должна поддерживать эти форматы YUV (дополнительные сведения см. в разделе Диапазоны форматов YUV в Windows 8.1):
- Преобразование матрицы ITU BT.601 и BT.709 YUV в RGB для форматов YUV.
- Как обычный (или студийный) яркость YUV (16–235) и яркость YUV в расширенном диапазоне (0–255).
- Оборудование должно обрабатывать следующие сценарии блокировки регистра:
- Все атрибуты на уровне (адрес буфера, обрезка, масштабирование и т. д.) должны атомарно размещаться в течение периода вертикального отката. При обновлении блока регистров все они должны быть пост атомарным образом. Например, если VSync возникает после записи 10 из 20 регистров, относящихся к плоскости наложения, ни один из них не будет публиковаться до следующей виртуальной синхронизации, так как они не могут выполнить запись в текущей виртуальной синхронизации).
- Каждая плоскость может обновляться независимо от других плоскостей. Например, если регистры плоскости 0 были обновлены до VSync, а затем регистры плоскости 1 обновляются при возникновении VSync, обновление уровня 1 может ждать до следующей виртуальной синхронизации, но обновление плоскости 0 должно происходить вовремя.
- При обновлении нескольких плоскостей во время одного текущего вызова обновления должны происходить атомарным образом. Например, если один вызов обновляет плоскость 0 и включает плоскость 1, регистры плоскости 0 не должны размещаться в VSync, если только плоскость 1 не регистрируется в той же виртуальной синхронизации.
- Преобразование, масштабирование и смешивание должны выполняться в следующем порядке:
Выделение исходного кода обрезается в соответствии с указанным исходным прямоугольником. Прямоугольник источника гарантированно будет ограничен размером исходного выделения.
При необходимости примените горизонтальный отверток изображения, а затем — вертикальный.
Примените масштабирование в соответствии с целевым прямоугольником, примените обрезку в соответствии с прямоугольником клипа и примените соответствующую фильтрацию при масштабировании.
Смешивание с выделениями на других уровнях. Смешивание должно выполняться сверху вниз (или до попадания непрозрачного слоя) в z-порядке. Если запрашивается альфа-наложение, оборудование должно учитывать значение альфа-пикселя, а значение цвета предварительно умножается на альфа. Следующий псевдокод выполняет операцию источника над назначением несколько раз сверху вниз, (((Layer[0] over Layer[1]) over Layer[2]) over Layer[2]) over Layer[n]). За пределами целевого прямоугольника каждый слой должен рассматриваться как прозрачный (0,0,0,0,0).
Color = Color[0]; // Layer 0 is topmost. Alpha = Color[0].Alpha; for (i = 1; Alpha < 1 && i < LayersToBlend; i++) { Color += ((1 - Alpha) * Color[i]); Alpha += ((1 - Alpha) * Color[i].Alpha); } Output Color;
Оборудование может смешиваться снизу вверх, если выходные результаты одинаковы. В этом случае следует использовать следующий алгоритм смешения:
Color = Color[LayersToBlend-1]; // Bottom-most layer Alpha = Color[LayersToBlend-1].Alpha; if (LayersToBlend > 1) { for (i = LayersToBlend - 2; Alpha < 1 && i >= 0; i--) { Color = Color[i] + ((1 - Color[i].Alpha) * Color; Alpha = Color[i].Alpha + (1 - Color[i].Alpha) * Alpha; } } Output Color;
Черный цвет должен отображаться в области, где не покрыта ни одной из целевых прямоугольников из каких-либо слоев. Оборудование может предполагать, что существует концептуальный виртуальный нижний черный слой, который является размером экрана.