锁定体积纹理的子体积

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

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

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

锁定的 subvolume 的左坐标和右坐标限制为 成员和 成员的小写16位。 驱动程序使用rArea中 RECTL 结构的顶部底部成员保持不变,以指定锁定的 subvolume 的上坐标和下坐标。 通过这种方式, rArea 成员有效地提供三个坐标集来指定锁定的 subvolume。 Microsoft Windows SDK 文档中介绍了 RECTL 结构。

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

"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 操作系统版本。