GLSL в металл. Кафельная плитка

Я пытаюсь сделать эффект плитки из примера на шейдертое (https://www.shadertoy.com/view/3llcRN). Вот код на GLSL:

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = (2.*fragCoord.xy - iResolution.xy)/iResolution.y;    
    fragColor = vec4( texture(iChannel0, uv ).rgba );
}

Результат: введите здесь описание изображения

Вот мой код на Metal:

kernel vec4 colorKernel(sampler source, float w, float h)
{
    vec2 d = vec2(w, h);
    vec2 uv = (2.*destCoord().xy - d.xy)/h;
    return vec4( sample(source, uv).rgba );
}

И результат:

введите здесь описание изображения

Чего не хватает? Мне нужен тот же результат, что и на шейдертой


person Artem    schedule 08.06.2020    source источник
comment
Можете ли вы предоставить код, который показывает, как вы загружаете свое изображение, как вы создаете/применяете свой фильтр и как вы отображаете полученное изображение? Каждый из этих шагов влияет на результат, в основном из-за различий между координатными пространствами UIKit и CoreImage по умолчанию. Если все, что вам нужно, это повторяющееся изображение, для его получения можно использовать встроенный фильтр CIAffineTile. Даже если вам нужно написать собственное ядро, вы можете связать его с аффинным тайловым фильтром, поскольку одним из принципов проектирования Core Image является создание сложных эффектов из более мелких строительных блоков.   -  person warrenm    schedule 09.06.2020


Ответы (1)


Проблема в том, что когда координаты UV больше 1, он возвращает просто пустой цвет.

person Artem    schedule 14.06.2020