在Direct3d中,我试图在创建Direct3d顶点或索引缓冲区时以及在Direct3d呈现调用时注入一些自定义代码。我希望在呈现时,我可以以某种方式将通过IDirect3dDevice9::GetIndice()获得的IDirect3dIndexBuffer9映射到Direct3d所知道的完全相同的索引缓冲区,该缓冲区是先前通过IDirect3dDevice9::CreateIndexBuffer创建的。
我的具体问题很难从API文档中回答:如果我用IDirect3dDevice9::CreateIndexBuffer()创建索引缓冲区并存储返回指针的副本,那么稍后调用IDirect3dDevice9::SetIndice使用该指针时,对IDirect3dDevice9::GetIndice()的调用会返回一个与SetIndices()中使用的指针值相同的指针值,还是有可能指针引用的对象是Direct3d知道的相同缓冲区,但在我正在处理的客户端有不同的指针值?例如,我可以想象一个场景,其中Direct3d .dll在内部拥有一个唯一的持久对象,但是在调用GetIndices()时为客户端创建新的轻量级COM包装器,这样COM对象指针就会有所不同。
在官方的Direct3d规范中是否有这样的保证(或警告)?我可以编写一些测试代码来查看,但是我担心的是,如果结果是肯定的,我会将代码编写为实现中的意外,而不是API的契约。
发布于 2014-07-13 16:51:10
它应该是相同的接口指针,尽管对于Direct3D 9,如果使用D3DCREATE_PUREDEVICE,您应该小心使用Get。这些接口指针都指向Direct3D运行时在用户模式进程内存中分配的内容。
不能使用Direct3D保存指针的主要地方是:
https://stackoverflow.com/questions/24396596
复制相似问题