функция обратного вызова 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 и обрабатывать указанные сведения о сегменте, даже если он использует кэшированное исправление.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows Vista и более поздних версиях операционных систем Windows. |
Целевая платформа | Персональный компьютер |
Верхняя часть | d3dumddi.h (включая D3dumddi.h) |