bytedance / AlphaPlayer

AlphaPlayer is a video animation engine.
Apache License 2.0
2.2k stars 336 forks source link

fix blend color #72

Closed JonaNorman closed 1 year ago

JonaNorman commented 2 years ago

The color of your left video is (A, A, A,1.0), and the color of your right video is (R A, G A, B A,1.0). The mix colors in shader are (R A, G A, B A,A). So shader color is actually pre-multiplied.

And then use it in the VideoRenderer GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA,GLES20.GL_ONE_MINUS_SRC_ALPHA) Merged (0,0,0,0) In fact, the final color is (R A A, G AA, B A A, A * A). This is wrong, blend two pre-multiplied colors that must be used GLES20.glBlendFunc(GLES20. GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA).

if left video is (A, A, A,1.0), and right video is (R , G , B ,1.0),in shader must Multiplied A

erpapa commented 2 years ago

刚开源那会就发现这个问题了,以为没多久就会修复,glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) alpha多乘了一次,会导致边缘部分色彩偏暗。