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

时间:2014-06-24 21:26:12

标签: c++ direct3d

在Direct3d中,我试图在Direct3d顶点或索引缓冲区创建时以及Direct3d渲染调用时注入一些自定义代码。我希望在渲染时我能以某种方式将通过IDirect3dDevice9 :: GetIndices()获得的IDirect3dIndexBuffer9映射到与Direct3d知道的相同的索引缓冲区,这是通过IDirect3dDevice9 :: CreateIndexBuffer创建的。

我的具体问题很难从API文档中回答:如果我使用IDirect3dDevice9 :: CreateIndexBuffer()创建索引缓冲区并存储返回指针的副本,那么稍后使用该指针调用IDirect3dDevice9 :: SetIndices ,对IDirect3dDevice9 :: GetIndices()的后续调用将返回与SetIndices()中使用的指针值相同的指针值,或者指针是否有可能引用Direct3d知道是同一个缓冲区的东西,但是有一个不同的客户端的指针值我在做什么?我可以想象一个场景,例如,Direct3d .dll在内部拥有一个唯一的持久对象,但在调用GetIndices()时为客户端创建新的轻量级COM包装器,以便COM对象指针不同。

官方Direct3d规范中是否有此类保证(或警告)?我可以编写一些测试代码来查看,但是我担心如果结果是正面的,我会编写实施意外的代码,而不是API的合同。

1 个答案:

答案 0 :(得分:1)

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

您可以使用Direct3D挂在指针上的主要地方是:

  • 指针从Lock / Map返回。它们应该在短时间内解锁/取消映射。
  • 设备的所有副本发布后,所有Direct3D对象均无效
  • Direct3D 9 Lost Device你有很多有效的指针,这些指针在重置之前无法执行任何操作