【发布时间】:2017-07-25 13:05:39
【问题描述】:
我还没有写过很多金属内核着色器;这是两个 RGBX-32 图像之间的新“淡入淡出”着色器,在 inBuffer1 (0.0) 到 inBuffer2 (1.0) 之间使用 0.0 到 1.0 的补间值。
这里有什么我遗漏的吗?我觉得这可能非常低效。
我的第一个想法是尝试使用矢量数据类型(例如char4)进行减法和乘法运算,认为这可能会更好,但其结果肯定是不确定的(因为某些组件将是负数)。
另外,使用 MTLTexture 和 MTLBuffer 对象有什么优势吗?
kernel void fade_Kernel(device const uchar4 *inBuffer1 [[ buffer(0) ]],
device const uchar4 *inBuffer2 [[ buffer(1) ]],
device const float *tween [[ buffer(2) ]],
device uchar4 *outBuffer [[ buffer(3) ]],
uint gid [[ thread_position_in_grid ]])
{
const float t = tween[0];
uchar4 pixel1 = inBuffer1[gid];
uchar4 pixel2 = inBuffer2[gid];
// these values will be negative
short r=(pixel2.r-pixel1.r)*t;
short g=(pixel2.g-pixel1.g)*t;
short b=(pixel2.b-pixel1.b)*t;
outBuffer[gid]=uchar4(pixel1.r+r,pixel1.g+g,pixel1.b+b,0xff);
}
【问题讨论】:
标签: metal pixel-shader