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