最近在做OpenGL4.5的驱动,顺便也做一下笔记,zz
Texture image unit
是gpu 上处理texture的一种资源,各家的实现不一样,所以数量也不一样,从逻辑上可以理解:一个texture unit 上有spec上规定的所有的texture target(TEXTURE_1D, TEXTURE_2D, TEXTURE_3D,等等)
Sampler
是一种特殊的uniform;sampler类型的作用 是确定texture unit 上相应的target绑定的texture object在texture lookup(就是spec上规定的一些采样函数) 的时候被使用,sampler的值是确定哪一个texture unit 被访问;例如:
sampler2D 1 表示 TEXTURE1上 的TEXTURE_2D target 绑定的texture object 将被处理
Sampler Object
就是对sampling state的封装,主要包含 wrap Mode,filter mode,compare function,compare mode,min/max lod,
border color,lodbias..。一个sampler object 可以同时被绑定到多个texture unit
Texture Object
一个texture object 由texture image 和sampling state 组成 。当一个texture unit上的sampler object 和texture object 同时存在时,texture object下的sampling state将失效;texture image主要包含sample count,sample buffer,维度信息,minmap的信息,
texture format,swizzle mode,等等
一个texture unit 的一个target 一次只能绑定一个texture object,
一个texture unit一次只能执行一个texture target 绑定的texture object
一个texture object 可以同时被绑定到不同texture unit 的相同texture target 上