структура D3DHAL_DP2DRAWRECTPATCH (d3dhal.h)

Только DirectX 8.0 и более поздних версий.

D3DHAL_DRAWRECTPATCH анализируется из буфера команд с помощью обратного вызова D3dDrawPrimitives2, когда член bCommandструктуры D3DHAL_DP2COMMAND имеет значение 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. Специальное значение дескриптора , равное нулю, означает, что исправление является динамическим и для этого исправления нет точки предварительного вычислений или кэширования информации. Значение ниже нуля для Handle означает, что исправление является статическим (или обновляется с низкой частотой) и возможно предварительное вычисление и кэширование.

Элемент Flags используется для передачи дополнительных сведений о D3DHAL_DP2DRAWRECTPATCH структуре данных в потоке DP2. Если указан RTPATCHFLAG_HASSEGS, в потоке DP2 следуют D3DHAL_DP2DRAWRECTPATCH четыре значения с плавающей запятой. Эти числа с плавающей точкой дают количество сегментов для каждого из четырех краев прямоугольного исправления и переопределяют значение состояния отрисовки D3DRS_PATCHSEGMENTS. Если указан RTPATCHFLAG_HASINFO, то в потоке DP2 следует структура данных D3DRECTPATCH_INFO. Если указаны оба флага, четыре типа floats, указывающие число сегментов, следуют D3DHAL_DP2DRAWRECTPATCH, а структура D3DRECTPATCH_INFO соответствует значениям с плавающей запятой.

Существует четыре сценария, которые драйвер должен обрабатывать при обработке D3DDP2OP_DRAWRECTPATCH.

Если Handle равен нулю, исправление является динамическим и не следует выполнять предварительные вычисление или кэширование. В этом случае D3DRECTPATCH_INFO следует D3DHAL_DP2DRAWRECTPATCH в потоке DP2 (и RTPATCHFLAG_HASINFO флага указывает на наличие структуры данных D3DRECTPATCH_INFO). При необходимости можно также задать RTPATCHFLAG_HASSEGS, чтобы указать наличие сведений о сегменте. Однако если этот параметр опущен, следует использовать значение состояния отрисовки D3DRS_PATCHSEGMENTS.

Если handle имеет значение subzero и значение дескриптора не было указано в более ранней D3DDP2OP_DRAWRECTPATCH, это означает, что создается новое кэшируемое исправление. Драйвер должен выделить память для хранения кэшированных данных и добавить эти данные в таблицу дескрипторов исправлений. Так как это исправление ранее не встречалось, необходимо установить флаг RTPATCHFLAG_HASINFO, а в потоке DP2 должна следовать D3DRECTPATCH_INFO структура. Однако среда выполнения не гарантирует это, и драйвер должен проверить наличие сведений об исправлении, проверив флаг . Если сведения не указаны, этот маркер следует игнорировать и не выделять дескриптор в таблице дескрипторов исправлений драйвера. При необходимости можно также задать RTPATCHFLAG_HASSEGS, чтобы указать наличие сведений о сегменте. Однако если этот параметр опущен, следует использовать значение состояния отрисовки D3DRS_PATCHSEGMENTS.

Если значение Handle равно subzero, значение дескриптора было указано более ранним маркером D3DDP2OP_DRAWRECTPATCH, а поле Флаги содержит RTPATCHFLAG_HASINFO, то определение исправления обновляется. В потоке DP2 следует D3DRECTPATCH_INFO структура данных, и драйвер должен использовать ее для повторного вычислений и повторного выполнения исправлений. При необходимости можно также задать RTPATCHFLAG_HASSEGS, чтобы указать наличие сведений о сегменте. Однако если этот параметр опущен, следует использовать значение состояния отрисовки D3DRS_PATCHSEGMENTS.

Если handle имеет значение subzero, значение дескриптора было указано более ранним маркером D3DDP2OP_DRAWRECTPATCH, а поле Флаги не содержит RTPATCHFLAG_HASINFO, кэшированные сведения следует использовать для рисования исправления. В этом случае текущие потоки вершин игнорируются; Вместо этого следует использовать кэшированные сведения. Однако в этом случае по-прежнему можно указать сведения о новом сегменте. Поэтому драйвер должен проверка для RTPATCHFLAG_HASSEGS флага и обрабатывать указанные сведения о сегменте, даже если используется кэшированное исправление.

Драйвер получает уведомление о том, что кэшированные сведения об исправлении освобождаются через D3DRS_DELETERTPATCH состояния отрисовки. Значением этого состояния отрисовки является исправление, которое необходимо удалить.

Требования

Требование Значение
Заголовок d3dhal.h (включая D3dhal.h)

См. также раздел

D3DDP2OP_DRAWRECTPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWTRIPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2