структура D3DHAL_DP2DRAWRECTPATCH (d3dhal.h)
Только версии DirectX 8.0 и более поздних версий.
D3DHAL_DRAWRECTPATCH анализируется из буфера команд с помощью обратного вызова D3dDrawPrimitives2, когда D3DHAL_DP2COMMAND элемент bCommand имеет значение D3DDP2OP_DRAWRECTPATCH и используется для отрисовки прямоугольного исправления.
Синтаксис
typedef struct _D3DHAL_DP2DRAWRECTPATCH {
DWORD Handle;
DWORD Flags;
} D3DHAL_DP2DRAWRECTPATCH;
Члены
Handle
Задает дескриптор, связанный с поверхностью.
Flags
Указывает, что, если есть, дополнительная информация следует D3DHAL_DP2DRAWRECTPATCH структуре данных в потоке DP2.
Замечания
Элемент Handle используется для связывания поверхности с дескриптором, чтобы при следующем рисовании этой поверхности не было необходимости изменять структуру данных D3DRECTPATCH_INFO для этого исправления. Это позволяет драйверу предварительно компьютировать и кэшировать коэффициенты разницы вперед и (или) любые другие сведения, которые, в свою очередь, позволяют последующим D3DDP2OP_DRAWRECTPATCH токенам использовать тот же дескриптор для более эффективного выполнения. D3DRECTPATCH_INFO описаны в последней документации по пакету SDK DirectX.
Фактическое значение Handle определяется приложением и не находится под контролем среды выполнения. Таким образом, драйвер должен быть готов справиться с любым значением, которое может быть указано DWORD. Значение специального дескриптора нуля означает, что исправление является динамическим, и для этого исправления нет никаких сведений о предварительной компиляции или кэшировании. Значение subzero для Handle означает, что исправление является статическим (или обновляется с низкой частотой), а предварительная компиляция и кэширование возможны.
Элемент флагов используется для обмена данными о том, что, если таковые есть, следует D3DHAL_DP2DRAWRECTPATCH структуре данных в потоке DP2. Если указан RTPATCHFLAG_HASSEGS, то четыре значения с плавающей запятой следуют D3DHAL_DP2DRAWRECTPATCH в потоке DP2. Эти с плавающей запятой дают счетчики сегментов для каждого из четырех краев прямоугольного исправления и переопределяют значение состояния отрисовки D3DRS_PATCHSEGMENTS. Если указана RTPATCHFLAG_HASINFO, D3DRECTPATCH_INFO структура данных следует в потоке DP2. Если оба флага указаны четыре с плавающей запятой, указывающие счетчики сегментов, следуют D3DHAL_DP2DRAWRECTPATCH, а структура D3DRECTPATCH_INFO следует значениям с плавающей запятой.
Существует четыре сценария, которые драйвер должен обрабатывать при обработке D3DDP2OP_DRAWRECTPATCH.
Если Дескриптор равен нулю, то исправление является динамическим и не должно выполняться предварительное вычисление или кэширование. В этом случае D3DRECTPATCH_INFO следует D3DHAL_DP2DRAWRECTPATCH в потоке DP2 (а флаг RTPATCHFLAG_HASINFO указывает наличие структуры данных D3DRECTPATCH_INFO). При необходимости RTPATCHFLAG_HASSEGS также можно указать наличие сведений о сегменте. Однако если это опущено, вместо этого следует использовать значение состояния отрисовки D3DRS_PATCHSEGMENTS.
Если Дескриптор является вложенным, а значение дескриптора не указано более ранней D3DDP2OP_DRAWRECTPATCH, это означает, что создается новое кэшируемое исправление. Драйвер должен выделить память для хранения кэшированных данных и добавить эти данные в таблицу дескрипторов исправлений. Так как это исправление не было видно раньше, необходимо задать флаг RTPATCHFLAG_HASINFO, а структура D3DRECTPATCH_INFO должна соответствовать потоку DP2. Однако среда выполнения не гарантирует это, и драйвер должен проверить наличие сведений о исправлении, проверив флаг. Если информация не указана, этот маркер должен игнорироваться, а дескриптор не должен быть выделен в таблице дескрипторов исправлений драйвера. При необходимости RTPATCHFLAG_HASSEGS также можно указать наличие сведений о сегменте. Однако если это опущено, вместо этого следует использовать значение состояния отрисовки D3DRS_PATCHSEGMENTS.
Если Handle является вложенным, значение дескриптора было указано более ранним маркером D3DDP2OP_DRAWRECTPATCH, а поле Флаги содержит RTPATCHFLAG_HASINFO, то определение исправления обновляется. Структура данных D3DRECTPATCH_INFO следует в потоке DP2, и драйвер должен использовать его для повторной компиляции и повторной обработки сведений о исправлениях. При необходимости RTPATCHFLAG_HASSEGS также можно указать наличие сведений о сегменте. Однако если это опущено, вместо этого следует использовать значение состояния отрисовки D3DRS_PATCHSEGMENTS.
Если Handle является вложенным, значение дескриптора было указано более ранним маркером D3DDP2OP_DRAWRECTPATCH, а поле флагов не содержит RTPATCHFLAG_HASINFO, кэшированные сведения следует использовать для рисования исправления. В этом случае текущие потоки вершин игнорируются; Вместо этого следует использовать кэшированные сведения. Однако в этом случае можно указать сведения о новом сегменте. Поэтому драйвер должен проверить наличие флага RTPATCHFLAG_HASSEGS и обрабатывать указанные сведения о сегментах, даже если используется кэшированное исправление.
Драйвер получает уведомление о том, что кэшированные сведения о исправлении освобождаются с помощью D3DRS_DELETERTPATCH состояния отрисовки. Значение этого состояния отрисовки — это исправление для удаления.
Требования
Требование | Ценность |
---|---|
заголовка | d3dhal.h (include D3dhal.h) |
См. также
D3DDP2OP_DRAWRECTPATCH
D3DRS_DELETERTPATCH