首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetIndices()会在CreateIndexBuffer()和SetIndices()之后返回相同的缓冲区指针吗?

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

Stack Overflow用户
提问于 2014-06-24 21:26:11
回答 1查看 125关注 0票数 0

在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的契约。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-13 16:51:10

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

不能使用Direct3D保存指针的主要地方是:

  • 指针从Lock/Map返回。它们应该按短顺序解锁/取消映射。
  • 在释放设备的所有副本之后,所有Direct3D对象都是无效的。
  • Direct3D 9 丢失装置您有许多指向接口的有效指针,这些指针在重置之前无法执行任何操作。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24396596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档