структура D3DHAL_DP2TEXBLT (d3dhal.h)
Структура D3DHAL_DP2TEXBLT используется для blts текстур, когда D3dDrawPrimitives2 отвечает на маркер команды D3DDP2OP_TEXBLT.
Синтаксис
typedef struct _D3DHAL_DP2TEXBLT {
DWORD dwDDDestSurface;
DWORD dwDDSrcSurface;
POINT pDest;
RECTL rSrc;
DWORD dwFlags;
} D3DHAL_DP2TEXBLT;
Члены
dwDDDestSurface
Задает дескриптор конечной текстуры.
dwDDSrcSurface
Задает дескриптор исходной текстуры.
pDest
Указывает точку назначения, в которой должен выполняться blt, то есть точка в целевой поверхности (dwDDDestSurface) для начала blt. Эти x и y элементы структуры POINT указываются в координатах экрана.
rSrc
Указывает прямоугольник, который должен быть выделен в исходной текстуре, то есть исходный прямоугольник в исходной поверхности (dwDDDSrcSurface) для blt из.
dwFlags
Зарезервировано для использования системы.
Замечания
Обратный вызов D3dCreateSurfaceEx создает небольшие целочисленные дескрипторы текстур, которые можно использовать в качестве исходных и целевых текстур для blts текстур.
Структура D3DHAL_DP2TEXBLT используется с маркером потока команд D3DDP2OP_TEXBLT для информирования драйверов о выполнении операции blt из исходной текстуры в целевую текстуру. Текстура также может быть сопоставлена с кубической средой. Драйвер должен скопировать прямоугольник, указанный rSrc в исходной текстуре в расположение, указанное pDest в конечной текстуре. Конечные и исходные текстуры определяются дескриптором, с которым драйвер был уведомлен во время создания текстуры. Если драйвер может управлять текстурами, возможно, что дескриптор назначения равен 0. Это указывает драйверу, что он должен предварительно загрузить текстуру в память видео (или где оборудование эффективно текстуры). В этом случае драйвер может игнорировать rSrc и pDest.
Обратите внимание, что для сопоставленных текстур MIP в поток команд D3dDrawPrimitives 2 вставляется только одна инструкция D3DDP2OP_TEXBLT. В этом случае драйвер должен открепить все уровни карты MIP, присутствующих в текстуре. Регионы, которые нужно скопировать в подлевках карты MIP, можно получить путем деления rSrc иpDest на 2 на каждом уровне.
Возможно, текстуры источника и назначения могут содержать разные числа уровней карты MIP. В этом случае драйвер, как ожидается, будет толчок общих уровней. Например, если текстура источника 256x256 имеет 8 уровней карты MIP, а если назначение — 64x64 текстура с 6 уровнями, драйвер должен толчок 6 соответствующих уровней из источника. Драйвер может ожидать, что размеры верхнего уровня MIP целевой текстуры всегда будут меньше или равно измерениям верхнего уровня MIP исходной текстуры.
Обратите внимание, что дескриптор источника и назначения всегда ссылается на поверхности верхнего уровня и никогда не относится к подуровневой схеме MIP. Из-за ошибки в приложении возможно, что целевая текстура содержит дополнительные уровни карты MIP. Например, исходная текстура 256x256 может содержать пять уровней, но текстура назначения 256x256 может содержать восемь. Ожидается, что драйвер будет безопасно обрабатывать этот случай, но ожидается, что он не будет получать правильные результаты. Из-за устаревших проблем совместимости приложений Direct3D не препятствует передаче таких пар текстур источника и назначения драйверу.
Драйвер может ожидать, что форматы пикселей исходных и целевых текстур будут идентичными, и, как правило, указанный blt является безопасным для выполнения. Кроме одного случая, упомянутого выше, драйвер не должен ожидать, что будет представлена любая ситуация, которая делает невозможным выполнение blt.
Если драйвер хочет выполнять асинхронные blts из системной памяти в память видео, он должен реализовать вызов DirectDraw HAL GetSysmemBltStatus, в противном случае могут возникнуть несоответствия.
При использовании TexBlt драйверу не требуется выполнять синхронизацию, так как TexBlts всегда выдаются в правильном порядке вместе с командами отрисовки. Перед этим драйверу было необходимо правильно обрабатывать ситуацию, когда directDraw blt изменил любую текстуру, на которую ссылается команды отрисовки в любом контексте Direct3D. При наличии нескольких контекстов Direct3D не выдает TexBlts. Это означает, что средство записи драйверов может опустить код синхронизации в пути кода TexBlt (но по-прежнему требуется синхронизация больших двоичных объектов).
пример
В следующем псевдокоде показано, как следует вычислить подэктанг для последовательных уровней MIP, чтобы перейти к уровню MIP i + 1 с уровня MIP i:
rect.left >>= 1;
rect.top >>= 1;
DWORD right = (rect.right + 1) >> 1;
DWORD bottom = (rect.bottom + 1) >> 1;
rect.right = ((right - rect.left) < 1) ?
(rect.left + 1) : (right);
rect.bottom = ((bottom - rect.top ) < 1) ?
(rect.top + 1) : (bottom);
Требования
Требование | Ценность |
---|---|
заголовка | d3dhal.h (include D3dhal.h) |
См. также
D3DDP2OP_TEXBLT