首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Resource:ID3D11Resource跟ID3D11View

2012-12-24 
Resource:ID3D11Resource和ID3D11View?概述:ID3D11Resource 作为一个基类,它的子都是用于对渲染管道需要用

Resource:ID3D11Resource和ID3D11View

?

概述:ID3D11Resource 作为一个基类,它的子都是用于对渲染管道需要用到的数据进行封装和描述的。ID3D11View 只是对ID3D11Resource进一步的装饰。

?

资源的介绍:

资源分为缓冲资源和纹理资源

ID3D11Resource?----->?ID3D11Buffer?(缓冲资源)

ID3D11Resource?----->?ID3D11Texture1D,ID3D11Texture2D,ID3D11Texture3D?(纹理资源)

资源的属性:

Usage :资源的使用方式,例如纹理资源,是作为texture还是render target

format :数据的格式。主要是存储的格式,例如像素的存储格式之类。

pool :存放资源的存储器类型,以及管理方式。

type :资源类型。

内存划分:

1.System Memory :系统内存

2.Local Video Memory :显存,GPU会有比较高的读写能力,但是CPU读写的话效率比较低。

3.Nonlocal Video Memory (AGP/PCIE):这个是主板上的一块内存,这块内存GPU和CPU读和写的效率都比较高。

策略:如果只是CPU用的就放到系统内存,如果是GPU用的就放到LVM,如果是两者交互比较多的,就放到NVM中。此外,在使用的优先级上,GPU先使用显存,CPU先使用AGP/PCIE(效率比系统内存高)。

?

ID3D11Resource?:它不能被直接使用,一般使用它的子。

GetEvictionPriority?:的资源获取驱逐优先。

SetEvictionPriority?:将驱逐优先的资源。

?

Java代码??Resource:ID3D11Resource跟ID3D11View
  1. DXGI_RESOURCE_PRIORITY_MINIMUM??//?最小优先级??
  2. DXGI_RESOURCE_PRIORITY_LOW??
  3. DXGI_RESOURCE_PRIORITY_NORMAL??
  4. DXGI_RESOURCE_PRIORITY_HIGH??
  5. DXGI_RESOURCE_PRIORITY_MAXIMUM?//?最大优先级??

?这两个方法用于处理,当存储空间不够的时候优先释放那些内存的,主要用于对性能的优化。这里不清楚的是,不知道是先驱逐优先级高的,还是优先级低的。

getType?:获取的资源的类型,一看应该很明白哦。

?

Cpp代码??Resource:ID3D11Resource跟ID3D11View
  1. typedef?enum?D3D11_RESOURCE_DIMENSION?{???
  2. ??D3D11_RESOURCE_DIMENSION_UNKNOWN????=?0,??
  3. ??D3D11_RESOURCE_DIMENSION_BUFFER?????=?1,??
  4. ??D3D11_RESOURCE_DIMENSION_TEXTURE1D??=?2,??
  5. ??D3D11_RESOURCE_DIMENSION_TEXTURE2D??=?3,??
  6. ??D3D11_RESOURCE_DIMENSION_TEXTURE3D??=?4??
  7. }?D3D11_RESOURCE_DIMENSION;??

?

ID3D11Buffer?:缓冲区接口访问缓冲区的资源,即非结构化的内存(这里提到非结构化内存是因为还有结构化内存)。缓冲区通常存储顶点或索引数据。

?ID3D11Texture1D,ID3D11Texture2D,ID3D11Texture3D?:?纹理接口访问 纹理数据,这是结构化的内存。

上述这些接口都只有一个方法:GetDesc?用来获取描述信息,这说明它们自身的内容并不是有自己提供接口给外部使用,而是借组第三方接口来进行使用。从某种意义上来讲,在我们使用的时候,我们只需把它们当中一个普通的变量即可,真正需要关注的是使用它们的类。

?

?

?

?

ID3D11View?:一个ID3D11View的子类可以把渲染过程中,需要用到的一部分资源绑定到渲染管道。

?

Java代码??Resource:ID3D11Resource跟ID3D11View
  1. void?GetResource(??
  2. ??[out]??ID3D11Resource?**ppResource??
  3. );??

?这是它的唯一方法,可以获取与之对应的资源对象。

?

ID3D11DepthStencilView?:访问数据在纹理深度模版。

ID3D11RenderTargetView?:访问数据的渲染目标。

ID3D11ShaderResourceView?:在着色器资源的访问数据。

ID3D11UnorderedAccessView?:在一个无序的资源访问数据。

?

Cpp代码??Resource:ID3D11Resource跟ID3D11View
  1. void?GetDesc(??
  2. ??[out]??D3D11_DEPTH_STENCIL_VIEW_DESC?*pDesc??
  3. );??

与ID3D11Resource的子类相似,ID3D11View 的子类也只有一个获取状态描述的方法。为什么会出现这样的情况呢?主要是因为这些资源对象,主要是作为一种介质传入给渲染管道,然后被众多着色器使用,使用它们的数据主要是HLSL。

热点排行