我正在尝试创建类似鬼像的相机滤镜。这需要将前一帧混合到当前帧。我使用一个FBO进行混合,然后使用第二个FBO将上下文简单地放在屏幕上。 我的实现可以在我尝试过的5个设备中的4个上工作。在第五个(三星银河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);
}
}
但是在三星上,我得到了一些正确的像素和一些随机的像素,如下例所示。一些黑色和其他随机像素与相机像素一起上升。有什么问题的想法吗?