【问题标题】:Vulkan flipping viewport result to a black screenVulkan 将视口结果翻转为黑屏
【发布时间】:2020-04-05 20:19:19
【问题描述】:

我正在尝试反转 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);

在渲染文档中,我看到内容被绘制到帧缓冲区,但在特定着色器之后的某一时刻,一切都是黑色的(如果我不进行反转,它就可以正常工作)。 顶点着色器(延迟渲染中的光通道)

void main() 
{
    outUV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);
    gl_Position = vec4(outUV * 2.0f - 1.0f, 0.0f, 1.0f);
}

pass的输入

传球的输出

【问题讨论】:

    标签: c++ vulkan


    【解决方案1】:

    黑色输出可能是您的清晰颜色,这意味着您的几何图形要么被丢弃,要么在视口之外。

    如果您在 Vulkan 1.0 中翻转视口,您还需要启用 VK_KHR_maintenance1(在 Vulkan 1.1 中。这已提升为核心)。

    如果您启用了剔除,您需要翻转剔除模式或管道光栅化状态的正面信息。否则你的几何图形会被丢弃,因为它在翻转视口后背离屏幕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多