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

队列

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

它缓冲先前和当前的相机帧混合并渲染它。所以我创建了一个缓冲区 FBO 并渲染当前的相机纹理,将其重新用作低通滤波器着色器与下一个相机纹理混合的纹理。

我用一些智能手机(Galaxy S10、Nexus 6P 等)测试了我的代码,并且运行良好。然而,在 Galaxy S8(Mali-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);
}

什么会导致这种结果?提前致谢。

实体像素

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章