将 ci.metal 转换为内核核心图像语言

问题描述

在我的任务中,我没有能力在项目中连接 сi.Metallib。我有一个 ci.Metallib 着色器,这种

#define TRACKING_HEIGHT 0.15
#define TRACKING_SEVERITY 0.025
#define TRACKING_SPEED 0.2
#define SHIMMER_SPEED 30.0
#define RGB_MASK_SIZE 2.0

#include <Metal_stdlib>
#include <CoreImage/CoreImage.h>
using namespace Metal;

extern "C" { namespace coreimage {
    
    float mod(float x,float y) {
        return float(x - y * floor(x/y));
    }

    float4 mainImage(sampler_h src,float time,float amount) {
        // const float magnitude = sin(time) * 0.1 * amount;

        float2 greenCoord = src.coord();

        greenCoord.x -= sin(greenCoord.y * 500.0 + time) * INTERLACING_SEVERITY * amount;

        float scan = mod(greenCoord.y,3.0);

        float yOffset = floor(sin(time * SHIMMER_SPEED));
        float pix = (greenCoord.y+yOffset) * src.size().x + greenCoord.x;
        pix = floor(pix);

        float4 colMask = float4(mod(pix,RGB_MASK_SIZE),mod((pix+1.0),mod((pix+2.0),1.0);
        colMask = colMask / (RGB_MASK_SIZE - 1.0) + 0.5;

        // Tracking
        float t = -time * TRACKING_SPEED;
        float fractionalTime = (t - floor(t)) * 1.3 - TRACKING_HEIGHT;
        if(fractionalTime + TRACKING_HEIGHT >= greenCoord.y && fractionalTime <= greenCoord.y)
        {
            greenCoord.x -= fractionalTime * TRACKING_SEVERITY;
        }

        return src.sample(greenCoord).b*colMask*scan;
    }
}}

我正在尝试以这种方式重写它

kernel vec4 vhsGlitchTracking(sampler image,float amount) {
                
                float mod(float x,float y) {
                    return float(x - y * floor(x/y));
                }
                
                vec2 greenCoord = destCoord();

                .......????
            }
""") 

但显然我写的完全是胡说八道。帮我翻译成可接受的内核核心映像。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)