Я пытаюсь создать призрачный фильтр для камеры.Это требует смешивания предыдущего кадра с текущим.Я использую один FBO для микширования, а второй - просто помещаю контекст на экран.Моя реализация работает на 4 из 5 устройств, которые я пробовал.На пятом (Samsung galaxy S7) я получаю несколько случайных пикселей.
Более простой шейдер для воспроизведения ошибки заключается в следующем (счетчик кадров и обрезка предназначены только для отладки).В результате я попадаю в центр экрана, постепенно увеличивая линию.
uniform samplerExternalOES camTexture;
uniform sampler2D fbo;
uniform int frame_no;
varying vec2 v_CamTexCoordinate;
void main ()
{
vec2 uv = v_CamTexCoordinate;
if(frame_no<10){
gl_FragColor = texture2D(camTexture, uv);
}else{
if(uv.y>0.2 && uv.y<0.8 && uv.x>0.2 && uv.x<0.8)
gl_FragColor = texture2D(fbo, uv + vec2(0.0, +0.005));
else
gl_FragColor = texture2D(camTexture, uv);
}
}
Но на Samsung я получаю несколько правильных и случайных пикселей в качестве следующего примера.Некоторые черные и другие случайные пиксели растут вместе с пикселями камеры.Есть идеи о том, что может быть не так?
Образец ошибки
Правильный образец