Странный текстурный результат при смешивании двух текстур камеры в glsl - PullRequest
0 голосов
/ 24 мая 2019

Я делаю простое приложение для фильтрации изображений в 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 голосов
/ 27 мая 2019

Артефакты выглядят мозаично выровненными для Мали, поэтому, если бы мне пришлось угадывать, вы читаете текущее привязанное цветное вложение кадрового буфера в качестве входной текстуры одновременно с записью в нее.

Это поведение, "определенное реализацией" в спецификации, и одновременное чтение и запись определенно будет плохо работать с рендерером на основе плиток, таким как Mali.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...