Получение "предыдущих (n) кадров" в шейдере obs-shaderfilter
Я пишу простой шейдер для OBS с помощью плагина obs-shaderfilter, и я хотел бы получить доступ к "предыдущему кадру" или даже к "предыдущим N кадрам", чтобы я мог реализовать сглаживание времени, но не https://obsproject.com/docs/graphics.html и примеры obs-shaderfilter показывают способ либо получить ссылку на предыдущие кадры, либо кэшировать кадры, когда они запускаются с помощью шейдера.
Получить "пиксели" из текущего кадра довольно просто:
...
float4 get(VertData v_in, float x, float y)
{
return image.Sample(
textureSampler,
float2(
v_in.uv.x - x * uv_pixel_interval.x,
v_in.uv.y - y * uv_pixel_interval.y
)
);
}
float4 mainImage(VertData v_in) : TARGET
{
float4 c, p1, p2, p3, p4, p5, p6, p7, p8;
p1 = get(v_in, -1,-1); p2 = get(v_in, 0,-1); p3 = get(v_in, 1,-1);
p4 = get(v_in, -1, 0); c = get(v_in, 0, 0); p5 = get(v_in, 1, 0);
p6 = get(v_in, -1, 1); p7 = get(v_in, 0, 1); p8 = get(v_in, 1, 1);
return processKernel(c, p1, p2, p3, p4, p5, p6, p7, p8);
}
...
но для того, чтобы выполнить сглаживание времени, шумоподавление и т. д. Мне нужно работать с одним или несколькими предыдущими кадрами, и я не могу понять, возможно ли это вообще или нет, учитывая отсутствие документации вокруг ограниченной формы. HLSL, который выставляет OBS.
Кто-нибудь знает, возможно ли это, и если да, то как должен выглядеть код для достижения этой цели?