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


функция обратного вызова LPD3DHAL_VALIDATETEXTURESTAGESTATECB (d3dhal.h)

Функция D3dValidateTextureStageState возвращает количество проходов, в которых оборудование может выполнять операции смешивания, указанные в текущем состоянии.

Синтаксис

LPD3DHAL_VALIDATETEXTURESTAGESTATECB Lpd3dhalValidatetexturestagestatecb;

DWORD Lpd3dhalValidatetexturestagestatecb(
  LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA unnamedParam1
)
{...}

Параметры

unnamedParam1

pvtssd [in]

Указывает на структуру D3DHAL_VALIDATETEXTURESTAGESTATEDATA , содержащую сведения, необходимые драйверу для определения и возврата количества проходов, необходимых для выполнения операций смешивания.

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

D3dValidateTextureStageState возвращает один из следующих кодов обратного вызова:

Комментарии

Драйверы Microsoft Direct3D, поддерживающие форматирование, должны реализовывать D3dValidateTextureStageState.

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

Код ошибки Значение
D3DERR_CONFLICTINGTEXTUREFILTER Оборудование не может одновременно выполнять трилинейную фильтрацию и многотекстовую фильтрацию.
D3DERR_TOOMANYOPERATIONS Оборудование не может обрабатывать указанное количество операций.
D3DERR_UNSUPPORTEDALPHAARG Оборудование не поддерживает указанный альфа-аргумент.
D3DERR_UNSUPPORTEDALPHAOPERATION Оборудование не поддерживает указанную альфа-операцию.
D3DERR_UNSUPPORTEDCOLORARG Оборудование не поддерживает указанный аргумент цвета.
D3DERR_UNSUPPORTEDCOLOROPERATION Оборудование не поддерживает указанную операцию цвета.
D3DERR_UNSUPPORTEDFACTORVALUE Оборудование не поддерживает D3DTA_TFACTOR больше 1.0.
D3DERR_WRONGTEXTUREFORMAT Оборудование не поддерживает текущее состояние в выбранном формате текстуры.

 

Direct3D вызывает D3dValidateTextureStageState в ответ на запрос приложения через вызов IDirect3Device7::ValidateDevice. Число проходов, возвращаемых драйвером, распространяется обратно в приложение, которое затем может решить, будет ли он продолжать отрисовку с использованием текущего состояния или необходимо ли изменить операции смешения для ускорения отрисовки или для отрисовки вообще. Количество проходов, которые может вернуть драйвер, не ограничено.

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

Запросы, которые могут завершиться ошибкой D3dValidateTextureStageState:

  • Использование диффузных итерированных значений в качестве ARG или операция BLENDDIFFUSE на текущем оборудовании редко поддерживается. Многие части могут вводить только итерированные цветовые данные на последнем этапе операции текстуры.

  • Попытка указать текстуру для каждого этапа в качестве аргумента arg1 в предпочтительном варианте arg2.

  • Попытка использовать диффузные или скалярные значения на этапах произвольного многотекстового смешивания. Для многих карт эти значения можно использовать только в окончательном состоянии наложения текстуры; для других, только на первом этапе.

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

    dev.SetTextureStageState( n, D3DTSS_COLORARG1, D3DTA_TEXTURE );   *
    dev.SetTextureStageState( n, D3DTSS_COLOROP, D3DTOP_SELECTARG1 ); *
    
  • Выполнение операций для альфа-канала вывода, которые являются более сложными или существенно отличаются от операций, указанных для цветовых каналов, с меньшей вероятностью будут поддерживаться.

  • Попытка одновременного использования D3DTA_TFACTOR и D3DTA_DIFFUSE. Некоторые аппаратные средства не поддерживают эту функцию.

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

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть d3dhal.h (включая D3dhal.h)

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

D3DHAL_VALIDATETEXTURESTAGESTATEDATA

D3dDrawPrimitives2