Я создаю внеэкранную текстуру с альфа-компонентом, примеры в закадровом renderPass - это VK_SAMPLE_COUNT_1_BIT. Когда я использую эту текстуру в renderPass VK_SAMPLE_COUNT_4_BIT, я получаю шаблон с черными точками, где есть альфа-компонент. Я понимаю, почему, но я не знаю, как решить эту проблему.
Я подумал, что мог бы использовать внеэкранный рендеринг с VK_SAMPLE_COUNT_4_BIT с другим вложением VK_SAMPLE_COUNT_1_BIT для разрешения, но моя текстура все равно будет VK_SAMPLE_COUNT_1_BIT. Поэтому я не уверен, что это решит проблему черных точек, и я предпочитаю обратиться за советом, прежде чем приступить к большим изменениям.
-------- edit 1 ------- -
Точки появляются, когда я использую следующие настройки VkPipelineMultisampleStateCreateInfo:
.alphaToCoverageEnable = VK_TRUE;
.alphaToOneEnable = VK_TRUE;
Если для этих двух настроек задано значение VK_FALSE, у меня есть прозрачная текстура, но без градиента, она прозрачная или непрозрачная .
Вот мои настройки VkPipelineColorBlendAttachmentState как для закадрового, так и для текстурирования renderPass:
.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA;
.colorBlendOp = VK_BLEND_OP_ADD;
.alphaBlendOp = VK_BLEND_OP_ADD;
Когда я смотрю на закадровую текстуру с зеленым «чистым цветом», я вижу градиент прозрачности , так что я полагаю, что правильно установлен offPreen renderPass.
-------- edit 2 --------
Я изменил renderPass вне экрана, чтобы использовать то же количество отсчетов, что и на экранном, или финальном, renderPass, с помощью прикрепленного файла разрешения с VK_SAMPLE_COUNT_1_BIT.
У меня все еще есть точки, если я устанавливаю .alphaToCoverageEnable и .alphaToOneEnable в VK_TRUE. При значении false полное изображение полупрозрачно, даже непрозрачные части.