DirectX之DirectCompute的计算着色器(3)

                                                                  2. 访问资源

 

 

访问资源有几种方法。无论如何,Direct3D保证对超出范围访问的任何资源返回零。

  1. 2.1 通过字节偏移量访问
  2. 2.2 通过索引访问
  3. 2.3 通过Mips方法访问
  4. 相关主题

 

2.1 通过字节偏移量访问

可以使用字节偏移访问两个新的缓冲区类型:

  1. ByteAddressBuffer是只读缓冲区。
  2. RWByteAddressBuffer是读或写缓冲区。

 

2.2 通过索引访问

资源类型可以使用索引来引用资源中的特定位置。考虑以下这个例子:

uint2 pos;

Texture2D<float4> myTexture;

float4 myVar = myTexture[pos];

 

这个示例将4个浮点值赋给myVar变量。这些浮点值被存储在位于myTexture 2D纹理资源的pos位置的纹素(Texel/纹理上的像素点) 上。

 

注释

  1. 以这种方式访问纹理的默认值是纹理映射mipmap/贴图/率纹理/纹理映射)级别0 (最详细的级别)。
  2. 这个“float4 myVar = myTexture[pos];”行相当于“float4 myVar = myTexture.Load(uint3(pos,0));”。通过索引访问是一种新的HLSL语法增强。
  3. 在2010年6月及以后版的DirectX SDK的编译器中, 允许您索引除字节地址缓冲区之外的所有资源类型。
  4. 2010年6月及以后的编译器允许声明本地资源变量。您可以将全局定义的资源(比如myTexture)分配给这些变量,并与全球同行一样使用它们。

 

2.3 通过Mips方法访问

纹理对象有一个mips方法(例如,Texture2D.mips),您可以使用它来指定纹理映射级别。这个示例读取存储在(7,16)纹理映射级别2上的2D纹理颜色:

uint x = 7;

uint y = 16;

float4 myColor = myTexture.mips[2][uint2(x,y)];

 

这是2010年6月及以后的编译器的增强。这个“myTexture.mips[2][uint2(x,y)]”表达式等价于“myTexture.Load(uint3(x,y,2))”。

 

相关主题

计算着色器概述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值