将资源锁定 (Direct3D 9)

锁定资源意味着授予对其存储的 CPU 访问权限。 为资源定义了以下锁定选项:

  • D3DLOCK_DISCARD
  • D3DLOCK_READONLY
  • D3DLOCK_NOOVERWRITE
  • D3DLOCK_NOSYSLOCK
  • D3DLOCK_NO_DIRTY_UPDATE

有关锁定标志及其与特定资源的关系的详细信息,请参阅各个资源锁定方法的参考页。 应用程序开发人员应注意,D3DLOCK_DISCARD、D3DLOCK_READONLY和D3DLOCK_NOOVERWRITE标志只是提示。 运行时不检查应用程序遵循这些标志指定的功能。 指定D3DLOCK_READONLY但随后写入资源的应用程序应预期得到未定义的结果。 通常,无法保证针对锁定标志(包括锁定使用标志)在以后的版本中工作,并且可能会对性能造成重大损失。

锁定操作后跟解锁操作。 例如,锁定纹理后,应用程序随后通过解锁锁定纹理来放弃对锁定纹理的直接访问。 除了授予处理器访问权限外,涉及该资源的任何其他操作会在锁定期间进行序列化。 即使对于非重叠区域,也只允许对资源使用一个锁,并且当该图面上的锁定操作未完成时,图面上无法执行任何加速器操作。

每个资源接口都有用于锁定包含的缓冲区的方法。 每个纹理资源还可以锁定该资源的子部分。 2D 资源 (图面) 允许锁定子矩形,而卷资源允许锁定子卷或框。 每个 lock 方法返回一个 结构,该结构包含指向支持资源的存储的指针,以及表示数据行或平面之间的距离的值,具体取决于资源类型。 有关详细信息,请参阅资源接口的方法列表。 返回的指针始终指向锁定子区域中左上角的字节。

使用索引和顶点缓冲区时,可以进行多个锁调用;但是,必须确保锁调用数与解锁调用数匹配。

DXTn 将像素存储在编码的 4x4 块中,并且只能在 4x4 边界上锁定。

Direct3D 资源