функция обратного вызова PFND3DDDI_DRAWTRIPATCH (d3dumddi.h)

Функция DrawTriPatch рисует новое или кэшированное треугольное исправление или обновляет спецификацию ранее определенного исправления.

Синтаксис

PFND3DDDI_DRAWTRIPATCH Pfnd3dddiDrawtripatch;

HRESULT Pfnd3dddiDrawtripatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWTRIPATCH *unnamedParam2,
       const D3DDDITRIPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

Параметры

[in] hDevice

Дескриптор устройства отображения (графический контекст).

unnamedParam2

pData [in]

Указатель на структуру D3DDDIARG_DRAWTRIPATCH , описывающую отрисовку треугольного пятна.

unnamedParam3

pInfo [in]

Необязательный элемент. Указатель на структуру D3DDDITRIPATCH_INFO, описывающую сведения о треугольном патче.

unnamedParam4

pPatch [in]

Необязательный элемент. Указатель на буфер, содержащий три значения с плавающей запятой (D3DFLOAT[3]), которые обеспечивают количество сегментов для каждого из трех краев треугольного исправления.

Возвращаемое значение

DrawTriPatch возвращает S_OK или соответствующий результат ошибки, если треугольное исправление не выполнено.

Комментарии

Когда среда выполнения Microsoft Direct3D вызывает функцию DrawTriPatch драйвера отображения пользовательского режима, она может при необходимости предоставлять сведения в параметрах pInfo и pPatch . Среда выполнения устанавливает флаги в элементе Flagsструктуры D3DDDIARG_DRAWTRIPATCH , указанной в pData , чтобы указать, предоставляет ли она эти необязательные сведения.

Среда выполнения предоставляет значение UINT в элементе Handle D3DDDIARG_DRAWTRIPATCH для ссылки на поверхность исправления. Всякий раз, когда среда выполнения перерисовывает поверхность исправления, она передает значение дескриптора исправления и не требуется повторно указывать структуру данных D3DDDITRIPATCH_INFO для поверхности исправлений. Драйвер отображения пользовательского режима может предварительно вычислить и кэшировать коэффициенты прямого разности и любую другую информацию. Поэтому последующие вызовы функции DrawTriPatch драйвера, использующие то же значение дескриптора исправления, выполняются более эффективно.

Фактическое значение в Handle определяется приложением и не находится под контролем среды выполнения. Таким образом, драйвер должен обрабатывать любое значение, которое может быть указано с помощью UINT.

Специальное значение Handle , равное нулю, указывает, что исправление является динамическим; поэтому драйвер не может предварительно вычислить или кэшировать сведения для исправления. Ненулевое значение дескриптора указывает, что исправление является статическим (или обновляется с низкой частотой); Таким образом, драйвер может предварительно вычислить и кэшировать сведения для исправления.

Драйвер должен обрабатывать следующие сценарии в своей функции DrawTriPatch :

  • Если элемент Handle равен нулю, исправление является динамическим. Драйвер не должен предварительно вычислять и кэшировать сведения для исправления. В этом случае среда выполнения передает указатель на структуру D3DDDITRIPATCH_INFO в параметре pInfo и устанавливает флаг RTPATCHFLAG_HASINFO в элементе Flags структуры D3DDDIARG_DRAWTRIPATCH, чтобы указать наличие структуры D3DDDITRIPATCH_INFO в pInfo. При необходимости среда выполнения также может задать флаг RTPATCHFLAG_HASSEGS в разделе Флаги , чтобы указать наличие сведений о сегменте, указанных параметром pPatch . Однако если среда выполнения не предоставляет сведения о сегменте в pPatch, вместо этого среда выполнения должна использовать значение D3DRS_PATCHSEGMENTS отрисовки состояния.
  • Если значение ненулевого дескриптора ранее не было указано в предыдущем вызове функции DrawTriPatch драйвера, среда выполнения рисует новое кэшируемое исправление. Драйвер должен выделить память для хранения кэшированных данных и добавить эти данные в таблицу дескрипторов исправлений. Так как среда выполнения ранее не рисовала это исправление, среда выполнения должна установить флаг RTPATCHFLAG_HASINFO и передать указатель на структуру D3DDDIRECTPATCH_INFO в параметре pInfo . Чтобы проверить наличие сведений об исправлении, драйвер должен проверка для флага RTPATCHFLAG_HASINFO. Если сведения об исправлении не указаны, драйвер должен игнорировать вызов DrawTriPatch и не выделять память для кэшированных данных в таблице дескрипторов исправлений. При необходимости среда выполнения может задать флаг RTPATCHFLAG_HASSEGS, чтобы указать наличие сведений о сегменте. Однако если среда выполнения не предоставляет сведения о сегменте в pPatch, вместо этого среда выполнения должна использовать значение D3DRS_PATCHSEGMENTS отрисовки состояния.
  • Если в предыдущем вызове функции DrawTriPatch драйвера было указано ненулевое значение Handle и установлен флаг RTPATCHFLAG_HASINFO, среда выполнения обновляет определение исправления. Среда выполнения передает указатель на структуру D3DDDITRIPATCH_INFO в параметре pInfo , и драйвер должен повторно вычислить и повторно передать сведения об исправлении. При необходимости среда выполнения может задать флаг RTPATCHFLAG_HASSEGS, чтобы указать наличие сведений о сегменте. Однако если среда выполнения не предоставляет сведения о сегменте в pPatch, вместо этого среда выполнения должна использовать значение D3DRS_PATCHSEGMENTS отрисовки состояния.
  • Если в предыдущем вызове функции DrawTriPatch драйвера было указано ненулевое значение Handle и флаг RTPATCHFLAG_HASINFO не задан, среда выполнения перерисовывает исправление. Драйвер должен использовать кэшированные сведения для рисования исправления. В этом случае драйвер игнорирует текущие потоки вершин, и вместо этого используются кэшированные сведения. Однако среда выполнения по-прежнему может указывать новые сведения о сегменте; Поэтому драйвер должен проверка для флага RTPATCHFLAG_HASSEGS и обрабатывать указанные сведения о сегменте, даже если используется кэшированное исправление.
Драйвер получает уведомление о освобождении кэшированных сведений об исправлении через состояние D3DRS_DELETERTPATCH отрисовки. Значение этого состояния отрисовки — это удаляемое исправление.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Персональный компьютер
Верхняя часть d3dumddi.h (включая D3dumddi.h)

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

D3DDDIARG_DRAWTRIPATCH

D3DDDI_DEVICEFUNCS