структура 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) |