GetIndices()会在CreateIndexBuffer()和SetIndices()之后返回相同的缓冲区指针吗?

Will GetIndices() return the same buffer pointer after CreateIndexBuffer() and SetIndices()?

本文关键字:缓冲区 指针 之后 CreateIndexBuffer 会在 SetIndices GetIndices 返回      更新时间:2023-10-16

在Direct3d中,我正在寻求在Direct3d顶点或索引缓冲区创建时注入一些自定义代码,以及在Direct3d渲染调用的时候。我希望在渲染时,我可以以某种方式映射IDirect3dIndexBuffer9通过IDirect3dDevice9::GetIndices()获得的非常相同的索引缓冲区,因为Direct3d知道它,这是通过IDirect3dDevice9::CreateIndexBuffer创建的。

我的具体问题是棘手的回答从API文档:如果我创建一个索引缓冲区IDirect3dDevice9: CreateIndexBuffer()和存储的副本返回的指针,然后在晚些时候调用IDirect3dDevice9: SetIndices使用指针,将电话后IDirect3dDevice9: GetIndices()返回一个指针值相同,用于SetIndices(),还是有一个机会,指针指Direct3d知道相同的缓冲,但有不同的指针值在客户端我工作吗?我可以想象一个场景,例如,Direct3d .dll在内部拥有一个唯一的持久对象,但在调用GetIndices()时为客户端创建新的轻量级COM包装器,因此COM对象指针将是不同的。

在官方的Direct3d规范中有这样的保证(或警告)吗?我可以编写一些测试代码来查看,但我担心如果结果是肯定的,那么我将对实现的意外进行编码,而不是对API的契约进行编码。

它应该是相同的接口指针,尽管在Direct3D 9中,如果使用D3DCREATE_PUREDEVICE,您应该小心Get。这些接口指针都指向Direct3D运行时在用户模式进程内存中分配的东西。

在Direct3D中不能挂起指针的主要地方是:

  • 锁/映射返回的指针。他们应该在短时间内解锁/取消映射。
  • 所有的Direct3D对象在设备的所有副本被释放后都是无效的
  • Direct3D 9丢失的设备你有很多有效的指针接口不能做任何事情,直到你重置