在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的合同。
答案 0 :(得分:1)
它应该是相同的界面指针,尽管使用Direct3D 9,如果使用D3DCREATE_PUREDEVICE,你应该小心Get。这些接口指针都是Direct3D运行时在用户模式进程内存中分配的内容。
您可以使用Direct3D挂在指针上的主要地方是: