LPD3DHAL_VALIDATETEXTURESTAGESTATECB回调函数 (d3dhal.h)
D3dValidateTextureStageState 函数返回硬件可以执行当前状态中指定的混合作的传递数。
语法
LPD3DHAL_VALIDATETEXTURESTAGESTATECB Lpd3dhalValidatetexturestagestatecb;
DWORD Lpd3dhalValidatetexturestagestatecb(
LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA unnamedParam1
)
{...}
参数
unnamedParam1
pvtssd [in]
指向一个 D3DHAL_VALIDATETEXTURESTAGESTATEDATA 结构,该结构包含驱动程序确定并返回执行混合作所需的传递数。
返回值
D3dValidateTextureStageState 返回以下回调代码之一:
言论
Microsoft支持文本转换的 Direct3D 驱动程序必须实现 D3dValidateTextureStageState。
此函数的驱动程序实现必须评估与上下文关联的所有纹理阶段的当前纹理状态。 如果驱动程序的硬件可以执行指定的混合作,则驱动程序应返回其硬件所需的状态数据的传递数。 如果硬件无法执行指定的混合作,驱动程序应在 pvtssd的 D3DHAL_VALIDATETEXTURESTAGESTATEDATA 结构 成员的 ddrval 中返回以下错误代码之一:
错误代码 | 意义 |
---|---|
D3DERR_CONFLICTINGTEXTUREFILTER | 硬件不能同时执行三线性筛选和多文本处理。 |
D3DERR_TOOMANYOPERATIONS | 硬件无法处理指定的作数。 |
D3DERR_UNSUPPORTEDALPHAARG | 硬件不支持指定的 alpha 参数。 |
D3DERR_UNSUPPORTEDALPHAOPERATION | 硬件不支持指定的 alpha作。 |
D3DERR_UNSUPPORTEDCOLORARG | 硬件不支持指定的颜色参数。 |
D3DERR_UNSUPPORTEDCOLOROPERATION | 硬件不支持指定的颜色作。 |
D3DERR_UNSUPPORTEDFACTORVALUE | 硬件不支持大于 1.0 的D3DTA_TFACTOR。 |
D3DERR_WRONGTEXTUREFORMAT | 硬件不支持所选纹理格式的当前状态。 |
Direct3D 通过调用 IDirect3DDevice7::ValidateDevice响应应用程序请求,D3dValidateTextureStageState。 驱动程序返回的传递数将传播回应用程序,然后可以决定它是否会使用当前状态进行呈现,或者它必须更改混合作以更快地呈现或完全呈现。 驱动程序可以返回的传递数没有限制。
返回多个传递的驱动程序负责在呈现时正确执行所有状态和基元数据的传递。
D3dValidateTextureStageState失败的请求:
在当前硬件上很少支持将漫射迭代值用作 ARG,或 BLENDDIFFUSE作。 许多部分只能在最后一个纹理作阶段引入迭代颜色数据。
尝试将每个阶段的纹理指定为其 arg1,而不是 arg2。
尝试在任意多文本混合阶段使用漫射值或标量值。 对于许多卡片,这些值只能用于最终纹理混合状态:对于其他人,仅在第一阶段。
尝试在第一个纹理中执行更多作,而不是仅仅将 alpha 复制到颜色通道或反转输入。 对于许多卡片,与第一个纹理关联的混合单元无法处理比这些作更复杂。 以下示例尝试仅使用第二个纹理的混合单元(如果可以这样做)。 假设第一个单元在样本中处于其默认状态。
dev.SetTextureStageState( n, D3DTSS_COLORARG1, D3DTA_TEXTURE ); * dev.SetTextureStageState( n, D3DTSS_COLOROP, D3DTOP_SELECTARG1 ); *
对输出 alpha 执行比颜色通道指定的作可能不太复杂或大不相同。
尝试同时使用D3DTA_TFACTOR和D3DTA_DIFFUSE。 某些硬件不支持此功能。
尝试同时使用多个纹理和 MIP 映射的三线性筛选。 许多卡同时不支持这些作。 如果已请求对多文本作中涉及的纹理进行三线性筛选,并且它未通过验证,请关闭三线性筛选,然后重试。 在这种情况下,最好改为执行多通道呈现。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | d3dhal.h (包括 D3dhal.h) |