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

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

D3DHAL_DRAWTRIPATCH анализируется из буфера команд с помощью обратного вызова D3dDrawPrimitives2, когда член bCommandструктуры D3DHAL_DP2COMMAND имеет значение D3DDP2OP_DRAWTRIPATCH, и используется для отрисовки треугольного исправления.

Синтаксис

typedef struct _D3DHAL_DP2DRAWTRIPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWTRIPATCH;

Члены

Handle

Указывает дескриптор, связанный с поверхностью.

Flags

Указывает, какие дополнительные сведения следует за структурой данных D3DHAL_DP2DRAWTRIPATCH в потоке DP2( если таковые есть).

Комментарии

Элемент Handle используется для связывания поверхности с дескриптором, поэтому при следующем рисовании этой поверхности нет необходимости изменять D3DTRIPATCH_INFO структуру данных для этого исправления. Это позволяет драйверу предварительно вычислять и кэшировать коэффициенты разницы вперед и(или) любую другую информацию, что, в свою очередь, позволяет последующим D3DDP2OP_DRAWTRIPATCH токенам, использующим тот же дескриптор, выполняться более эффективно. D3DTRIPATCH_INFO описано в последней документации по пакету SDK для DirectX.

Фактическое значение Handle определяется приложением и не находится под контролем среды выполнения. Таким образом, драйвер должен быть готов справиться с любым значением, определяемым DWORD. Значение специального дескриптора, равное нулю, означает, что исправление является динамическим и для этого исправления нет смысла предварительно вычислять или кэшировать сведения. Значение subzero для Handle означает, что исправление является статическим (или обновляется с низкой частотой) и возможно предварительное вычисление и кэширование.

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

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

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

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

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

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

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

Требования

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

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

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2