Поделиться через


структура 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 (include D3dhal.h)

См. также

D3DHAL_DP2COMMAND

D3DRENDERSTATETYPE

D3dDrawPrimitives2

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL