我正在用android做一个简单的图像过滤应用,我用同样的方法在GPUImage(https://github.com/BradLarson/GPUImage)中实现了低通滤波。
它会缓冲上一个和当前摄影机帧的混合并渲染它。所以我创建了一个缓冲区FBO,渲染当前的相机纹理,在低通滤波器着色器中重新使用它作为下一个相机纹理的混合纹理。
我在一些智能手机(Galaxy S10、Nexus6P等)上测试了代码。它工作得很好。然而,在Galaxy S8(马里-G71)中,结果很奇怪,我不知道哪里出了问题。
这些都是错误的结果
下面是我的代码:
Fragment shader:
varying vec2 vTextureCoord;
uniform sampler2D sTexture1;
uniform float filterStrength;
void main() {
vec4 texColor0 = texture2D(sTexture, vTextureCoord);
vec4 texColor1 = texture2D(sTexture1, vTextureCoord);
gl_FragColor = mix(texColor0, texColor1, filterStrength);
}
导致这种结果的原因是什么?提前谢谢。
发布于 2019-05-28 02:13:02
这些工件看起来像是瓦片对齐的马里,所以如果我不得不猜测,你正在读取当前绑定的帧缓冲区颜色附件作为输入纹理,同时写入它。
这是规范中的“实现定义”行为,并发读写肯定会在基于瓦片的渲染器上做不好的事情。
https://stackoverflow.com/questions/56289696
复制相似问题