Metal 着色语言编程指南 十

纹理(Texture)

   纹理数据类型是一个指向1, 2 或者3维纹理数据的句柄.   纹理数据则是一个纹理的某个等级(level)的mipmap的全部或者部分数据.   
enum class access { sample, read, write };

texture1d<T, access a = access::sample>
texture1d_array<T, access a = access::sample>
texture2d<T, access a = access::sample>
texture2d_array<T, access a = access::sample>
texture3d<T, access a = access::sample>
texturecube<T, access a = access::sample>
texturecube_array<T, access a = access::sample>
texture2d_ms<T, access a = access::read>

带深度信息的纹理必须按照下面的例子来声明:
depth2d<T, access a = access::sample>
depth2d_array<T, access a = access::sample>
depthcube<T, access a = access::sample>
depthcube_array<T, access a = access::sample>
depth2d_ms<T, access a = access::read


注意:    texturecube_array  和  depthcube_array  纹理类型只在OS X上支持 . texturecube的读写操作旨在 OS X 上支持 .

这里的T 表示对纹理数据进行读写操作时的颜色类型, 不含深度信息的纹理数据类型可以为half, float, short, ushort, int 或者 uint,  带深度信息的纹理数据类型必须为float. 

access 修饰符决定了纹理数据应该如何被访问:
  sample:  支持采样器(sampler),  支持通过采样器访问纹理数据, 也可以不使用采样器访问数据
  read:  不支持采样器,  kernal 或者 graphics 函数可以读取纹理数据
  write:  kernal 或者graphics 函数可以将数据写入纹理

注意:对于多采样纹理, 只支持read 访问, 对于深度纹理, 只支持 sample和read 访问. 

下面是一个使用access修饰符的纹理对象作为函数参数的例子: 
void foo (texture2d<float> imgA [[ texture(0) ]],
    texture2d<float, access::read> imgB [[ texture(1) ]],
    texture2d<float, access::write> imgC [[ texture(2) ]])
{
    ...
}



注意: 如果T是int或者short, 纹理数据类型是带符号整型, 如果T是uint或者ushort, 纹理数据类型必须是无符号整型, 如果T是half, 纹理数据类型可以是归一化(normalized)的整数或者半精度浮点类型. 如果T是float, 纹理数据类型可以使归一化的整数或者半精度或单精度浮点类型. 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值