Я пытаюсь инвертировать окно просмотра vulkan вместо инвертирования всего остального, но это приводит к черному экрану. Черный экран выглядит так, будто он исходит от одного из моих шейдеров.
Код для инвертирования окна просмотра:
VkRect2D renderArea = {};
renderArea.offset = {0, 0};
renderArea.extent = {
static_cast<uint32_t>(renderStage.GetSize().x),
static_cast<uint32_t>(renderStage.GetSize().y)
};
VkViewport viewport;
viewport.x = 0.0f;
viewport.y = static_cast<float>(renderArea.extent.height);
viewport.width = static_cast<float>(renderArea.extent.width);
viewport.height = -static_cast<float>(renderArea.extent.height);
viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f;
vkCmdSetViewport(
*commandBuffers_[swapchain_->GetActiveImageIndex()],
0,
1,
&viewport);
При рендеринге do c Я вижу, что материал отрисовывается в кадровом буфере, но в какой-то момент после указанного c шейдера все становится черным (это работает просто отлично, если я не делаю инверсию). Вершинный шейдер (световой проход в отложенном рендеринге)
void main()
{
outUV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);
gl_Position = vec4(outUV * 2.0f - 1.0f, 0.0f, 1.0f);
}
Ввод прохода
Вывод прохода