关于D3D中AGP显存,内存,显存三种内存的解释
看到D3D的粒子这章时发觉自己对三种显卡使用的内存理解还不够所以就到网上大海捞针了一把,最后在gamedev.net的论坛里找到一个陈年老帖里面老外讲的头头是道,一语惊醒我这梦中人啊!
三种内存AGP内存,显卡本地内存,系统内存,其中我们都知道显卡本地内存就是显存,系统内存就是咱那内存条,那这AGP内存是个啥玩意啊?其实是因为在以前显卡内存都很小,那时还是在显存是16M,32M为主流的时候,如果你运行一个需要很多纹理的3D程序,那么显存一会就不够用了,那该咋办呢?只好问系统内存借点用用了!这就是AGP内存的由来,在我们电脑BIOS中有个设置AGP Aperture的选项,这里就是设置显卡可以使用系统内存的最大允许值,通常是设置为64M。注意,这里只是说最大允许值,并不是一开机他就把这64M给拿走了,你的256内存就变成192了!而是你的内存依然还是256M,只是限制显卡最多可以使用64M的系统内存。
再说说这三个内存的速度的不同吧:
系统内存当然是人家CPU读和写操作最快啦!而显卡就会相对于使用自己的显存慢上很多很多!
AGP内存是显卡读和写的速度一般,当然肯定没有显卡使用显存速度快啦!CPU就相对复杂点了,CPU读取AGP内存速度很慢,但是写的速度却并不会慢,而是速度一般,比使用系统内存慢那么一点,也就是说适合CPU去写但不适合读。有人就要问了,同样是系统内存只不过名字不一样,咋速度的就有差别了呢?这个嘛,我也不太清楚,老外没有说的太详细,大家只要记住就行了![那是因为CPU读没有cache,写虽然也没有cache,但有write combine(这个中文好像叫快写吧?)。另外bios里设置的那个AGP aperture size很早就被驱动或者系统忽略了]
最后说的就是显存了,这个很简单,当然是显卡读和写的速度最快,而CPU读和写的速度肯定要慢好多的!
说了三个内存的区别,现在说说他们都有什么用处吧:
这里涉及一个D3DUSAGE枚举量,D3DUSAGE_DYNAMIC,这个变量是在你创建资源时使用到的,它指示D3D将资源指定为动态的,而动态的意思就是需要经常修改,修改通常是CPU进行修改,所以动态资源应该放在AGP内存中。这样对速度的影响可以减至最小。
D3DUSAGE_WRITEONLY标志您所创建的资源只允许写操作。使用这个标志可以让设备将这个资源放到内存中最适合进行写处理和渲染的区域。如果没有使用D3DUSAGE_WRITEONLY标志,那么设备将假设您创建的资源既用来读也用来写,那么设备将很可能选择一块内存区域,读和写操作的速度都适中的地方。这将牺牲一部分处理和渲染速度。
访问速度和lock的类型、资源的创建类型相关吧?
对,D3DLOCK的标志和资源创建类型也有影响,但是三种内存是另外一种优化访问的方法,因为比如粒子系统就需要使用AGP内存,因为他需要CPU经常进行修改,又需要图形处理卡经常读取,如果放在显存那么CPU修改的效率太低了!如果放在内存,那么图形处理卡访问的速度太慢!所以这三种内存还是需要分别清楚的!
AGP:加速图形端口(Accelerate Graphics Port)
内存池
表面和其它一些Direct3D资源被放在多种内存池中。内存池的种类由D3DPOOL枚举类型的一个成员来指定。可用到的内存池有下列几种:
l D3DPOOL_DEFAULT——表示Direct3D将根据资源的类型和用途把它们放在最合适的地方。这有可能是显存、AGP内存或者系统内存中。值得注意的是,这种内存池中的资源必须要在IDirect3DDevice9::Reset被调用之前消毁掉,并且再次使用时必须重新初始化。
l D3DPOOL_MANAGED——资源将由Direct3D管理并且按设备的需要来指定放在显存还是放在AGP内存中。当应用程序访问和改变资源时它先把这些资源拷贝到系统内存中,当需要时Direct3D会自动把它们拷贝到显存里。
l D3DPOOL_SYSTEMMEM——指定资源放在系统内存中。
l D3DPOOL_SCRATCH——指定资源放在系统内存中,它与D3DPOOL_SYSTEMMEM不同之处在于使用这些资源不必受图形设备的限制。因此,参数使图形设备不能访问该内存池的资源,但资源可以相互拷贝。
关于D3D中AGP显存,内存,显存三种内存的解释相关推荐
- Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...
- 深入理解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...
- python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...
Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...
- 计算机怎么删除表格,电脑中删除Excel2010表格多余图片的三种方法
为了让表格看起来更加直观,很多朋友都会在Excel中插入图片.那么,当我们大批量插入图片时,如果想要删除的话,应该怎么办呢?以下是系统城小编为您带来的电脑中删除Excel2010表格多余图片的三种方法 ...
- java循环do while_Java中for、while、do while三种循环语句的区别介绍
这篇文章主要介绍了Java中for.while.do while三种循环语句的区别介绍的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 本文通过实例讲解给大家介绍Java中for.whil ...
- JAVA中几种循环结构的表示_本文通过实例讲解给大家介绍Java中for、while、do while三种循环语句的区别,具体详情如下所示:第一种:for循环 循环结构for语句的格式...
本文通过实例讲解给大家介绍Java中for.while.do while三种循环语句的区别,具体详情如下所示: 第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后 ...
- linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式
主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...
- 服务器UDIMM, LRDIMM,RDIMM三种内存的区别
服务器UDIMM, LRDIMM,RDIMM三种内存的区别 UDIMM RDIMM LRDIMM 区别与应用 随着应用程序的不断增长,内存被迫承担着更大压力.目前不管是服务器租用还是PC领域, DDR ...
- Excel中数据透视表数据源更新的三种方式
Excel中数据透视表数据源更新的三种方式 1.在原有的基础上重新选择数据源 2.变数据源为表格形式,在创建一个透视表,之后如果添加的数据,选中透视表右键刷新即可 3.利用更新过的数据源再重新创建一个 ...
- 简单说一linux内核的内存模型(平坦,不连续,稀疏等三种内存模型)
目录 Linux内核支持的三种内存模型 CONFIG_FLATMEM(平坦内存模型) 基本概念(以第一个为例,不在复述) 所以说什么是平坦模型 所以说什么是不连续模型 所以说什么是稀疏模型 总结 鸣谢 ...
最新文章
- [css] 举例说明clear取值有哪些?
- mysql数据库初识实训总结_MySQL(数据库)的初识
- nodejs常用组件
- 【kafka】Replication factor: 1 larger than available brokers:0
- 在SQL Server中加入包含假设和CE模型变化
- 三年后,人工智能将彻底改变前端开发?
- Scala学习(一):Scala简介与Hello World!
- 培养一个数据人才需要多少年?
- tsm备份mysql_基于tsm的oracle数据库备份及恢复
- 不看后悔!史上最全面的电力系统150+90问!——电力巡检篇
- 快速切换ip没必要用工具
- python爬虫框架论文开题报告范文_基于Scrapy的分布式网络爬虫的设计与实现.doc...
- 爬虫爬取到百度首页html,python爬虫实战之爬取百度首页的方法
- arcgis路网密度计算、提取中心线、面积计算
- 手机淘宝自动加好友及聊天实现
- 惠普HP Ink Tank 118 打印机驱动
- excel中添加有效性验证或数据验证时不选择第一行列标题的解决方法
- Mongo第三个参数的用法
- python正则爬取微信阅读总榜单写入csv
- int 长度 mysql_MySQL int 类型的长度和范围解惑