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

Структура D3DHAL_DRAWPRIMITIVES2DATA содержит сведения, необходимые функции D3dDrawPrimitives2 для отрисовки примитивов.

Синтаксис

typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
  ULONG_PTR                 dwhContext;
  DWORD                     dwFlags;
  DWORD                     dwVertexType;
  LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
  DWORD                     dwCommandOffset;
  DWORD                     dwCommandLength;
  union {
    LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
    LPVOID                    lpVertices;
  };
  DWORD                     dwVertexOffset;
  DWORD                     dwVertexLength;
  DWORD                     dwReqVertexBufSize;
  DWORD                     dwReqCommandBufSize;
  LPDWORD                   lpdwRStates;
  union {
    DWORD   dwVertexSize;
    HRESULT ddrval;
  };
  DWORD                     dwErrorOffset;
} D3DHAL_DRAWPRIMITIVES2DATA;

Члены

dwhContext

Указывает дескриптор контекста устройства Direct3D.

dwFlags

Указывает флаги, которые предоставляют дополнительные инструкции для драйвера или предоставляют сведения из драйвера. Этот член может быть побитовой ИЛИ следующих значений:

Значение Значение
D3DHALDP2_EXECUTEBUFFER Команды и буферы вершин были созданы в системной памяти. Драйвер должен обновить массив состояний, на который указывает lpdwRStates. Этот флаг устанавливается только в Direct3D.
D3DHALDP2_REQCOMMANDBUFSIZE Драйвер должен иметь возможность увеличить текущий буфер команд по крайней мере на размер, указанный в dwReqCommandBufSize. Драйверы, которые не поддерживают многобуферную функцию буферов команд, могут игнорировать этот флаг. Этот флаг устанавливается только в Direct3D.
D3DHALDP2_REQVERTEXBUFSIZE Драйвер должен иметь возможность выделить буфер вершин по крайней мере размера, указанного в dwReqCommandBufSize. Драйверы, не поддерживающие многобуферное управление буферами вершин, могут игнорировать этот флаг. Этот флаг устанавливается только в Direct3D.
D3DHALDP2_SWAPCOMMANDBUFFER Драйвер может заменить буфер, на который указывает lpDDCommands, новым буфером команд и немедленно вернуться, асинхронно обрабатывая исходный буфер, а Direct3D заполняет новый буфер команд. Драйверы, которые не поддерживают многобуферную функцию буферов команд, могут игнорировать этот флаг. Этот флаг устанавливается только в Direct3D.
D3DHALDP2_SWAPVERTEXBUFFER Драйвер может заменить буфер, на который указывает lpDDVertex или lpVertices, новым буфером вершин и немедленно вернуться, асинхронно обрабатывая исходный буфер, а Direct3D заполняет новый буфер вершин. Драйверы, не поддерживающие многобуферное управление буферами вершин, могут игнорировать этот флаг. Этот флаг устанавливается только в Direct3D.
D3DHALDP2_USERMEMVERTICES Член lpVertices является допустимым, поэтому драйвер должен получать данные вершин из выделенной пользователем памяти, на которую указывает lpVertices. Этот флаг устанавливается только в Direct3D.
D3DHALDP2_VIDMEMCOMMANDBUF Буфер команд, выделенный драйвером в качестве буфера подкачки, не находится в системной памяти. Этот флаг может быть установлен драйверами, поддерживающими многобуферную настройку буферов команд.
D3DHALDP2_VIDMEMVERTEXBUF Буфер вершин, выделенный драйвером в качестве буфера подкачки, не находится в системной памяти. Этот флаг можно установить с помощью драйверов, поддерживающих многобуферное добавление буферов вершин.

dwVertexType

Определяет FVF данных в буфере вершин; то есть dwVertexType указывает, какие поля данных для каждой вершины присутствуют в буфере вершин, на который указывает lpDDVertex или lpVertices . Этот элемент может быть побитовой ИЛИ значений в следующей таблице. Задан только один из флагов D3DFVF_TEXx .

Значение Значение
D3DFVF_DIFFUSE Каждая вершина имеет рассеянный цвет.
D3DFVF_SPECULAR Каждая вершина имеет зеркальный цвет.
D3DFVF_TEX0 С данными вершин не предоставляются координаты текстуры.
D3DFVF_TEX1 Каждая вершина имеет один набор координат текстуры.
D3DFVF_TEX2 Каждая вершина имеет два набора координат текстуры.
D3DFVF_TEX3 Каждая вершина имеет три набора координат текстуры.
D3DFVF_TEX4 Каждая вершина имеет четыре набора координат текстуры.
D3DFVF_TEX5 Каждая вершина имеет пять наборов координат текстуры.
D3DFVF_TEX6 Каждая вершина имеет шесть наборов координат текстуры.
D3DFVF_TEX7 Каждая вершина имеет семь наборов координат текстуры.
D3DFVF_TEX8 Каждая вершина имеет восемь наборов координат текстуры.
D3DFVF_XYZRHW Каждая вершина имеет координаты x, y, z и w. Этот флаг всегда установлен.

lpDDCommands

dwCommandOffset

dwCommandLength

Указывает количество байтов допустимых данных команд в поверхности, на которое указывает lpDDCommands , начиная с dwCommandOffset.

lpDDVertex

Указывает на структуру DD_SURFACE_LOCAL , которая идентифицирует поверхность DirectDraw, содержащую данные вершин, если флаг D3DHALDP2_USERMEMVERTICES не задан в dwFlags. Формирует объединение с lpVertices.

lpVertices

Указывает на блок памяти в пользовательском режиме, содержащий данные вершин, когда флаг D3DHALDP2_USERMEMVERTICES установлен в dwFlags.

dwVertexOffset

Указывает количество байтов в поверхности, на которую указывает lpDDVertex или lpVertices , где начинаются данные вершины.

dwVertexLength

Указывает количество вершин, для которых допустимые данные существуют в поверхности, на которую указывает lpDDVertex или lpVertices. Эти допустимые данные начинаются с dwVertexOffset.

dwReqVertexBufSize

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

dwReqCommandBufSize

Указывает минимальное число байтов, на которое драйвер должен увеличить буфер команд подкачки. Этот элемент действителен, только если установлен флаг D3DHALDP2_REQCOMMANDBUFSIZE. Драйверы, которые не поддерживают многобуферное управление буферами команд, должны игнорировать этот элемент.

lpdwRStates

Указывает на массив состояния отрисовки, который драйвер должен обновлять при анализе команд состояния отрисовки из буфера команд. Драйвер должен обновлять этот массив, только если флаг D3DHALDP2_EXECUTEBUFFER установлен в dwFlags. Драйвер должен использовать D3DRENDERSTATETYPE перечисленные типы для обновления соответствующего элемента массива состояния отрисовки.

dwVertexSize

Задает размер каждой вершины в байтах. Этот член образует союз с ddrval.

ddrval

Указывает расположение, в которое драйвер записывает возвращаемое значение D3dDrawPrimitives2. D3D_OK указывает на успешное выполнение. В противном случае драйвер должен вернуть соответствующий код ошибки D3DERR_Xxx . Дополнительные сведения см. в разделе Коды возврата для обратных вызовов драйвера Direct3D.

Значение Значение
D3D_OK Операция выполнена успешно.
D3DERR_COMMAND_UNPARSED Драйвер требует, чтобы среда выполнения Direct3D выполняла анализ буфера выполнения.

dwErrorOffset

За каждым D3DHAL_DP2RESPONSEQUERY следуют следующие данные, связанные с запросом:

  • BOOL для D3DQUERYTYPE_EVENT
  • DWORD для D3DQUERYTYPE_OCCLUSION
  • структура D3DDEVINFO_VCACHE для D3DQUERYTYPE_VCACHE

Комментарии

Обратите внимание, что член dwVertexOffset задает значения в байтах; Член dwVertexLength задает значения в вершинах.

Чтобы вычислить допустимые данные в байтах, которые существуют на поверхности в lpDDVertex или lpVertices, умножьте значение в dwVertexLength на значение в dwVertexSize.

Требования

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

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

D3DHAL_DP2COMMAND

D3DRENDERSTATETYPE

D3dDrawPrimitives2

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL