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

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

Синтаксис

PFND3DDDI_DRAWRECTPATCH Pfnd3dddiDrawrectpatch;

HRESULT Pfnd3dddiDrawrectpatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWRECTPATCH *unnamedParam2,
       const D3DDDIRECTPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

Параметры

[in] hDevice

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

unnamedParam2

pData [in]

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

unnamedParam3

pInfo [in]

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

unnamedParam4

pPatch [in]

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

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

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

Комментарии

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

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

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

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

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

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

Требования

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

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

D3DDDIARG_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS