本文翻译整理自:Core Image Kernel Language Reference(更新日期:2015-01-12
https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CIKernelLangRef/Introduction/Introduction.html#//apple_ref/doc/uid/TP40004397-CH1-SW1
文章目录
一、导言
Core Image Kernel Language定义了函数、数据类型和关键字,可用于为编写的自定义Core Image 过滤器指定图像处理操作。
您还可以使用OpenGL着色语言(glslang)的子集。
本文档定义了Core Image Kernel Language 中的符号,并列出了 Core Image 过滤器不支持的OpenGL着色语言中的符号。
任何想要使用Core图像API编写自定义图像处理过滤器的开发人员都应该阅读本文档。
在阅读本文档之前,您应该熟悉请参阅部分中列出的文档。
本文件的组织
Core Image Kernel Language 定义了可用于编写图像处理例程的函数、数据类型和关键字,并列出了OpenGL着色语言中不受支持的符号。
另见
- Core Image 参考集合 定义了用于定义和访问图像处理过滤器的类。
- Core Image 编程指南 描述了如何编写自定义图像处理过滤器并将它们打包为图像单元。
它还提供了几个内核例程示例。 - OpenGL着色语言,可从OpenGL网站获得,提供了对glslang的引用。
二、Core Image Kernel Language
以下部分列出了Core Image Kernel Language提供的符号:
您可以将这些符号与Core Image 支持的任何OpenGL着色语言例程一起使用。
请参阅无法使用的不支持项目。
1、函数
本节介绍以下功能:
- 比较
- cos_
- cossin
- cossin_
- destCoord
- premultiply
- sample
- samplerCoord
- samplerExtent
- samplerOrigin
- samplerSize
- samplerTransform
- sin_
- sincos
- syncos_
- tan_
- unpremultiply
compare
genType compare (genType x, genType y, genType z)
对于每个组件,返回x < 0 ? y : z
。
请注意,genType
是任意向量类型的占位符。
cos_
genType cos_ (genType x)
类似于cos (x)
,只是x
必须在[–pi
,pi
]范围内。
请注意,genType
是任意向量类型的占位符。
cossin
vec2 cossin (float x)
返回vec2 (cos (x), sin (x))
。
cossin_
vec2 cossin_ (float x)
返回vec2 (cos (x), sin (x))
。
此函数期望x
在[–pi
,pi
]范围内。
destCoord
varying vec2 destCoord ()
返回当前正在计算的像素 在工作空间坐标中的位置。
目标空间是指正在渲染的图像的坐标空间。
premultiply
vec4 premultiply (vec4 color)
将color
参数的红色、绿色和蓝色组件乘以其alpha组件。
sample
vec4 sample (uniform sampler src, vec2 point)
返回从采样器src
在位置point
产生的像素值,其中point
在采样器空间中指定。
samplerCoord
varying vec2 samplerCoord (uniform sampler src)
返回与当前输出像素关联的采样器src
在采样器空间中的位置(即,在应用与src
关联的任何变换矩阵之后)。
样本空间指的是您正在纹理的坐标空间。
请注意,如果源数据是平铺的,样本坐标将有一个偏移量(dx/dy)。
您可以使用samplerTransform
函数将目标位置转换为采样器位置。
samplerExtent
uniform vec4 samplerExtent (uniform sampler src)
返回世界坐标中采样器的范围,作为四元素向量 [x, y, width, height]
。
samplerOrigin
uniform vec2 samplerOrigin (uniform sampler src)
相当于samplerExtent (src).xy
。
samplerSize
uniform vec2 samplerSize (uniform sampler src)
相当于 samplerExtent (src).zw
。
samplerTransform
vec2 samplerTransform (uniform sampler src, vec2 point)
返回源坐标空间中与工作空间坐标(第二个参数)中定义的位置相关联的位置(第一个参数)。
(请记住,工作空间坐标反映您应用于工作空间的任何转换。)
例如,如果您正在修改工作空间中的一个像素,并且您需要在原图中检索围绕该像素的像素,您将进行类似于以下的调用,其中d
是您正在修改的像素在工作空间中的位置,image
是像素的图像源。
samplerTransform(image, d + vec2(-1.0,-1.0));
samplerTransform(image, d + vec2(+1.0,-1.0));
samplerTransform(image, d + vec2(-1.0,+1.0));
samplerTransform(image, d + vec2(+1.0,+1.0));
sin_
genType sin_ (genType x)
类似于sin (x)
,只是x
必须在[–pi
,pi
]范围内。
注意genType
是任意向量类型的占位符。
sincos
vec2 sincos (float x)
返回vec2 (sin (x), cos (x))
。
syncos_
vec2 sincos_ (float x)
返回vec2 (sin (x), cos (x))
。
此函数期望x
在[–pi
,pi
]范围内。
tan_
genType tan_ (genType x)
类似于tan (x)
,只是x
必须在[–pi
,pi
]范围内。
请注意,genType
是任意向量类型的占位符。
unpremultiply
vec4 unpremultiply (vec4 color)
如果color
参数的alpha组件大于0,则将红色、绿色和蓝色组件除以alpha。
如果alpha为0,则此函数返回color
。
2、数据类型
sampler
指定从CIS采样器传入的用于从数据中获取样本的采样器__color
指定需要与当前CIContext工作色彩空间颜色匹配的内核参数的类型。__table
指定从查找表中获取值的采样器的标志。
必须在sampler
类型之前加上__table
标志。
该标志确保Core图像不会使用世界坐标对表值进行采样。
例如,要在名为shadedmaterial
的内核中使用查找表采样器,内核声明将是:kernel vec4 shadedmaterial(sampler heightfield, __table sampler envmap, float surfaceScale, vec2 envscaling)
使用__table
标志可以防止envmap
采样器值被转换,即使阴影材质内核被插入到带有仿射变换的滤波器链中。
如果您不这样标记采样器,而是将阴影材质滤波器链接到仿射变换以进行旋转,那么在环境映射中查找值会导致获得旋转值,这是不正确的,因为查找表只是一个数据采集。
3、关键词
kernel
指定内核例程。
内核例程由CIKernel类提取和编译。
内核封装计算输出图像中单个像素所需的计算。
每个内核在其返回类型中由kernel
关键字标记。
内核的底层返回类型必须是vec4
。
Core Image 需要这种类型才能返回当前正在评估的输入像素的输出像素。
内核的所有参数都隐式标记为uniform
。
不允许标记out
和inout
的参数。
您可以将以下类型传递给内核例程:sampler
:应用时需要一个CIS采样器对象。__table
:sampler
类型的限定符。float
、vec2
、vec3
、vec4
:需要NSNumber或CIVector。__color
:当传递到程序中时,将与CIContext工作色彩空间匹配的颜色。
应用时,它需要一个CIColor对象。
对于内核程序,它似乎是premultiplyRGBA格式的vec4
类型。
4、不支持的项目
Core Image 不支持OpenGL着色语言源码预处理器。
此外,以下内容未实现:
- 数据类型:
mat2
,mat3
,mat4
,struct
,arrays
- 语句:
continue
、break
、discard
。
仅当代码编译时可以推断循环条件时,才支持其他流控制语句(if
、for
、while
、do while
)。 - 表达式运算符:
% << >> | & ^ || && ^^ ~
- 内置函数:
ftransform
,matrixCompMult
,dfdx
,dfdy
,fwidth
,noise1
,noise2
,noise3
,noise4
,refract
2024-06-19(三)
标签:Core,Apple,Reference,Image,采样器,vec2,sampler,genType From: https://blog.csdn.net/lovechris00/article/details/139795064