我正在创建一个使用简单的阴影贴图渲染阴影的应用程序。
通行证是这样完成的: 屏幕外通过创建阴影贴图->最后通过渲染到交换链,并使用上一遍的深度纹理
我的问题是第一次通过。我使用单个顶点着色器渲染模型,并且仅关联深度纹理。 在管道中,我只有一个附件:
VkAttachmentDescription depthAttachment = {};
depthAttachment.format = m_depthFormat;
depthAttachment.samples = m_msaaSamples;
depthAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
depthAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
depthAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
depthAttachment.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;
在这里,我将“ loadOp”设置为VK_ATTACHMENT_LOAD_OP_CLEAR,但似乎该操作在第二遍执行之前完成。 将“ loadOp”设置为VK_ATTACHMENT_LOAD_OP_DONT_CARE可以在IntelHD Graphics上使用,但不能在Nvidia显卡上使用。
我不确定何时执行“ loadOp”。
感谢您的帮助!
答案 0 :(得分:0)
问题出在值明确。
我使用了2个明确的值:
std::array<VkClearValue, 2> clearValues = {};
clearValues[0].color = { 0.0f, 0.0f, 1.0f, 1.0f };
clearValues[1].depthStencil = { 1.0f };
正确的清除只有深度清除:
std::array<VkClearValue, 1> clearValues = {};
clearValues[0].depthStencil = { 1.0f };