функция обратного вызова 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) |