Так что проблема здесь в какой-то дерьмовой поддержке Microsoft webgl.
У нас есть 2 случая, EDGE и IE11.
В IE11 предварительно умноженное значение alpha всегда установлено на true, в то время как EDGE выглядит так, как будто оно поддерживает параметр, но ошибка все равно есть.
![example of the error](https://i.stack.imgur.com/hkw2H.png)
Текстура приобретает мягкий альфа-синеватый оттенок
Мне удалось решить проблему с изменением шейдера для каждого фильтра, думаю, за счет производительности для каждого браузера.
Отличие от этого:
tint: 'precision highp float;\n' +
'uniform sampler2D uTexture;\n' +
'uniform vec4 uColor;\n' +
'varying vec2 vTexCoord;\n' +
'void main() {\n' +
'gl_FragColor = texture2D(uTexture, vTexCoord);\n' +
'gl_FragColor.rgb *= (1.0 - uColor.a);\n' +
'gl_FragColor.rgb += uColor.rgb;\n' +
'}'
к этому:
tint: 'precision highp float;\n' +
'uniform sampler2D uTexture;\n' +
'uniform vec4 uColor;\n' +
'varying vec2 vTexCoord;\n' +
'void main() {\n' +
'vec4 color = texture2D(uTexture, vTexCoord);\n' +
'gl_FragColor = color;\n' +
'if (color.a > 0.0) {\n' +
'gl_FragColor.rgb *= (1.0 - uColor.a);\n' +
'gl_FragColor.rgb += uColor.rgb;\n' +
'gl_FragColor.a = color.a;\n' +
'}\n' +
'}'
Я постараюсь выпустить релиз как можно скорее.