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, 纹理数据类型可以使归一化的整数或者半精度或单精度浮点类型. 

注:  mipmap 是一种纹理映射方式, 请参见:  http://baike.baidu.com/link?url=Bp2S4kep-e_KeUR0_o8XgTgn9pFNJymBPjyhN3ymt3G4NieXo-pe8cD_u36muzZgCkS251nG2Z-jKKUNG9Y_cq

你可能感兴趣的:(ios,metal,shading)