D3DERR_OUTOFVIDEOMEMORY和E_OUTOFMEMORY之间有什么区别?

时间:2010-02-12 03:02:02

标签: graphics visual-c++ directx

我正在开发一个使用DX9在我的XP-32中绘制原始图形的工具。

创建顶点缓冲区和索引缓冲区时,可能会出现一些创建错误。

返回代码可以是D3DERR_OUTOFVIDEOMEMORY或E_OUTOFMEMORY。

我不确定它们之间的区别。

我在DX示例中使用VideoMemory工具检查内存,并报告1024MB。

这是否意味着如果我创建一堆超过1024MB的托管资源,它会报告D3DERR_OUTOFVIDEOMEMORY?

如果进程中没有更多可用虚拟空间内存并且malloc失败,DX9将报告E_OUTOFMEMORY?

2 个答案:

答案 0 :(得分:2)

E_OUTOFMEMORY表示DirectX无法分配(即通过malloc或new)您请求的内存块。

D3DERR_OUTOFVIDEOMEMORY表示DirectX无法分配(即在gfx卡上或在主内存中保留的内存池中)您请求的内存块。

警告:司机可能撒谎。

答案 1 :(得分:1)

D3DERR_OUTOFVIDEOMEMORY是一个directx内存错误...不一定与视频内存有关,它可能占用了占用场景或绘制图像的内存,因为你发现如果你的进程没有足够的内存你就会得到E_OUTOFMEMORY 。后者指的是分配给您的进程的内存耗尽。你没有说明你有什么操作系统/硬件规格,如果你的资源不足,最好的办法是考虑获得系统内存升级。

编辑:有些笔记本电脑/上网本有一个“配备系统内存”的图形适配器,不过这些显卡对于“超越使命召唤”和其他高端产品并不严肃游戏......显卡实际上从主板上窃取了一些内存,从而增加了图形控制器可用的RAM量。如果你正在进行文字处理/电子邮件等等,它们就没问题了......但是系统ram的成本是由控制器g''集成图形控制器'... ...

希望这有帮助, 最好的祝福, 汤姆。