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


Метод IDirect3DDevice9::ValidateDevice (d3d9helper.h)

Сообщает о способности устройства отображать текущие операции смешения текстур и аргументы за один проход.

Синтаксис

HRESULT ValidateDevice(
  [out, retval] DWORD *pNumPasses
);

Параметры

[out, retval] pNumPasses

Тип: DWORD*

Указатель на значение DWORD для заполнения количества проходов отрисовки, необходимых для выполнения требуемого эффекта с помощью многопроходной отрисовки.

Возвращаемое значение

Тип: HRESULT

Если метод выполнен успешно, возвращаемое значение будет D3D_OK. В случае сбоя метода возвращается одно из следующих значений: D3DERR_CONFLICTINGRENDERSTATE, D3DERR_CONFLICTINGTEXTUREFILTER, D3DERR_DEVICELOST, D3DERR_DRIVERINTERNALERROR, D3DERR_TOOMANYOPERATIONS, D3DERR_UNSUPPORTEDALPHAARG, D3DERR_UNSUPPORTEDALPHAOPERATION, D3DERR_UNSUPPORTEDCOLORARG, D3DERR_UNSUPPORTEDCOLOROPERATION, D3DERR_UNSUPPORTEDFACTORVALUE, D3DERR_UNSUPPORTEDTEXTUREFILTER, D3DERR_WRONGTEXTUREFORMAT.

Комментарии

Метод IDirect3DDevice9::ValidateDevice следует использовать для проверки сценариев только при недостатке других возможностей. Например, в сценарии многоэтапного форматирования можно запросить элементы MaxTextureBlendStages и MaxSimultaneousTextures D3DCAPS9 структуры, чтобы определить, возможно ли многоэтапное форматирование на устройстве.

Текущее оборудование не обязательно реализует все возможные сочетания операций и аргументов. Вы можете определить, можно ли выполнить определенную операцию смешивания с заданными аргументами, задав требуемую операцию смешения, а затем вызвав метод IDirect3Device9::ValidateDevice .

Метод IDirect3DDevice9::ValidateDevice использует текущие состояния отрисовки, текстуры и состояния стадии текстуры для выполнения проверки во время вызова. Изменения этих факторов после вызова делают недействительным предыдущий результат, и метод необходимо вызвать еще раз перед отрисовкой сцены.

Чтобы повысить производительность, вызовите IDirect3DDevice9::ValidateDevice во время инициализации; не используйте его в цикле отрисовки.

Использование диффузных итерированных значений в качестве аргумента или операции (D3DTA_DIFFUSED3DTOP_BLENDDIFFUSEALPHA) редко поддерживается на текущем оборудовании. Большинство оборудования может вводить итерированные цветовые данные только на последнем этапе операции текстуры.

Попробуйте указать текстуру (D3DTA_TEXTURE) для каждого этапа в качестве первого аргумента, а не второго.

Многие карты не поддерживают использование диффузных или скалярных значений на произвольных стадиях текстуры. Часто они доступны только на первом или последнем этапе смешивания текстур.

Многие карточки не имеют единицы смешивания, связанной с первой текстурой, которая способна не только реплицировать альфа-каналы в цветовые каналы или инвертировать входные данные. Поэтому приложению может потребоваться использовать только второй этап текстуры, если это возможно. На таком оборудовании предполагается, что первый блок находится в состоянии по умолчанию, для которого для первого аргумента цвета задано значение D3DTA_TEXTURE с операцией D3DTOP_SELECTARG1.

Операции с альфа-каналом вывода, которые являются более сложными или существенно отличаются от операций цвета, скорее всего, будут поддерживаться меньше.

Некоторые аппаратные средства не поддерживают одновременное использование D3DTA_TFACTOR и D3DTA_DIFFUSE.

Многие карты не поддерживают одновременное использование нескольких текстур и трехлинейную фильтрацию mipmapped. Если трилинейная фильтрация была запрошена для текстуры, участвующей в операциях многотекстового смешивания, и проверка завершается сбоем, отключите трехлинейную фильтрацию и повторную проверку. В этом случае может потребоваться выполнить отрисовку с несколькими проходами.

Требования

Требование Значение
Целевая платформа Windows
Header d3d9helper.h (включая D3D9.h)
Библиотека D3D9.lib

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

IDirect3DDevice9

IDirect3DDevice9::GetTextureStageState

IDirect3DDevice9::SetTextureStageState