在glsl中混合两个相机纹理时,奇怪的纹理结果

时间:2019-05-24 09:30:05

标签: android opengl-es

我正在android中制作一个简单的图像过滤器应用程序,并在GPUImage(https://github.com/BradLarson/GPUImage)中使用相同的方法实现了低通滤波器

它缓冲先前和当前相机帧的混合并进行渲染。 因此,我创建了一个缓冲区FBO并渲染当前的相机纹理,然后将其用作下一个相机纹理在低通滤镜着色器中混合的纹理。

我在一些智能手机(Galaxy S10,Nexus 6P等)上测试了我的代码,并且效果很好。但是在Galaxy S8(Mali-G71)中,结果很奇怪,我不知道出了什么问题。

这些是错误的结果

enter image description here enter image description here

这是我的代码:

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);
}

什么会导致此结果? 预先感谢。

1 个答案:

答案 0 :(得分:0)

工件看起来与Mali对齐,因此,如果我不得不猜测,您正在将当前绑定的帧缓冲区颜色附件作为输入纹理读取,同时对其进行写入。

这是规范中的“实现定义”行为,并且并发读写肯定会在像Mali这样基于图块的渲染器上做坏事。