Смешивание цветов является зависимой от порядка операцией и поэтому сложно использовать с буферизацией глубины.
Ваш код:
vk::PipelineColorBlendAttachmentState colorBlendAttachment(true,
vk::BlendFactor::eSrcColor, vk::BlendFactor::eOneMinusSrcColor,
vk::BlendOp::eAdd,
vk::BlendFactor::eOne, vk::BlendFactor::eZero,
vk::BlendOp::eAdd,
Примитивы (треугольники) обрабатываются в порядке примитивов. Здесь, в частности, треугольник, который находится первым в вашем индексном буфере, будет обработан первым.
Теперь, когда тестирование глубины работает, фрагмент продолжается, если он проходит тест глубины. Это означает, что один фрагмент может быть успешным. Тогда другой фрагмент с еще лучшим значением глубины может перезаписать его.
Это влияет на ваше значение Dst blend. В вашем случае это будет либо чистый цвет, либо предыдущий цвет фрагмента, в зависимости от того, что произойдет раньше, в порядке примитивов.
Операция смешивания - srcColor * srcColor + dstColor * (1-srcColor)
. Если ваш предыдущий цвет - 0
, то в результате получается 2*srcColor
, что, вероятно, не имеет смысла, но не заметно. Но если dstColor
является чем-то, то ваш результат становится ярким цветом артефакта с большим количеством оттенка Dst.