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

Структура D3DHAL_DP2TEXBLT используется для объектов текстуры, когда 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

Указывает прямоугольник, который будет вырезан в исходной текстуре, то есть исходный прямоугольник в исходной поверхности (dwDDSrcSurface), из которую необходимо выполнить blt.

dwFlags

Зарезервировано для системного использования.

Комментарии

Обратный вызов D3dCreateSurfaceEx создает небольшие целочисленные дескрипторы текстур, которые можно использовать в качестве исходных и целевых текстур для текстурных объектов.

Структура D3DHAL_DP2TEXBLT используется с маркером потока команд D3DDP2OP_TEXBLT, чтобы сообщить драйверам о выполнении операции blt из исходной текстуры в целевую текстуру. Текстура также может быть кубической картой среды. Драйвер должен скопировать прямоугольник, заданный rSrc в исходной текстуре, в расположение, указанное pDest в конечной текстуре. Конечные и исходные текстуры определяются дескрипторами, о которых драйвер получил уведомление во время создания текстуры. Если драйвер способен управлять текстурами, возможно, целевой дескриптор равен 0. Это указывает драйверу, что он должен предварительно загрузить текстуру в видеопамять (или везде, где оборудование эффективно текстуры). В этом случае драйвер может игнорировать rSrc и pDest.

Обратите внимание, что для сопоставленных текстур MIP в поток команд D3dDrawPrimitives2 вставляется только одна инструкция D3DDP2OP_TEXBLT. В этом случае драйвер должен выполнить все уровни карты MIP, присутствующие в текстуре. Области для копирования в вложенных уровнях карты MIP можно получить, разделив rSrc иpDest на 2 на каждом уровне.

Возможно, текстуры источника и назначения могут содержать разное количество уровней карты MIP. В этом случае драйвер, как ожидается, будет выполнять общие уровни. Например, если исходная текстура 256 x 256 имеет 8 уровней карты MIP, а назначением является текстура 64x64 с 6 уровнями, драйвер должен отбить 6 соответствующих уровней от источника. Драйвер может ожидать, что размеры верхнего уровня MIP целевой текстуры всегда будут меньше или равны измерениям верхнего уровня MIP исходной текстуры.

Обратите внимание, что дескрипторы источника и назначения всегда ссылаются на поверхности верхнего уровня и никогда не ссылаются на подуровневые MIP-карты. Из-за ошибки в приложении текстура назначения может содержать дополнительные уровни карты MIP. Например, исходная текстура 256x256 может содержать пять уровней, а текстура назначения 256x256 может содержать восемь. Ожидается, что драйвер будет безопасно обрабатывать этот случай, но он не должен давать правильные результаты. Из-за проблем совместимости устаревших приложений Direct3D не препятствует передаче таких пар текстур источника и назначения в драйвер.

Драйвер может ожидать, что форматы пикселей исходных и целевых текстур будут идентичными, и, как правило, указанный BLT является безопасным для выполнения. За исключением одного случая, упомянутого выше, драйвер не должен ожидать, что ему будут представлены какие-либо ситуации, которые делают невозможным выполнение blt.

Если драйвер хочет выполнять асинхронные операции из системной памяти в видеопамяти, он должен реализовать вызов DirectDraw HAL GetSysmemBltStatus, в противном случае могут возникнуть несоответствия.

При использовании TexBlt драйверу не требуется выполнять синхронизацию, так как TexBlts всегда выдаются в правильном порядке вместе с командами отрисовки. До этого драйверу необходимо было правильно обработать случай, когда directDraw blt изменял любую текстуру, на которую ссылались команды отрисовки в любом контексте Direct3D. При наличии нескольких контекстов Direct3D не выдает TexBlts. Это означает, что модуль записи драйверов может пропускать код синхронизации в пути кода TexBlt (но по-прежнему требуется синхронизация для blts).

Образец

В следующем псевдокоде показано, как вычисляется подпроект для последовательных уровней MIP, чтобы перейти на уровень MIP i + 1 от уровня I MIP:

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 (включая D3dhal.h)

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

D3DDP2OP_TEXBLT

D3dCreateSurfaceEx

D3dDrawPrimitives2