锁定体积纹理的子体积

DirectX 8.1 引入了一项新功能,该功能允许驱动程序仅锁定卷纹理的子卷。 调用驱动程序的 DdLock 函数时,驱动程序可以通过仅锁定子卷而不是整个卷纹理来提高系统性能。

若要指示支持此功能,驱动程序必须在 D3DCAPS8 结构的 DevCaps 成员中设置D3DDEVCAPS_SUBVOLUMELOCK位。 驱动程序返回 D3DCAPS8 结构以响应 GetDriverInfo2 查询,如 报告 DirectX 8.0 样式 Direct3D 功能中所述。 支持 GetDriverInfo2 中介绍了对此查询的支持。

确定此功能支持后,驱动程序可以接收 DdLock 调用,并在传递的 DD_LOCKDATA 结构的 dwFlags 成员中设置DDLOCK_HASVOLUMETEXTUREBOXRECT位。 此位通知驱动程序锁定指定的子卷纹理。 然后,驱动程序必须从 DD_LOCKDATA 的 rArea成员中指定的 RECTL 结构的左右成员获取锁定子卷的前后坐标。 驱动程序分别从左右成员的较高 16 位获取前后坐标。

锁定的子卷的左坐标和右坐标限制为 成员和 成员的下 16 位。 驱动程序使用 rArea 中 RECTL 结构的顶部底部成员不变来指定锁定子卷的顶部和底部坐标。 这样, rArea 成员有效地提供了三个坐标集来指定锁定的子卷。 RECTL 结构在Microsoft Windows SDK文档中介绍。

以下代码演示如何获取前后坐标:

"real" left = rArea.left && 0xFFFF;
"real" right = rArea.right && 0xFFFF;
front = rArea.left >> 16;
back = rArea.right >> 16;

此功能适用于 Windows Me 和 Windows XP 及更高版本。 此功能也适用于安装了 DirectX 8.1 运行时的 Windows 2000 和 Windows 98 操作系统版本。