关于D3D资源的创建
来源:互联网 发布:智能网络机器人 编辑:程序博客网 时间:2024/05/16 05:46
http://www.cnblogs.com/cxrs/archive/2013/04/03/D3DResourceManager.html
1 Resource的创建与存放。
如何创建3D资源对3D应用的性能影响比较大,因此3D应用开发者最好对这部分深入了解,以便配合D3D Runtime和Display Driver把不同类型、不同用途的Resource创建在最合适的地方。
在创建D3D资源时,可以存放到三种类型的Memory:System Memory,AGP Memory, Video Memory.
- System Memory:就是系统内存,存放在System Memory上的Resource是不能直接被GPU访问的,对于GPU来说是不可见的,这种Resource必须经过拷贝才能运用到GPU的渲染中。
- AGP Memory: 也叫Share System Memory或者Non-Local Video Memory, 其实就是系统内存的一部分,只是这部分内存已经被Mapping为显存的一部分,不但CPU可以访问这部分内存,而且GPU也可以通过PCI-E/AGP总线透明访问这部分内存,就像显存一样,但GPU访问速度比显存慢,毕竟经过映射,而且还要走PCI-E总线进行读写。
- Video Memory: 显存,也叫做Local Video Memory, 只有GPU可以访问,CPU不可见也不能访问,速度最快。
对于3D应用来说,资源创建在哪里并没有完全的决定权,最终决定权在D3DRuntime和显卡驱动,以及VideoMemoryManager的策略,但是3D应用可以通过在创建资源时设置一些Flags,以便使Runtime和Driver更加正确有效的管理资源。其中有两个Flags最为关键,D3DPOOL和D3DUSAGE,两者必须配合使用。
下图为独立显卡的存储架构:
下图为集成显卡的存储架构:
2 D3DPOOL
D3DPOOL包括D3DPOOL_DEFAULT、D3DPOOL_MANAGED、D3DPOOL_SYSTEMMEM、D3DPOOL_SCRATCH。
- D3DPOOL_DEFAULT:一般存放在video memory或AGP memory中。由于在系统内存中没有备份,在Device Lost时需要释放后重新创建。
- D3DPOOL_MANAGED:和D3DPOOL_DEFAULT的区别在于D3DRuntime会在System Memory中为其创建备份,Device Lost后不需要处理,D3DRuntime会自动用备份通过显卡驱动重新创建出资源。
- D3DPOOL_SYSTEMMEM只存放于系统内存中,这种资源不能被GPU访问,Device Lost后不需要处理。
在创建Resource时,对指定 D3DPOOL时有些限制,比如创建RenderTarget和DepthStencil只能标志为D3DPOOL_DEFAULT,被指定为dynamic的resource只能标志为D3DPOOL_DEFAULT或D3DPOOL_SYSTEMMEM,详细可参考D3D SDK 文档。
3, D3DUSAGE
D3DUSAGE用于标志D3D Resource的用途,下表为D3DUSAGE和各种资源的组合。X代表此Usage可用于某Resource的创建。
Usage
Vertex buffer create
Index buffer create
Texture create
Cube texture create
Volume texture create
Surface create
Check device format
D3DUSAGE_AUTOGENMIPMAP
x
x
x
D3DUSAGE_DEPTHSTENCIL
x
x
x
x
D3DUSAGE_DMAP
x
x
D3DUSAGE_DONOTCLIP
x
x
D3DUSAGE_DYNAMIC
x
x
x
x
x
x
D3DUSAGE_NONSECURE
x
x
x
x
x
x
x
D3DUSAGE_NPATCHES
x
x
D3DUSAGE_POINTS
x
x
D3DUSAGE_RTPATCHES
x
x
D3DUSAGE_RENDERTARGET
x
x
x
x
D3DUSAGE_SOFTWAREPROCESSING
x
x
x
x
x
x
D3DUSAGE_TEXTAPI
x
x
D3DUSAGE_WRITEONLY
x
x
- 关于D3D资源的创建
- D3D资源的概念
- D3D资源管理-什么资源应该创建在什么地方-应该配以什么样的属性
- 关于D3D的一些知识
- D3D学习笔记之一---创建D3D环境的窗口
- 学习D3D游戏编程的资源
- D3DPOOL和D3D资源
- D3DPOOL和D3D资源
- D3DPOOL和D3D资源
- D3D资源分配惯例
- D3DPOOL和D3D资源
- D3D资源分配惯例
- D3D游戏降帧的动态创建D3D设备以及ShellCode HOOK玩法
- D3D游戏降帧的动态创建D3D设备以及ShellCode HOOK玩法
- 如何创建一个VS2005 VC++下的D3D项目环境
- d3d中创建一个窗口,即设备的代码
- D3D中如何创建左手坐标系的观察矩阵
- myeclipse关于properties资源文件的创建和读取
- 漂亮的UI库集合
- JSR303验证
- Linux基本命令(未完待续)
- 阿里巴巴实时数据公共层助力双11媒体直播
- gdb/Eclipse/Filezilla/SecureCRT/SourceInsight
- 关于D3D资源的创建
- python文件操作
- 理想的程序员
- 各种编码解释和由来
- Oracle EBS Alert预警系统管理(2)-调用并发请求程序
- chromium 打印RenderTree
- Playground 快速原型制作
- PAT-中国大学MOOC-陈越、何钦铭-数据结构2015春习题集-00-自测2. 素数对猜想 (20)
- 【小超_Android】2015最流行的android组件、工具、框架大全(前续)