Webgl Blending смешивается с белым - PullRequest
0 голосов
/ 23 апреля 2019

Я написал библиотеку для webgl, в ней много тестов, и эти тесты прекрасно выполняются, в том числе и для смешивания.

Я настроил тест для стандартного смешивания Src_Alpha, One_minus_Src_Alpha, и тест правильно отображает результат:

enter image description here

Это изображение получается путем пересечения 1000 строк, каждая из которых имеет альфа-значение 0,2. Обратите внимание, что изображение не дает размытого белого цвета в любой заданной точке.

Это также текущее состояние наложения, созданное с помощью плагина webgl Spector для chrome:

Blend State
BLEND: true
BLEND_COLOR: 0, 0, 0, 0
BLEND_DST_ALPHA: ONE_MINUS_SRC_ALPHA
BLEND_DST_RGB: ONE_MINUS_SRC_ALPHA
BLEND_EQUATION_ALPHA: FUNC_ADD
BLEND_EQUATION_RGB: FUNC_ADD
BLEND_SRC_ALPHA: SRC_ALPHA
BLEND_SRC_RGB: SRC_ALPHA

Теперь я использую эту же библиотеку и отрисовываю те же края в макете, и они отрисовываются так:

enter image description here

Эти края имеют непрозрачность 0,2. И это режим наложения Spector:

Blend State
BLEND: true
BLEND_COLOR: 0, 0, 0, 0
BLEND_DST_ALPHA: ONE_MINUS_SRC_ALPHA
BLEND_DST_RGB: ONE_MINUS_SRC_ALPHA
BLEND_EQUATION_ALPHA: FUNC_ADD
BLEND_EQUATION_RGB: FUNC_ADD
BLEND_SRC_ALPHA: SRC_ALPHA
BLEND_SRC_RGB: SRC_ALPHA

Я бью себя по столу, пытаясь понять, в чем может быть разница между этими двумя сценариями.

Логика шейдера просто передает цвет на вершине фрагментному шейдеру, поэтому нет предварительно умноженных альфа.

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

РЕДАКТИРОВАТЬ: Чтобы показать тот же самый тест в этой среде, вот рендеринг колеса и добавление к размытию белым цветом:

enter image description here

1 Ответ

0 голосов
/ 23 апреля 2019

Возможно, в моей библиотеке было какое-то плохое неопределенное поведение:

Я дважды брал контекст gl: canvas.getContext (...), и у каждого был потенциал иметь разные свойства для таких вещей, как предварительно умноженные альфа и атрибуты альфа-установки для контекста.

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

...